{"id":13597947,"url":"https://github.com/LeoKun1231/nest-cms-api","last_synced_at":"2025-04-10T06:30:35.978Z","repository":{"id":208214416,"uuid":"717450403","full_name":"LeoKun1231/nest-cms-api","owner":"LeoKun1231","description":" cms后台管理系统接口 使用nestjs+mysql+typeorm/prisma+docker+jwt+redis+apifox，实现了RBAC权限管理。","archived":false,"fork":false,"pushed_at":"2024-04-09T05:19:02.000Z","size":1622,"stargazers_count":80,"open_issues_count":0,"forks_count":14,"subscribers_count":1,"default_branch":"prisma","last_synced_at":"2024-11-06T22:40:55.063Z","etag":null,"topics":["docker","docker-compose","nest","prisma","rbac","redis","typeorm","winston"],"latest_commit_sha":null,"homepage":"https://apifox.com/apidoc/shared-ede0e4ad-7f38-42fd-a749-3c8df4d8b7ba","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LeoKun1231.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-11-11T14:20:58.000Z","updated_at":"2024-10-09T12:05:11.000Z","dependencies_parsed_at":"2024-01-20T05:25:20.893Z","dependency_job_id":"e4afe0a6-5d52-40dd-80c6-437920978a20","html_url":"https://github.com/LeoKun1231/nest-cms-api","commit_stats":null,"previous_names":["leokun1231/cms-backend","leokun1231/nest-cms-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoKun1231%2Fnest-cms-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoKun1231%2Fnest-cms-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoKun1231%2Fnest-cms-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoKun1231%2Fnest-cms-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LeoKun1231","download_url":"https://codeload.github.com/LeoKun1231/nest-cms-api/tar.gz/refs/heads/prisma","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248168106,"owners_count":21058770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","nest","prisma","rbac","redis","typeorm","winston"],"created_at":"2024-08-01T17:00:44.200Z","updated_at":"2025-04-10T06:30:35.149Z","avatar_url":"https://github.com/LeoKun1231.png","language":"TypeScript","funding_links":[],"categories":["Nestjs"],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n        \u003chtml\u003e\n        \u003chead\u003e\n            \u003cmeta charset=\"UTF-8\"\u003e\n            \u003ctitle\u003e\u0026#x5199;\u0026#x5728;\u0026#x524d;\u0026#x9762;\u003c/title\u003e\n            \u003cstyle\u003e\n/* From extension vscode.github */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.vscode-dark img[src$=\\#gh-light-mode-only],\n.vscode-light img[src$=\\#gh-dark-mode-only] {\n\tdisplay: none;\n}\n\n\u003c/style\u003e\n            \u003clink rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/katex/dist/katex.min.css\"\u003e\n\u003clink href=\"https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.css\" rel=\"stylesheet\" type=\"text/css\"\u003e\n        \u003clink rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css\"\u003e\n\u003clink rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css\"\u003e\n\n        \u003cstyle\u003e\n.task-list-item {\r\n    list-style-type: none;\r\n}\r\n\r\n.task-list-item-checkbox {\r\n    margin-left: -20px;\r\n    vertical-align: middle;\r\n    pointer-events: none;\r\n}\n\u003c/style\u003e\n\u003cstyle\u003e\n:root {\n  --color-note: #0969da;\n  --color-tip: #1a7f37;\n  --color-warning: #9a6700;\n  --color-severe: #bc4c00;\n  --color-caution: #d1242f;\n  --color-important: #8250df;\n}\n\n\u003c/style\u003e\n\u003cstyle\u003e\n@media (prefers-color-scheme: dark) {\n  :root {\n    --color-note: #2f81f7;\n    --color-tip: #3fb950;\n    --color-warning: #d29922;\n    --color-severe: #db6d28;\n    --color-caution: #f85149;\n    --color-important: #a371f7;\n  }\n}\n\n\u003c/style\u003e\n\u003cstyle\u003e\n.markdown-alert {\n  padding: 0.5rem 1rem;\n  margin-bottom: 16px;\n  color: inherit;\n  border-left: .25em solid #888;\n}\n\n.markdown-alert\u003e:first-child {\n  margin-top: 0\n}\n\n.markdown-alert\u003e:last-child {\n  margin-bottom: 0\n}\n\n.markdown-alert .markdown-alert-title {\n  display: flex;\n  font-weight: 500;\n  align-items: center;\n  line-height: 1\n}\n\n.markdown-alert .markdown-alert-title .octicon {\n  margin-right: 0.5rem;\n  display: inline-block;\n  overflow: visible !important;\n  vertical-align: text-bottom;\n  fill: currentColor;\n}\n\n.markdown-alert.markdown-alert-note {\n  border-left-color: var(--color-note);\n}\n\n.markdown-alert.markdown-alert-note .markdown-alert-title {\n  color: var(--color-note);\n}\n\n.markdown-alert.markdown-alert-important {\n  border-left-color: var(--color-important);\n}\n\n.markdown-alert.markdown-alert-important .markdown-alert-title {\n  color: var(--color-important);\n}\n\n.markdown-alert.markdown-alert-warning {\n  border-left-color: var(--color-warning);\n}\n\n.markdown-alert.markdown-alert-warning .markdown-alert-title {\n  color: var(--color-warning);\n}\n\n.markdown-alert.markdown-alert-tip {\n  border-left-color: var(--color-tip);\n}\n\n.markdown-alert.markdown-alert-tip .markdown-alert-title {\n  color: var(--color-tip);\n}\n\n.markdown-alert.markdown-alert-caution {\n  border-left-color: var(--color-caution);\n}\n\n.markdown-alert.markdown-alert-caution .markdown-alert-title {\n  color: var(--color-caution);\n}\n\n\u003c/style\u003e\n        \n        \u003c/head\u003e\n        \u003cbody class=\"vscode-body vscode-light\"\u003e\n            \u003ch1 id=\"写在前面\"\u003e写在前面\u003c/h1\u003e\n\u003col\u003e\n\u003cli\u003e该项目有两个版本一个是prisma版本，一个是typeorm版本，你可以切换分支，master分支是typeorm版本，这边推荐使用prisma版本(我会优先修复prisma版本)。\u003c/li\u003e\n\u003cli\u003e该项目是cms的后端项目，具体前端代码在\u003ca href=\"https://github.com/LeoKun1231/VUE3-CMS-TS-PINIA\"\u003eVUE3-CMS-TS-PINIA\u003c/a\u003e，\u003ca href=\"https://cms.hqk10.xyz\"\u003e在这里可以访问体验网站\u003c/a\u003e。具体后端接口可以看\u003ca href=\"https://apifox.com/apidoc/shared-ede0e4ad-7f38-42fd-a749-3c8df4d8b7ba\"\u003eapifox\u003c/a\u003e里的接口。\u003c/li\u003e\n\u003cli\u003e这边推荐使用docker-compose进行环境搭建，如果你是window,你需要使用WSL，如果不使用docker-compose，需要自行安装mysql、redis。\u003c/li\u003e\n\u003cli\u003ejwt所需要使用的公钥和私钥，需要自行生成，并且在.env.*文件中配置，如果不想则直接使用默认的即可。\u003c/li\u003e\n\u003cli\u003e具体操作步骤，请看后面的安装步骤。\u003c/li\u003e\n\u003cli\u003e如果有什么问题，可以在issue中提出，我会尽快回复。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"技术栈\"\u003e技术栈\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003e技术栈\u003c/th\u003e\n\u003cth\u003e描述\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003e后端框架\u003c/td\u003e\n\u003ctd\u003enest\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003e数据库\u003c/td\u003e\n\u003ctd\u003emysql\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003eorm\u003c/td\u003e\n\u003ctd\u003eprisma\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4\u003c/td\u003e\n\u003ctd\u003eredis\u003c/td\u003e\n\u003ctd\u003eioredis\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5\u003c/td\u003e\n\u003ctd\u003edocker\u003c/td\u003e\n\u003ctd\u003edocker\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e6\u003c/td\u003e\n\u003ctd\u003e日志\u003c/td\u003e\n\u003ctd\u003ewinston\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003e编译器\u003c/td\u003e\n\u003ctd\u003eswc\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e8\u003c/td\u003e\n\u003ctd\u003e鉴权\u003c/td\u003e\n\u003ctd\u003ejwt\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e9\u003c/td\u003e\n\u003ctd\u003erbac\u003c/td\u003e\n\u003ctd\u003erbac\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e10\u003c/td\u003e\n\u003ctd\u003e二维码登录\u003c/td\u003e\n\u003ctd\u003eqrcode\u003c/td\u003e\n\u003ctd\u003e完成\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e...\u003c/td\u003e\n\u003ctd\u003e...\u003c/td\u003e\n\u003ctd\u003e...\u003c/td\u003e\n\u003ctd\u003e...\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"生成jwt的公钥和私钥\"\u003e生成jwt的公钥和私钥\u003c/h2\u003e\n\u003ch3 id=\"1通过docker生成脚本\"\u003e1.通过docker生成脚本\u003c/h3\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003e./scripts/generate-jwt-keys\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e将输出类似于此的内容。 您只需要将其添加到.env文件中。\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e为了设置JWT密钥，请将以下值添加到.env文件中：\nJWT_PUBLIC_KEY_BASE64=\u0026quot;(long base64 content)\u0026quot;\nJWT_PRIVATE_KEY_BASE64=\u0026quot;(long base64 content)\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"2不通过docker生成脚本\"\u003e2.不通过docker生成脚本\u003c/h3\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003e$ \u003cspan class=\"hljs-built_in\"\u003ecd\u003c/span\u003e \u003cspan class=\"hljs-built_in\"\u003elocal\u003c/span\u003e\n$ ssh-keygen -t rsa -b 2048 -m PEM -f jwtRS256.key\n\u003cspan class=\"hljs-comment\"\u003e# Don\u0026#x27;t add passphrase\u003c/span\u003e\n$ openssl rsa -\u003cspan class=\"hljs-keyword\"\u003ein\u003c/span\u003e jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e你应该这些密钥文件保存在\u003ccode\u003e./local\u003c/code\u003e目录中，并使用base64编码密钥：\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003e\u003cspan class=\"hljs-built_in\"\u003ebase64\u003c/span\u003e -i \u003cspan class=\"hljs-built_in\"\u003elocal\u003c/span\u003e/jwtRS256.key\n\n\u003cspan class=\"hljs-built_in\"\u003ebase64\u003c/span\u003e -i \u003cspan class=\"hljs-built_in\"\u003elocal\u003c/span\u003e/jwtRS256.key.pub\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e必须在.env中输入密钥文件的base64：\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003eJWT_PUBLIC_KEY_BASE64=这里填入经过\u003cspan class=\"hljs-built_in\"\u003ebase64\u003c/span\u003e编码的公钥\nJWT_PRIVATE_KEY_BASE64=这里填入经过\u003cspan class=\"hljs-built_in\"\u003ebase64\u003c/span\u003e编码的私钥\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"运行项目\"\u003e运行项目\u003c/h2\u003e\n\u003cp\u003e你可以使用docker运行项目，也可以不使用docker运行项目。\n这边建议使用docker-compose进行运行，如果不使用docker-compose，需要自行安装mysql、redis。\n\u003cstrong\u003e另外，对于windows用户，如果你要使用docker,你需要使用WSL，进入到linux环境进行创建项目，否则可能遇到一些问题。\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 id=\"对于windows用户\"\u003e对于windows用户\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e你需要下载mysql、redis,并且在.env、.env.development、.env.production中配置好数据库和redis的连接信息。\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003eDATABASE_URL=\u003cspan class=\"hljs-string\"\u003e\u0026quot;mysql://数据库地址:数据库密码@mysql:3306/demo?timezone=Asia/Shanghai\u0026quot;\u003c/span\u003e\nREDIS_PORT=6379\nREDIS_HOST=redis地址\nREDIS_PASSWORD=redis密码\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e配置数据库、redis之后，你需要在项目根目录下执行下面的命令，运行项目。\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003e\u003cspan class=\"hljs-comment\"\u003e# 安装依赖\u003c/span\u003e\npnpm i\n\u003cspan class=\"hljs-comment\"\u003e# 生成prisma类型\u003c/span\u003e\npnpx prisma generate\n\u003cspan class=\"hljs-comment\"\u003e#推送数据到数据库\u003c/span\u003e\npnpm seed\n\u003cspan class=\"hljs-comment\"\u003e#运行项目\u003c/span\u003e\npnpm start:dev\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"对于maclinux用户\"\u003e对于Mac、Linux用户\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e生产环境下的启动命令\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003e$ pnpm i\n\u003cspan class=\"hljs-comment\"\u003e# 生成prisma类型\u003c/span\u003e\n$ pnpx prisma generate;\n\u003cspan class=\"hljs-comment\"\u003e# 本机没有安装mysql和redis的情况下(仅第一次运行使用，创建mysql,redis以及app容器)\u003c/span\u003e\n$ sudo docker-compose -f docker-compose.prod.yml up\n\u003cspan class=\"hljs-comment\"\u003e# 推送数据到数据库(仅第一次运行使用)\u003c/span\u003e\n$ pnpm seed\n\u003cspan class=\"hljs-comment\"\u003e# 本机有安装mysql和redis的情况下(第二次以及往后请执行这个)\u003c/span\u003e\n$ sudo docker compose -f docker-compose.app.prod.yml up\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e开发环境下的启动命令\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003e\u003cspan class=\"hljs-comment\"\u003e# 安装依赖\u003c/span\u003e\n$ pnpm i\n\u003cspan class=\"hljs-comment\"\u003e# 生成prisma类型\u003c/span\u003e\n$ pnpx prisma generate;\n\u003cspan class=\"hljs-comment\"\u003e# 打包，生成dist，这一步非常重要哦\u003c/span\u003e\n$ pnpm build\n\u003cspan class=\"hljs-comment\"\u003e# 本机没有安装mysql和redis的情况下(仅第一次运行使用，创建mysql,redis以及app容器)\u003c/span\u003e\n$ sudo docker-compose -f docker-compose.dev.yml up\n\u003cspan class=\"hljs-comment\"\u003e# 推送数据到数据库(仅第一次运行使用)\u003c/span\u003e\n$ pnpm seed\n\u003cspan class=\"hljs-comment\"\u003e# 本机有安装mysql和redis的情况下(第二次以及往后请执行这个)\u003c/span\u003e\n$ sudo docker compose -f docker-compose.app.dev.yml up\n\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e如果不想使用docker-compose，可以使用下面的命令进行运行(这种方法也需要手动安装redis和Mysql)。\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-bash\"\u003e\u003cspan class=\"hljs-comment\"\u003e# build image\u003c/span\u003e\n$ docker build -t my-app .\n$ docker run -p 3000:3000 --volume \u003cspan class=\"hljs-string\"\u003e\u0026#x27;pwd\u0026#x27;\u003c/span\u003e:/usr/src/app  --env-file .env.development my-app\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"prisma操作\"\u003ePrisma操作\u003c/h2\u003e\n\u003cp\u003e具体见\u003ca href=\"https://www.prisma.io/docs/concepts/components/prisma-client/crud\"\u003eprisma官网\u003c/a\u003e\u003c/p\u003e\n\n            \u003cscript async src=\"https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.js\"\u003e\u003c/script\u003e\n            \n        \u003c/body\u003e\n        \u003c/html\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLeoKun1231%2Fnest-cms-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLeoKun1231%2Fnest-cms-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLeoKun1231%2Fnest-cms-api/lists"}