library-picturebook-activity/docs/deployment/backend-deployment.md
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

251 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 后端部署文档
## 一、本地打包
### 1. 环境准备
```bash
cd backend
# 删除 pnpm 的 node_modules避免软链接问题
rm -rf node_modules
# 用 npm 安装依赖
npm install
# 构建项目
pnpm build
```
### 2. 打包命令
```bash
# 测试环境
bash scripts/compress.sh --env test --version 1.0.0 -n
# 生产环境
bash scripts/compress.sh --env production --version 1.0.0 -n
```
生成文件:`competition-management-service-{env}-{version}.tgz`
### 3. 打包注意事项
| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 软链接失效 | pnpm 使用软链接管理依赖 | 打包前用 `npm install` 替代 `pnpm install` |
| logs 模块缺失 | 打包脚本排除了 `logs` 目录 | 修改 `compress.sh``"logs"``"./logs"` |
| uuid 版本问题 | uuid v9+ 是 ESM 模块 | 安装 `uuid@8.3.2` |
---
## 二、服务器部署
### 1. 上传并解压
```bash
# 本地上传
scp competition-management-service-test-1.0.0.tgz root@服务器IP:/data/web-servers/
# 服务器解压
cd /data/web-servers
tar -xzf competition-management-service-test-1.0.0.tgz
cd competition-management-service
```
### 2. 配置环境变量
```bash
vim .env
```
修改数据库连接:
```env
DATABASE_URL="mysql://用户名:密码@数据库地址:端口/数据库名"
```
示例(腾讯云数据库):
```env
DATABASE_URL="mysql://root:password@gz-cdb-xxx.sql.tencentcdb.com:20704/db_competition_management"
```
### 3. 生成 Prisma Client
```bash
# 如果遇到 SSL 证书问题
export NODE_TLS_REJECT_UNAUTHORIZED=0
npx prisma generate
```
### 4. 创建数据库表
```bash
npx prisma db push
```
### 5. 启动服务
```bash
# 使用 PM2 启动
pm2 start dist/src/main.js --name competition-api-test
# 保存进程列表
pm2 save
# 设置开机自启
pm2 startup
```
### 6. 验证服务
```bash
# 查看状态
pm2 status
# 查看日志
pm2 logs competition-api-test
# 测试接口
curl -X POST http://localhost:3234/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
```
---
## 三、常见问题
### 1. `prisma generate` 报 SSL 证书错误
```
Error: request to https://binaries.prisma.sh/... failed, reason: unable to get local issuer certificate
```
**解决**
```bash
export NODE_TLS_REJECT_UNAUTHORIZED=0
npx prisma generate
```
### 2. `pm2: command not found`
**原因**`/usr/local/bin` 不在 PATH 中
**解决**
```bash
export PATH=$PATH:/usr/local/bin
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc
```
### 3. `MODULE_NOT_FOUND: ./logs/logs.module`
**原因**:打包脚本排除了 `logs` 目录
**解决**:修改 `compress.sh` 第 93 行:
```bash
# 修改前
"logs"
# 修改后
"./logs"
```
### 4. `ERR_REQUIRE_ESM: uuid`
**原因**uuid v9+ 是 ESM 模块,不支持 CommonJS
**解决**
```bash
npm install uuid@8.3.2
```
### 5. 数据库认证失败
```
PrismaClientInitializationError: Authentication failed against database server
```
**解决**:检查 `.env``DATABASE_URL` 的用户名、密码、地址是否正确
### 6. 服务启动后无法访问
**原因**
- 防火墙未开放端口
- 云服务器安全组未配置
**解决**
```bash
# 开放防火墙端口
firewall-cmd --permanent --add-port=3234/tcp
firewall-cmd --reload
```
腾讯云控制台 → 安全组 → 添加入站规则TCP 3234
---
## 四、PM2 常用命令
```bash
pm2 start dist/src/main.js --name app-name # 启动
pm2 stop app-name # 停止
pm2 restart app-name # 重启
pm2 delete app-name # 删除
pm2 status # 查看状态
pm2 logs app-name # 查看日志
pm2 logs app-name --lines 100 # 查看最近100行日志
pm2 save # 保存进程列表
pm2 startup # 设置开机自启
```
---
## 五、数据初始化
### 方式1本地初始化后导出导入
**本地操作**
```bash
cd backend
pnpm init:super-tenant
pnpm init:admin
pnpm init:menus
pnpm init:roles:all
# 导出数据
mysqldump -u root db_competition_management > init_data.sql
```
**导入到云数据库**(使用 DBeaver
1. 连接腾讯云数据库
2. 执行 `SET FOREIGN_KEY_CHECKS = 0;`
3. 执行 SQL 文件
4. 执行 `SET FOREIGN_KEY_CHECKS = 1;`
### 方式2DBeaver 数据传输
1. 连接本地数据库和云数据库
2. 选中本地数据库所有表
3. 右键 → 导出数据 → 数据库表
4. 选择云数据库作为目标
5. 执行传输
---
## 六、目录结构
```
/data/web-servers/competition-management-service/
├── dist/ # 编译后的代码
│ └── src/
│ └── main.js # 入口文件
├── node_modules/ # 依赖
├── prisma/ # Prisma schema
├── .env # 环境配置
├── .env.test # 测试环境配置
├── .env.production # 生产环境配置
├── ecosystem.config.js # PM2 配置
└── package.json
```