# Admin Service 部署文档 ## 目录 - [1. 部署概述](#1-部署概述) - [2. 环境准备](#2-环境准备) - [3. 快速开始](#3-快速开始) - [4. 本地部署](#4-本地部署) - [5. Docker 部署](#5-docker-部署) - [6. 生产环境部署](#6-生产环境部署) - [7. 监控和维护](#7-监控和维护) - [8. 故障排查](#8-故障排查) --- ## 1. 部署概述 ### 1.1 部署架构 ``` ┌─────────────────────────────────────────────────┐ │ Load Balancer │ │ (Nginx / AWS ALB / etc.) │ └───────────────────┬─────────────────────────────┘ │ ┌───────────┼───────────┐ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Admin │ │ Admin │ │ Admin │ │ Service │ │ Service │ │ Service │ │ Instance │ │ Instance │ │ Instance │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └─────────────┼─────────────┘ │ ▼ ┌──────────────────┐ │ PostgreSQL │ │ (Primary + │ │ Replicas) │ └──────────────────┘ ``` ### 1.2 部署环境 | 环境 | 说明 | 数据库 | 实例数 | |-----|------|--------|-------| | **Development** | 开发环境 | 本地/Docker | 1 | | **Staging** | 预发布环境 | 独立数据库 | 1-2 | | **Production** | 生产环境 | 高可用集群 | 3+ | ### 1.3 系统要求 #### 最低配置 | 资源 | 要求 | |-----|------| | **CPU** | 2 核心 | | **内存** | 2 GB | | **硬盘** | 20 GB (SSD) | | **网络** | 100 Mbps | #### 推荐配置 (生产环境) | 资源 | 要求 | |-----|------| | **CPU** | 4 核心 | | **内存** | 4-8 GB | | **硬盘** | 50 GB (SSD) | | **网络** | 1 Gbps | --- ## 2. 环境准备 ### 2.1 服务器准备 ```bash # Ubuntu 22.04 LTS 示例 # 1. 更新系统 sudo apt update && sudo apt upgrade -y # 2. 安装基础工具 sudo apt install -y \ curl \ wget \ git \ build-essential \ ca-certificates \ gnupg \ lsb-release # 3. 安装 Node.js 20.x curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs # 验证 node --version # v20.x.x npm --version # 10.x.x # 4. 安装 PM2 (进程管理器) sudo npm install -g pm2 # 5. 安装 PostgreSQL 16 sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update sudo apt install -y postgresql-16 ``` ### 2.2 数据库配置 ```bash # 1. 切换到 postgres 用户 sudo -u postgres psql # 2. 创建数据库和用户 CREATE DATABASE admin_service_prod; CREATE USER admin_service WITH ENCRYPTED PASSWORD 'your_secure_password'; GRANT ALL PRIVILEGES ON DATABASE admin_service_prod TO admin_service; # 3. 退出 psql \q # 4. 配置 PostgreSQL 允许远程连接 (如果需要) sudo nano /etc/postgresql/16/main/postgresql.conf # 修改: listen_addresses = '*' sudo nano /etc/postgresql/16/main/pg_hba.conf # 添加: host all all 0.0.0.0/0 md5 # 5. 重启 PostgreSQL sudo systemctl restart postgresql ``` ### 2.3 防火墙配置 ```bash # UFW 防火墙配置 sudo ufw allow 22/tcp # SSH sudo ufw allow 3005/tcp # Admin Service (或通过 Nginx 反向代理) sudo ufw allow 5432/tcp # PostgreSQL (仅内网) sudo ufw enable sudo ufw status ``` --- ## 3. 快速开始 ### 3.1 一键启动 (推荐) 使用 `deploy.sh` 脚本快速启动所有服务: ```bash # 进入项目目录 cd backend/services/admin-service # 启动所有服务 (包含 PostgreSQL, Redis) ./deploy.sh start # 检查服务状态 ./deploy.sh status # 查看日志 ./deploy.sh logs # 健康检查 ./deploy.sh health ``` ### 3.2 验证部署 ```bash # 健康检查 curl http://localhost:3010/api/v1/health # 预期响应 { "status": "ok", "service": "admin-service", "timestamp": "2025-12-02T12:00:00.000Z" } ``` ### 3.3 环境文件说明 | 文件 | 用途 | 说明 | |------|------|------| | `.env.example` | 配置模板 | 所有配置项的参考 | | `.env.development` | 本地开发 | 使用本地数据库连接 | | `.env.production` | 生产环境 | 使用变量引用,部署时注入 | | `.env.test` | 测试环境 | 独立的测试数据库 | | `.env` | 实际使用 | 复制自上述文件,不提交到 Git | ### 3.4 deploy.sh 命令速查 ```bash # 构建 ./deploy.sh build # 构建 Docker 镜像 ./deploy.sh build-no-cache # 无缓存构建 # 生命周期 ./deploy.sh start # 启动所有服务 ./deploy.sh stop # 停止所有服务 ./deploy.sh restart # 重启服务 ./deploy.sh up # 前台启动 (查看日志) ./deploy.sh down # 停止并删除容器和卷 # 监控 ./deploy.sh logs # 实时日志 ./deploy.sh logs-tail # 最近 100 行日志 ./deploy.sh status # 服务状态 ./deploy.sh health # 健康检查 # 数据库 ./deploy.sh migrate # 生产迁移 ./deploy.sh migrate-dev # 开发迁移 ./deploy.sh prisma-studio # Prisma GUI # 开发 ./deploy.sh dev # 开发模式 ./deploy.sh test # 运行测试 ./deploy.sh shell # 进入容器 # 清理 ./deploy.sh clean # 清理容器 ./deploy.sh clean-all # 清理容器、卷和镜像 # 信息 ./deploy.sh info # 显示服务信息 ``` --- ## 4. 本地部署 ### 4.1 克隆代码 ```bash cd /opt sudo git clone https://github.com/your-org/rwa-durian.git cd rwa-durian/backend/services/admin-service # 设置权限 sudo chown -R $USER:$USER /opt/rwa-durian ``` ### 4.2 安装依赖 ```bash npm ci --omit=dev ``` ### 4.3 环境配置 创建 `.env.production`: ```env # 应用配置 NODE_ENV=production APP_PORT=3010 API_PREFIX=api/v1 # 数据库配置 DATABASE_URL=postgresql://admin_service:your_secure_password@localhost:5432/rwa_admin?schema=public # 日志配置 LOG_LEVEL=info # CORS 配置 CORS_ORIGIN=https://admin.rwadurian.com,https://app.rwadurian.com # 安全配置 (待实现) JWT_SECRET=your_super_secret_jwt_key_change_in_production ``` ### 4.4 数据库迁移 ```bash # 生成 Prisma Client npm run prisma:generate # 运行迁移 npm run prisma:migrate:deploy # (可选) 运行初始化脚本 psql -U admin_service -d admin_service_prod -f database/init.sql ``` ### 4.5 构建应用 ```bash npm run build ``` ### 4.6 使用 PM2 启动 创建 `ecosystem.config.js`: ```javascript module.exports = { apps: [ { name: 'admin-service', script: 'dist/main.js', instances: 2, // CPU 核心数 exec_mode: 'cluster', env: { NODE_ENV: 'production', APP_PORT: 3010, }, env_file: '.env.production', error_file: 'logs/error.log', out_file: 'logs/out.log', log_date_format: 'YYYY-MM-DD HH:mm:ss', merge_logs: true, autorestart: true, max_memory_restart: '500M', watch: false, }, ], }; ``` 启动服务: ```bash # 启动 pm2 start ecosystem.config.js # 查看状态 pm2 status # 查看日志 pm2 logs admin-service # 重启 pm2 restart admin-service # 停止 pm2 stop admin-service # 删除 pm2 delete admin-service ``` ### 4.7 设置开机自启动 ```bash # 保存 PM2 进程列表 pm2 save # 生成启动脚本 pm2 startup systemd # 执行输出的命令 (类似): # sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u your_user --hp /home/your_user ``` ### 4.8 验证部署 ```bash # 检查服务状态 curl http://localhost:3010/api/v1/health # 预期响应 {"status": "ok", "service": "admin-service", "timestamp": "..."} # 检查版本查询 curl "http://localhost:3010/api/v1/versions/check-update?platform=android¤tVersionCode=1" # PM2 状态 pm2 status ``` --- ## 5. Docker 部署 ### 5.1 使用 deploy.sh (推荐) ```bash # 构建镜像 ./deploy.sh build # 启动所有服务 ./deploy.sh start # 查看状态 ./deploy.sh status # 运行数据库迁移 ./deploy.sh migrate ``` ### 5.2 Dockerfile **已配置的 Dockerfile** 特性: ```dockerfile # 构建阶段 FROM node:20-alpine AS builder WORKDIR /app # 安装 OpenSSL (Prisma 需要) RUN apk add --no-cache openssl # 复制 package.json 和 package-lock.json COPY package*.json ./ COPY prisma ./prisma/ # 安装依赖 RUN npm ci # 生成 Prisma Client RUN npx prisma generate # 复制源代码 COPY . . # 构建 RUN npm run build # 生产阶段 FROM node:20-alpine WORKDIR /app RUN apk add --no-cache openssl # 复制依赖 COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package*.json ./ COPY --from=builder /app/dist ./dist COPY --from=builder /app/prisma ./prisma # 暴露端口 EXPOSE 3010 # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=40s \ CMD curl -f http://localhost:3010/api/v1/health || exit 1 # 启动命令 CMD ["node", "dist/main.js"] ``` ### 5.3 Docker Compose **docker-compose.yml** 服务架构: ``` ┌─────────────────────────────────────┐ │ admin-service (3010) │ │ NestJS Application │ └──────────────┬──────────────────────┘ │ ┌───────┴───────┐ │ │ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ PostgreSQL │ │ Redis │ │ (5433) │ │ (6380) │ └──────────────┘ └──────────────┘ ``` **端口映射** (避免与其他服务冲突): - admin-service: 3010 - PostgreSQL: 5433 (外部) → 5432 (内部) - Redis: 6380 (外部) → 6379 (内部) ```yaml services: admin-service: build: . container_name: rwa-admin-service ports: - "3010:3010" environment: - NODE_ENV=production - APP_PORT=3010 - API_PREFIX=api/v1 - DATABASE_URL=postgresql://postgres:password@postgres:5432/rwa_admin?schema=public - JWT_SECRET=your-admin-jwt-secret-change-in-production - REDIS_HOST=redis - REDIS_PORT=6379 depends_on: postgres: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3010/api/v1/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s restart: unless-stopped postgres: image: postgres:16-alpine container_name: rwa-admin-postgres environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=password - POSTGRES_DB=rwa_admin ports: - "5433:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d rwa_admin"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped redis: image: redis:7-alpine container_name: rwa-admin-redis ports: - "6380:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped volumes: postgres_data: name: admin-service-postgres-data redis_data: name: admin-service-redis-data ``` ### 5.4 Docker 部署步骤 ```bash # 使用 deploy.sh (推荐) ./deploy.sh build # 构建镜像 ./deploy.sh start # 启动服务 ./deploy.sh migrate # 运行迁移 ./deploy.sh logs # 查看日志 ./deploy.sh status # 查看状态 ./deploy.sh stop # 停止服务 ./deploy.sh down # 清理 (包括数据) # 或使用原生 docker compose docker compose build docker compose up -d docker compose exec admin-service npx prisma migrate deploy docker compose logs -f admin-service docker compose ps docker compose down docker compose down -v ``` ### 5.5 Docker 健康检查 ```bash # 检查容器健康状态 docker ps # 查看健康检查日志 docker inspect rwa-admin-service | jq '.[0].State.Health' # 手动健康检查 docker exec rwa-admin-service curl -f http://localhost:3010/api/v1/health ``` --- ## 6. 生产环境部署 ### 6.1 Nginx 反向代理 **安装 Nginx**: ```bash sudo apt install -y nginx ``` **集成到 RWA API 网关** (`/etc/nginx/sites-available/rwaapi.szaiai.com.conf`): ```nginx upstream admin_service { least_conn; server 192.168.1.111:3010; # server 192.168.1.112:3010; # 多实例负载均衡 } # 在主 server 块中添加 admin-service 路由 server { listen 443 ssl http2; server_name rwaapi.szaiai.com; # SSL 配置 (已在主配置中设置) ssl_certificate /etc/letsencrypt/live/rwaapi.szaiai.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/rwaapi.szaiai.com/privkey.pem; include /etc/nginx/snippets/ssl-params.conf; # Admin Service 路由 - 版本管理 location /api/v1/versions { include /etc/nginx/snippets/proxy-params.conf; include /etc/nginx/snippets/cors-params.conf; proxy_pass http://admin_service; } # Admin Service 路由 - 管理接口 (预留) location /api/v1/admin { include /etc/nginx/snippets/proxy-params.conf; include /etc/nginx/snippets/cors-params.conf; proxy_pass http://admin_service; } # ... 其他服务路由 (identity, wallet, etc.) } ``` **启用配置**: ```bash # 测试配置 sudo nginx -t # 重载配置 sudo systemctl reload nginx ``` ### 6.2 SSL 证书 (Let's Encrypt) ```bash # 安装 Certbot sudo apt install -y certbot python3-certbot-nginx # 获取证书 sudo certbot --nginx -d admin-api.rwadurian.com # 自动续期测试 sudo certbot renew --dry-run # 自动续期 (crontab) sudo crontab -e # 添加: 0 3 * * * certbot renew --quiet ``` ### 6.3 日志管理 #### 日志轮转 创建 `/etc/logrotate.d/admin-service`: ``` /opt/rwa-durian/backend/services/admin-service/logs/*.log { daily rotate 30 compress delaycompress notifempty create 0640 your_user your_user sharedscripts postrotate pm2 reloadLogs endscript } ``` #### 查看日志 ```bash # PM2 日志 pm2 logs admin-service # 实时日志 pm2 logs admin-service --lines 100 # 错误日志 pm2 logs admin-service --err # Nginx 日志 sudo tail -f /var/log/nginx/admin-service-access.log sudo tail -f /var/log/nginx/admin-service-error.log ``` ### 6.4 数据库备份 #### 自动备份脚本 创建 `/opt/scripts/backup-admin-db.sh`: ```bash #!/bin/bash # 配置 DB_NAME="admin_service_prod" DB_USER="admin_service" BACKUP_DIR="/opt/backups/admin-service" DATE=$(date +%Y%m%d_%H%M%S) RETENTION_DAYS=30 # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份 pg_dump -U $DB_USER -d $DB_NAME -F c -b -v -f "$BACKUP_DIR/admin_service_$DATE.backup" # 压缩 gzip "$BACKUP_DIR/admin_service_$DATE.backup" # 删除旧备份 find $BACKUP_DIR -name "*.backup.gz" -mtime +$RETENTION_DAYS -delete echo "Backup completed: admin_service_$DATE.backup.gz" ``` #### 设置定时任务 ```bash chmod +x /opt/scripts/backup-admin-db.sh # 添加到 crontab crontab -e # 每天凌晨 2 点备份 0 2 * * * /opt/scripts/backup-admin-db.sh >> /var/log/admin-service-backup.log 2>&1 ``` #### 恢复数据库 ```bash # 解压备份 gunzip admin_service_20250103_020000.backup.gz # 恢复 pg_restore -U admin_service -d admin_service_prod -v admin_service_20250103_020000.backup ``` ### 6.5 监控告警 #### PM2 监控 ```bash # 安装 PM2 Plus (可选) pm2 install pm2-logrotate pm2 install pm2-server-monit # 查看监控 pm2 monit ``` #### 健康检查脚本 创建 `/opt/scripts/health-check.sh`: ```bash #!/bin/bash HEALTH_URL="http://localhost:3010/api/v1/health" ALERT_EMAIL="admin@rwadurian.com" response=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_URL) if [ "$response" != "200" ]; then echo "Admin Service health check failed! HTTP code: $response" | \ mail -s "Admin Service Alert" $ALERT_EMAIL # 自动重启 (可选) pm2 restart admin-service fi ``` #### 设置监控定时任务 ```bash crontab -e # 每 5 分钟检查一次 */5 * * * * /opt/scripts/health-check.sh ``` --- ## 7. 监控和维护 ### 7.1 性能监控 #### 应用指标 ```bash # CPU 和内存使用 pm2 monit # 详细指标 pm2 describe admin-service # 进程列表 pm2 list ``` #### 数据库监控 ```bash # 连接数 sudo -u postgres psql -c "SELECT count(*) FROM pg_stat_activity WHERE datname = 'admin_service_prod';" # 慢查询 sudo -u postgres psql -d admin_service_prod -c "SELECT query, calls, total_time, mean_time FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;" # 数据库大小 sudo -u postgres psql -c "SELECT pg_size_pretty(pg_database_size('admin_service_prod'));" ``` ### 7.2 日常维护 #### 更新应用 ```bash cd /opt/rwa-durian/backend/services/admin-service # 1. 备份当前版本 cp -r dist dist.backup.$(date +%Y%m%d) # 2. 拉取最新代码 git pull origin main # 3. 安装依赖 npm ci --omit=dev # 4. 运行迁移 npm run prisma:migrate:deploy # 5. 构建 npm run build # 6. 重启服务 pm2 restart admin-service # 7. 验证 curl http://localhost:3010/api/v1/health # 8. 查看日志 pm2 logs admin-service --lines 50 ``` #### 数据库维护 ```bash # 1. 分析表 sudo -u postgres psql -d admin_service_prod -c "ANALYZE;" # 2. 清理死元组 sudo -u postgres psql -d admin_service_prod -c "VACUUM ANALYZE;" # 3. 重建索引 sudo -u postgres psql -d admin_service_prod -c "REINDEX DATABASE admin_service_prod;" ``` ### 7.3 扩容方案 #### 垂直扩容 (增加资源) ```bash # 1. 调整 PM2 实例数 pm2 scale admin-service 4 # 增加到 4 个实例 # 2. 调整内存限制 # 编辑 ecosystem.config.js max_memory_restart: '1G' # 增加到 1GB pm2 restart admin-service ``` #### 水平扩容 (增加服务器) 1. 在新服务器上重复本地部署步骤 2. 配置 Nginx 负载均衡: ```nginx upstream admin_service { least_conn; server 192.168.1.111:3010 weight=1; server 192.168.1.112:3010 weight=1; server 192.168.1.113:3010 weight=1; } ``` 3. 重新加载 Nginx: ```bash sudo nginx -t sudo systemctl reload nginx ``` --- ## 8. 故障排查 ### 8.1 常见问题 #### 问题 1: 服务无法启动 **症状**: ```bash pm2 logs admin-service # Error: Cannot find module '@prisma/client' ``` **解决方案**: ```bash npm run prisma:generate pm2 restart admin-service ``` #### 问题 2: 数据库连接失败 **症状**: ``` Error: P1001: Can't reach database server ``` **排查步骤**: ```bash # 1. 检查 PostgreSQL 状态 sudo systemctl status postgresql # 2. 测试数据库连接 psql -U admin_service -h localhost -d admin_service_prod # 3. 检查 DATABASE_URL 配置 cat .env.production | grep DATABASE_URL # 4. 检查防火墙 sudo ufw status ``` #### 问题 3: 内存泄漏 **症状**: ```bash pm2 list # admin-service 内存持续增长 ``` **排查步骤**: ```bash # 1. 查看内存使用 pm2 describe admin-service # 2. 分析堆内存 node --inspect dist/main.js # 访问 chrome://inspect # 3. 临时解决 - 重启 pm2 restart admin-service # 4. 调整内存限制 # ecosystem.config.js max_memory_restart: '500M' ``` #### 问题 4: 高并发性能下降 **症状**: 响应时间变长,超时增加 **优化方案**: 1. **增加实例数**: ```bash pm2 scale admin-service +2 ``` 2. **数据库连接池**: ```javascript // prisma/schema.prisma datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" previewFeatures = ["metrics"] } // src/infrastructure/prisma/prisma.service.ts @Injectable() export class PrismaService extends PrismaClient { constructor() { super({ datasources: { db: { url: process.env.DATABASE_URL, }, }, connectionLimit: 10, // 增加连接池 }); } } ``` 3. **添加缓存** (Redis): ```bash # 安装 Redis sudo apt install -y redis-server # 配置缓存 npm install @nestjs/cache-manager cache-manager cache-manager-redis-store ``` ### 8.2 日志分析 #### 错误日志 ```bash # 查看最近的错误 pm2 logs admin-service --err --lines 100 # 搜索特定错误 pm2 logs admin-service --err | grep "Error" # Nginx 错误日志 sudo tail -100 /var/log/nginx/admin-service-error.log ``` #### 性能分析 ```bash # PM2 性能监控 pm2 monit # Node.js profiler node --prof dist/main.js # 生成 isolate-*.log # 分析 profile node --prof-process isolate-*.log > profile.txt ``` ### 8.3 回滚策略 #### 应用回滚 ```bash # 1. 停止服务 pm2 stop admin-service # 2. 恢复备份代码 rm -rf dist mv dist.backup.20250103 dist # 3. 回滚数据库迁移 (谨慎!) DATABASE_URL="..." npx prisma migrate resolve --rolled-back 20250103100000_add_new_field # 4. 重启服务 pm2 start admin-service # 5. 验证 curl http://localhost:3010/api/v1/health ``` #### 数据库回滚 ```bash # 恢复数据库备份 pg_restore -U admin_service -d admin_service_prod -c admin_service_20250103_020000.backup ``` --- ## 9. 安全加固 ### 9.1 应用安全 ```bash # 1. 限制 Node.js 进程权限 # 创建专用用户 sudo useradd -r -s /bin/false admin_service # 2. 设置文件权限 sudo chown -R admin_service:admin_service /opt/rwa-durian/backend/services/admin-service sudo chmod -R 750 /opt/rwa-durian/backend/services/admin-service # 3. 使用环境变量管理敏感信息 # .env.production 权限 chmod 600 .env.production ``` ### 9.2 数据库安全 ```bash # 1. 修改默认密码 sudo -u postgres psql ALTER USER admin_service WITH PASSWORD 'new_strong_password'; # 2. 限制网络访问 # /etc/postgresql/16/main/pg_hba.conf host admin_service_prod admin_service 127.0.0.1/32 md5 # 3. 启用 SSL # postgresql.conf ssl = on ``` ### 9.3 Nginx 安全 ```nginx # 隐藏版本号 server_tokens off; # 限流 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s; server { # ... location /api/v1/ { limit_req zone=api_limit burst=20; proxy_pass http://admin_service; } } ``` --- ## 10. 快速参考 ### 10.1 常用命令 ```bash # PM2 管理 pm2 start admin-service pm2 stop admin-service pm2 restart admin-service pm2 reload admin-service # 零停机重启 pm2 delete admin-service pm2 logs admin-service pm2 monit # 数据库 npm run prisma:migrate:deploy npm run prisma:generate npm run prisma:studio # 构建 npm run build npm run start:prod # 健康检查 curl http://localhost:3010/api/v1/health # Nginx sudo systemctl status nginx sudo systemctl reload nginx sudo nginx -t ``` ### 10.2 deploy.sh 命令速查 ```bash # 构建 ./deploy.sh build # 构建镜像 ./deploy.sh build-no-cache # 无缓存构建 # 生命周期 ./deploy.sh start # 启动服务 ./deploy.sh stop # 停止服务 ./deploy.sh restart # 重启服务 ./deploy.sh up # 前台启动 ./deploy.sh down # 停止并清理 # 监控 ./deploy.sh logs # 实时日志 ./deploy.sh logs-tail # 最近日志 ./deploy.sh status # 服务状态 ./deploy.sh health # 健康检查 # 数据库 ./deploy.sh migrate # 生产迁移 ./deploy.sh migrate-dev # 开发迁移 ./deploy.sh prisma-studio # Prisma GUI # 开发 ./deploy.sh dev # 开发模式 ./deploy.sh test # 运行测试 ./deploy.sh shell # 进入容器 # 清理 ./deploy.sh clean # 清理容器 ./deploy.sh clean-all # 完全清理 # 信息 ./deploy.sh info # 服务信息 ``` ### 10.3 检查清单 #### 部署前 - [ ] 代码已通过所有测试 - [ ] 环境变量已正确配置 - [ ] 数据库迁移已准备 - [ ] SSL 证书已配置 - [ ] 备份策略已设置 - [ ] 监控告警已配置 #### 部署后 - [ ] 服务健康检查通过 - [ ] 数据库连接正常 - [ ] API 端点可访问 - [ ] 日志正常输出 - [ ] 性能指标正常 - [ ] 备份自动执行 --- **最后更新**: 2025-12-03 **版本**: 1.0.0 **维护者**: RWA Durian Team