✨ This workspace has been generated by Nx, Smart Monorepos · Fast CI. ✨
这是一个使用 nx 的 monorepo 架构的全栈项目,基于 React 和 NestJS 实现了基本的后台管理系统的角色权限控制逻辑,包含一个NextJS的客户端,集成了基本的注册登录逻辑和谷歌、github、Facebook 的 oauth 登录,以及多语言配置。
中后台管理端
- Vite
- React
- Ant Design UI
- zustand
- react-hook-form
修改自另一个开源项目 slash-admin。
客户端
- Vite
- React
- Next UI
- zustand
- react-hook-form
服务端
- Nestjs
- TypeORM
- MySQL
- Redis
- MinIO
在共享库里有个特殊的库 libs\shared
,这个目录用来存放 DTO
, VO
和数据库的 Entity
对象, tsconfig.base.json
文件中配置了特殊前缀指向这个目录,这样前端代码可以直接读取服务端已经写好的数据类型,同时配合 react-hook-form
和 @hookform/resolvers/class-validator
,传入对应的 DTO
后, 可以让前后端公用同一套数据校验逻辑。
中后台管理端的角色权限控制目录在 libs\shared\src\permission
里去控制,server端在启动时每次都会检查并更新数据库。
- node v18.18.2
- pnpm v8.15.3
参考 .env
文件了解需要的环境变量,然后可以按照同样格式添加一个 .env.local
的文件,这个文件已经添加到 git 的忽略文件中。
然后执行:
pnpm i
pnpm dev
项目根目录写了 Dockerfile 文件,直接使用 docker 的打包命令打包一个镜像。
docker build -t ying-starter:test .
启动容器。
docker run --name ying-starter -d \
-p 3000:3000 \
-p 3256:3256 \
-e DOMAIN=localhost \
-e SERVER_URL=http://localhost:3000 \
-e REDIS_HOST=kubernetes.docker.internal \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=ying123456 \
-e DB_HOST=kubernetes.docker.internal \
-e DB_PORT=3306 \
-e DB_USER=root \
-e DB_PASSWORD=ying123456 \
-e DB_NAME=ying_starter \
-e STORAGE_MODE=local \
-e MINIO_HOST= \
-e MINIO_PORT= \
-e MINIO_BUCKET= \
-e MINIO_ACCESS_KEY= \
-e MINIO_SECRET_KEY= \
-e MAIL_HOST= \
-e MAIL_PORT= \
-e MAIL_USER= \
-e MAIL_AUTH_CODE= \
-e AUTH_ADMIN_SECRET= \
-e AUTH_ADMIN_NAME=admin \
-e AUTH_ADMIN_PASS=Admin.123 \
-e AUTH_ADMIN_EXPIRES_IN=1d \
-e AUTH_SECRET= \
-e AUTH_EXPIRES_IN=1h \
-e AUTH_REFRESH_EXPIRES_IN=7d \
-e AUTH_REDIRECT_URL=http://localhost:3256 \
-e AUTH_GITHUB_ID= \
-e AUTH_GITHUB_SECRET= \
-e AUTH_GOOGLE_ID= \
-e AUTH_GOOGLE_SECRET= \
-e AUTH_FACEBOOK_ID= \
-e AUTH_FACEBOOK_SECRET= \
-e VAPID_SUBJECT=mailto:http://localhost:3256 \
-e VAPID_PUBLIC_KEY=BCeOtQOGgu4arg2axtgTBz72kc-OyLomMBgoQCX2S1wMUOr3Z4J9UivXmdsVtDOryRlAJYjTMEViVjjLpxZPcrs \
-e VAPID_PRIVATE_KEY=foPUG2TRWnk5-nqxIrso5JrX5qdVA9IwXBCslxXZrqk \
ying-starter:test
如何对象存储使用本地模式,并需要保存容器内的文件,可以添加映射到容器内的/app/uploadfiles
。