Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/LeoKun1231/nest-cms-api

cms后台管理系统接口 使用nestjs+mysql+typeorm/prisma+docker+jwt+redis+apifox,实现了RBAC权限管理。
https://github.com/LeoKun1231/nest-cms-api

docker docker-compose nest prisma rbac redis typeorm winston

Last synced: about 1 month ago
JSON representation

cms后台管理系统接口 使用nestjs+mysql+typeorm/prisma+docker+jwt+redis+apifox,实现了RBAC权限管理。

Awesome Lists containing this project

README

        




写在前面

/* From extension vscode.github */
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

.vscode-dark img[src$=\#gh-light-mode-only],
.vscode-light img[src$=\#gh-dark-mode-only] {
display: none;
}


.task-list-item {
list-style-type: none;
}

.task-list-item-checkbox {
margin-left: -20px;
vertical-align: middle;
pointer-events: none;
}

:root {
--color-note: #0969da;
--color-tip: #1a7f37;
--color-warning: #9a6700;
--color-severe: #bc4c00;
--color-caution: #d1242f;
--color-important: #8250df;
}

@media (prefers-color-scheme: dark) {
:root {
--color-note: #2f81f7;
--color-tip: #3fb950;
--color-warning: #d29922;
--color-severe: #db6d28;
--color-caution: #f85149;
--color-important: #a371f7;
}
}

.markdown-alert {
padding: 0.5rem 1rem;
margin-bottom: 16px;
color: inherit;
border-left: .25em solid #888;
}

.markdown-alert>:first-child {
margin-top: 0
}

.markdown-alert>:last-child {
margin-bottom: 0
}

.markdown-alert .markdown-alert-title {
display: flex;
font-weight: 500;
align-items: center;
line-height: 1
}

.markdown-alert .markdown-alert-title .octicon {
margin-right: 0.5rem;
display: inline-block;
overflow: visible !important;
vertical-align: text-bottom;
fill: currentColor;
}

.markdown-alert.markdown-alert-note {
border-left-color: var(--color-note);
}

.markdown-alert.markdown-alert-note .markdown-alert-title {
color: var(--color-note);
}

.markdown-alert.markdown-alert-important {
border-left-color: var(--color-important);
}

.markdown-alert.markdown-alert-important .markdown-alert-title {
color: var(--color-important);
}

.markdown-alert.markdown-alert-warning {
border-left-color: var(--color-warning);
}

.markdown-alert.markdown-alert-warning .markdown-alert-title {
color: var(--color-warning);
}

.markdown-alert.markdown-alert-tip {
border-left-color: var(--color-tip);
}

.markdown-alert.markdown-alert-tip .markdown-alert-title {
color: var(--color-tip);
}

.markdown-alert.markdown-alert-caution {
border-left-color: var(--color-caution);
}

.markdown-alert.markdown-alert-caution .markdown-alert-title {
color: var(--color-caution);
}




写在前面



  1. 该项目有两个版本一个是prisma版本,一个是typeorm版本,你可以切换分支,master分支是typeorm版本,这边推荐使用prisma版本(我会优先修复prisma版本)。

  2. 该项目是cms的后端项目,具体前端代码在VUE3-CMS-TS-PINIA在这里可以访问体验网站。具体后端接口可以看apifox里的接口。

  3. 这边推荐使用docker-compose进行环境搭建,如果你是window,你需要使用WSL,如果不使用docker-compose,需要自行安装mysql、redis。

  4. jwt所需要使用的公钥和私钥,需要自行生成,并且在.env.*文件中配置,如果不想则直接使用默认的即可。

  5. 具体操作步骤,请看后面的安装步骤。

  6. 如果有什么问题,可以在issue中提出,我会尽快回复。


技术栈

技术栈
描述

1
后端框架
nest
完成

2
数据库
mysql
完成

3
orm
prisma
完成

4
redis
ioredis
完成

5
docker
docker
完成

6
日志
winston
完成

7
编译器
swc
完成

8
鉴权
jwt
完成

9
rbac
rbac
完成

10
二维码登录
qrcode
完成

...
...
...
...

生成jwt的公钥和私钥


1.通过docker生成脚本


./scripts/generate-jwt-keys


将输出类似于此的内容。 您只需要将其添加到.env文件中。


为了设置JWT密钥,请将以下值添加到.env文件中:

JWT_PUBLIC_KEY_BASE64="(long base64 content)"
JWT_PRIVATE_KEY_BASE64="(long base64 content)"

2.不通过docker生成脚本


$ cd local

$ ssh-keygen -t rsa -b 2048 -m PEM -f jwtRS256.key
# Don't add passphrase
$ openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub

你应该这些密钥文件保存在./local目录中,并使用base64编码密钥:


base64 -i local/jwtRS256.key

base64 -i local/jwtRS256.key.pub


必须在.env中输入密钥文件的base64:


JWT_PUBLIC_KEY_BASE64=这里填入经过base64编码的公钥

JWT_PRIVATE_KEY_BASE64=这里填入经过base64编码的私钥

运行项目


你可以使用docker运行项目,也可以不使用docker运行项目。
这边建议使用docker-compose进行运行,如果不使用docker-compose,需要自行安装mysql、redis。
另外,对于windows用户,如果你要使用docker,你需要使用WSL,进入到linux环境进行创建项目,否则可能遇到一些问题。


对于windows用户




  1. 你需要下载mysql、redis,并且在.env、.env.development、.env.production中配置好数据库和redis的连接信息。


    DATABASE_URL="mysql://数据库地址:数据库密码@mysql:3306/demo?timezone=Asia/Shanghai"
    
    REDIS_PORT=6379
    REDIS_HOST=redis地址
    REDIS_PASSWORD=redis密码



  2. 配置数据库、redis之后,你需要在项目根目录下执行下面的命令,运行项目。


    # 安装依赖
    
    pnpm i
    # 生成prisma类型
    pnpx prisma generate
    #推送数据到数据库
    pnpm seed
    #运行项目
    pnpm start:dev



对于Mac、Linux用户




  1. 生产环境下的启动命令


    $ pnpm i
    
    # 生成prisma类型
    $ pnpx prisma generate;
    # 本机没有安装mysql和redis的情况下(仅第一次运行使用,创建mysql,redis以及app容器)
    $ sudo docker-compose -f docker-compose.prod.yml up
    # 推送数据到数据库(仅第一次运行使用)
    $ pnpm seed
    # 本机有安装mysql和redis的情况下(第二次以及往后请执行这个)
    $ sudo docker compose -f docker-compose.app.prod.yml up



  2. 开发环境下的启动命令


    # 安装依赖
    
    $ pnpm i
    # 生成prisma类型
    $ pnpx prisma generate;
    # 打包,生成dist,这一步非常重要哦
    $ pnpm build
    # 本机没有安装mysql和redis的情况下(仅第一次运行使用,创建mysql,redis以及app容器)
    $ sudo docker-compose -f docker-compose.dev.yml up
    # 推送数据到数据库(仅第一次运行使用)
    $ pnpm seed
    # 本机有安装mysql和redis的情况下(第二次以及往后请执行这个)
    $ sudo docker compose -f docker-compose.app.dev.yml up




  3. 如果不想使用docker-compose,可以使用下面的命令进行运行(这种方法也需要手动安装redis和Mysql)。


    # build image
    
    $ docker build -t my-app .
    $ docker run -p 3000:3000 --volume 'pwd':/usr/src/app --env-file .env.development my-app



Prisma操作


具体见prisma官网