Files
gamegroup/doc/deployment/DEPLOYMENT.md
UGREEN USER b25aa5b143 初始化游戏小组管理系统后端项目
- 基于 NestJS + TypeScript + MySQL + Redis 架构
- 完整的模块化设计(认证、用户、小组、游戏、预约等)
- JWT 认证和 RBAC 权限控制系统
- Docker 容器化部署支持
- 添加 CLAUDE.md 项目开发指南
- 配置 .gitignore 忽略文件

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-28 10:42:06 +08:00

255 lines
5.3 KiB
Markdown
Raw 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.
# 部署指南
## 环境准备
### 开发环境
```bash
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env.development
# 启动开发服务器
npm run start:dev
```
### 生产环境
#### 方式一Docker部署推荐
1. **配置环境变量**
```bash
# 创建生产环境配置
cp .env.example .env.production
# 编辑 .env.production设置以下关键参数
# - DB_PASSWORD: 数据库密码
# - JWT_SECRET: JWT密钥使用强密码
# - CORS_ORIGIN: 允许的前端域名
```
2. **构建和启动**
```bash
# 构建镜像
docker-compose -f docker-compose.prod.yml build
# 启动服务
docker-compose -f docker-compose.prod.yml up -d
# 查看日志
docker-compose -f docker-compose.prod.yml logs -f backend
# 停止服务
docker-compose -f docker-compose.prod.yml down
```
3. **数据库迁移**
```bash
# 进入容器
docker exec -it gamegroup-backend-prod sh
# 运行迁移(如果需要)
npm run migration:run
```
#### 方式二:传统部署
1. **构建应用**
```bash
# 安装依赖
npm ci --only=production
# 构建
npm run build:prod
```
2. **配置PM2**
```bash
# 安装PM2
npm install -g pm2
# 启动应用
pm2 start ecosystem.config.js --env production
# 查看状态
pm2 status
# 查看日志
pm2 logs gamegroup-backend
# 重启
pm2 restart gamegroup-backend
# 设置开机自启
pm2 startup
pm2 save
```
## 性能优化配置
### 数据库优化
1. **创建索引**
```sql
-- 用户表索引
CREATE INDEX idx_user_username ON user(username);
CREATE INDEX idx_user_email ON user(email);
CREATE INDEX idx_user_phone ON user(phone);
-- 小组表索引
CREATE INDEX idx_group_creator ON `group`(creatorId);
CREATE INDEX idx_group_active ON `group`(isActive);
-- 预约表索引
CREATE INDEX idx_appointment_group ON appointment(groupId);
CREATE INDEX idx_appointment_date ON appointment(eventDate);
CREATE INDEX idx_appointment_status ON appointment(status);
-- 小组成员表索引
CREATE INDEX idx_member_group_user ON group_member(groupId, userId);
CREATE INDEX idx_member_active ON group_member(isActive);
```
2. **查询结果缓存**
生产环境已自动启用数据库查询缓存1分钟
### 应用层缓存
应用已集成内存缓存,支持以下功能:
- 用户信息缓存5分钟
- 小组信息缓存5分钟
- 预约信息缓存5分钟
缓存会在数据更新时自动失效。
### 压缩
已启用HTTP响应压缩gzip自动压缩所有响应。
## 监控和日志
### 应用日志
```bash
# Docker环境
docker-compose -f docker-compose.prod.yml logs -f backend
# PM2环境
pm2 logs gamegroup-backend
```
### 健康检查
```bash
# 检查应用状态
curl http://localhost:3000/health
# 检查数据库连接
curl http://localhost:3000/health/db
```
### 性能监控
建议集成以下监控工具:
- **APM**: New Relic、Datadog、AppDynamics
- **日志**: ELK StackElasticsearch + Logstash + Kibana
- **指标**: Prometheus + Grafana
## 备份策略
### 数据库备份
```bash
# 手动备份
docker exec gamegroup-mysql-prod mysqldump -u root -p gamegroup > backup_$(date +%Y%m%d_%H%M%S).sql
# 设置定时备份crontab
0 2 * * * docker exec gamegroup-mysql-prod mysqldump -u root -p${DB_PASSWORD} gamegroup > /backups/backup_$(date +\%Y\%m\%d_\%H\%M\%S).sql
```
### 应用备份
- 代码仓库定期推送
- 配置文件加密存储
- 定期测试恢复流程
## 安全建议
1. **环境变量**
- 不要将 .env 文件提交到版本控制
- 使用强密码JWT_SECRET、数据库密码
- 定期轮换密钥
2. **网络安全**
- 使用HTTPS配置SSL证书
- 限制CORS来源
- 启用请求速率限制
3. **数据库安全**
- 使用非root用户连接
- 限制远程访问
- 定期更新密码
4. **应用安全**
- 及时更新依赖包
- 定期运行安全扫描npm audit
- 配置防火墙规则
## 扩展性
### 水平扩展
```bash
# 启动多个后端实例
docker-compose -f docker-compose.prod.yml up -d --scale backend=3
# 配置Nginx负载均衡
# 编辑 nginx.conf添加upstream配置
```
### Redis缓存可选
如果需要在多实例间共享缓存:
```bash
# 添加Redis服务到docker-compose.prod.yml
# 修改CacheService使用Redis替代内存存储
```
## 故障排查
### 常见问题
1. **数据库连接失败**
- 检查环境变量配置
- 确认MySQL服务已启动
- 验证网络连接
2. **应用无法启动**
- 查看日志 `docker logs gamegroup-backend-prod`
- 检查端口占用 `lsof -i :3000`
- 验证环境变量
3. **性能问题**
- 检查数据库慢查询日志
- 监控缓存命中率
- 分析API响应时间
## 更新部署
### 零停机更新
```bash
# 构建新镜像
docker-compose -f docker-compose.prod.yml build backend
# 滚动更新
docker-compose -f docker-compose.prod.yml up -d --no-deps backend
# 验证新版本
curl http://localhost:3000/health
# 如果有问题,回滚
docker-compose -f docker-compose.prod.yml restart backend
```
## 联系支持
如有部署问题,请参考:
- 项目文档: README.md
- 问题追踪: GitHub Issues
- 技术支持: [邮箱/联系方式]