Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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权限管理。
- Host: GitHub
- URL: https://github.com/LeoKun1231/nest-cms-api
- Owner: LeoKun1231
- Created: 2023-11-11T14:20:58.000Z (about 1 year ago)
- Default Branch: prisma
- Last Pushed: 2024-04-09T05:19:02.000Z (8 months ago)
- Last Synced: 2024-08-02T17:32:33.908Z (4 months ago)
- Topics: docker, docker-compose, nest, prisma, rbac, redis, typeorm, winston
- Language: TypeScript
- Homepage: https://apifox.com/apidoc/shared-ede0e4ad-7f38-42fd-a749-3c8df4d8b7ba
- Size: 1.55 MB
- Stars: 74
- Watchers: 1
- Forks: 13
- Open Issues: 0
-
Metadata Files:
- Readme: README.html
Awesome Lists containing this project
- awesome-admin - nest-cms-api - cms-api.svg?style=social&label=Star) cms后台管理系统接口 使用nestjs+mysql+typeorm/prisma+docker+jwt+redis+apifox,实现了RBAC权限管理。 (Nestjs)
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);
}
写在前面
- 该项目有两个版本一个是prisma版本,一个是typeorm版本,你可以切换分支,master分支是typeorm版本,这边推荐使用prisma版本(我会优先修复prisma版本)。
- 该项目是cms的后端项目,具体前端代码在VUE3-CMS-TS-PINIA,在这里可以访问体验网站。具体后端接口可以看apifox里的接口。
- 这边推荐使用docker-compose进行环境搭建,如果你是window,你需要使用WSL,如果不使用docker-compose,需要自行安装mysql、redis。
- jwt所需要使用的公钥和私钥,需要自行生成,并且在.env.*文件中配置,如果不想则直接使用默认的即可。
- 具体操作步骤,请看后面的安装步骤。
- 如果有什么问题,可以在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用户
-
你需要下载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密码
-
配置数据库、redis之后,你需要在项目根目录下执行下面的命令,运行项目。
# 安装依赖
pnpm i
# 生成prisma类型
pnpx prisma generate
#推送数据到数据库
pnpm seed
#运行项目
pnpm start:dev
对于Mac、Linux用户
-
生产环境下的启动命令
$ 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
-
开发环境下的启动命令
# 安装依赖
$ 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
-
如果不想使用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官网