259 lines
3.6 KiB
Markdown
Executable File
259 lines
3.6 KiB
Markdown
Executable File
# 14_部署运维_日志监控_备份设计
|
|
|
|
## 1. 文档目标
|
|
|
|
本文档定义系统 B 的部署结构、服务目录、环境变量、日志、监控、备份、告警和清理策略。
|
|
|
|
## 2. 推荐部署架构
|
|
|
|
第一阶段单服务器即可:
|
|
|
|
```text
|
|
Nginx
|
|
NestJS API
|
|
BullMQ Workers
|
|
MySQL
|
|
Redis
|
|
MinIO
|
|
FFmpeg
|
|
Geeker-Admin 静态文件
|
|
uni-app H5 静态文件
|
|
```
|
|
|
|
后续可拆分:
|
|
|
|
```text
|
|
API 服务器
|
|
Worker 服务器
|
|
数据库服务器
|
|
对象存储
|
|
视频渲染服务器
|
|
```
|
|
|
|
## 3. 目录结构建议
|
|
|
|
```text
|
|
/opt/system-b/
|
|
backend/
|
|
admin-web/
|
|
user-web/
|
|
workers/
|
|
logs/
|
|
ffmpeg-temp/
|
|
docker-compose.yml
|
|
.env
|
|
```
|
|
|
|
## 4. 环境变量
|
|
|
|
```text
|
|
NODE_ENV=production
|
|
APP_PORT=3000
|
|
MYSQL_HOST=127.0.0.1
|
|
MYSQL_PORT=3306
|
|
MYSQL_USER=system_b
|
|
MYSQL_PASSWORD=xxx
|
|
MYSQL_DATABASE=system_b
|
|
REDIS_HOST=127.0.0.1
|
|
REDIS_PORT=6379
|
|
MINIO_ENDPOINT=127.0.0.1
|
|
MINIO_PORT=9000
|
|
MINIO_ACCESS_KEY=xxx
|
|
MINIO_SECRET_KEY=xxx
|
|
JWT_SECRET=xxx
|
|
OPENAI_API_KEY=xxx
|
|
```
|
|
|
|
Provider 密钥建议使用密钥管理或环境变量,不直接写入数据库明文。
|
|
|
|
## 5. Nginx 配置目标
|
|
|
|
反代:
|
|
|
|
```text
|
|
/api → NestJS
|
|
/admin → Geeker-Admin
|
|
/ → uni-app H5
|
|
/ws → WebSocket
|
|
```
|
|
|
|
静态文件不直接暴露 MinIO 私密 bucket。
|
|
|
|
## 6. 进程管理
|
|
|
|
可选:
|
|
|
|
- PM2
|
|
- systemd
|
|
- Docker Compose
|
|
|
|
服务:
|
|
|
|
```text
|
|
api-server
|
|
worker-photo
|
|
worker-text
|
|
worker-image
|
|
worker-video
|
|
worker-ffmpeg
|
|
worker-qc
|
|
```
|
|
|
|
## 7. 日志设计
|
|
|
|
日志类型:
|
|
|
|
```text
|
|
api.log
|
|
worker.log
|
|
error.log
|
|
provider.log
|
|
payment.log
|
|
ffmpeg.log
|
|
audit.log
|
|
```
|
|
|
|
日志要求:
|
|
|
|
- 按天切割
|
|
- 保留 30-90 天
|
|
- 敏感信息脱敏
|
|
- 重要错误报警
|
|
|
|
## 8. 监控指标
|
|
|
|
应用指标:
|
|
|
|
- API 响应时间
|
|
- API 错误率
|
|
- 队列积压数
|
|
- 任务失败率
|
|
- Provider 失败率
|
|
- 视频合成耗时
|
|
|
|
系统指标:
|
|
|
|
- CPU
|
|
- 内存
|
|
- 磁盘
|
|
- 网络
|
|
- MinIO 容量
|
|
- MySQL 连接数
|
|
- Redis 内存
|
|
|
|
业务指标:
|
|
|
|
- 今日订单数
|
|
- 今日收入
|
|
- 今日 AI 成本
|
|
- 项目完成数
|
|
- 待审核数
|
|
|
|
## 9. 告警规则
|
|
|
|
触发:
|
|
|
|
- API 5xx 错误率过高
|
|
- 队列积压超过阈值
|
|
- Provider 连续失败
|
|
- 磁盘剩余空间低于 20%
|
|
- MinIO 容量不足
|
|
- MySQL 备份失败
|
|
- 单日 AI 成本超阈值
|
|
|
|
## 10. 数据库备份
|
|
|
|
建议:
|
|
|
|
```text
|
|
每日全量备份
|
|
每小时 binlog 增量
|
|
备份保留 7-30 天
|
|
定期恢复演练
|
|
```
|
|
|
|
备份目录:
|
|
|
|
```text
|
|
/backups/mysql/YYYY-MM-DD/
|
|
```
|
|
|
|
## 11. MinIO 备份
|
|
|
|
策略:
|
|
|
|
- 重要成品每日同步
|
|
- 用户原图按隐私策略备份
|
|
- 临时文件不备份
|
|
- 公开案例单独备份
|
|
|
|
## 12. Redis 持久化
|
|
|
|
Redis 用于队列和缓存:
|
|
|
|
- 开启 AOF 或 RDB
|
|
- 定期检查内存
|
|
- 设置合适 maxmemory 策略
|
|
|
|
## 13. 临时文件清理
|
|
|
|
清理对象:
|
|
|
|
- FFmpeg 临时文件
|
|
- 预览临时素材
|
|
- 失败任务中间文件
|
|
- 过期下载包
|
|
|
|
策略:
|
|
|
|
```text
|
|
每晚 cleanup_queue 执行
|
|
临时文件保留 1-3 天
|
|
失败任务文件保留 7 天
|
|
```
|
|
|
|
## 14. 项目素材保留策略
|
|
|
|
建议:
|
|
|
|
| 类型 | 保留 |
|
|
|---|---|
|
|
| 用户上传原图 | 按用户协议,默认 90-180 天或项目删除后清理 |
|
|
| 预览图 | 30 天 |
|
|
| 正式图 | 180 天或长期,按套餐 |
|
|
| 成品视频 | 180 天或长期,按套餐 |
|
|
| 公开案例 | 授权有效期间保留 |
|
|
|
|
## 15. 发布流程
|
|
|
|
```text
|
|
代码提交
|
|
→ 自动测试
|
|
→ 构建后端
|
|
→ 构建后台
|
|
→ 构建用户端
|
|
→ 数据库迁移
|
|
→ 灰度发布
|
|
→ 检查日志
|
|
→ 正式发布
|
|
```
|
|
|
|
## 16. 回滚方案
|
|
|
|
必须保留:
|
|
|
|
- 上一个后端版本
|
|
- 上一个前端静态包
|
|
- 数据库迁移回滚脚本
|
|
- 配置备份
|
|
|
|
## 17. 安全要求
|
|
|
|
- HTTPS
|
|
- 后台登录二次验证,后续可加
|
|
- 密钥不提交代码仓库
|
|
- 上传文件类型限制
|
|
- API 限流
|
|
- 防刷验证码
|
|
- 后台操作日志
|