# 支付平台运维手册 ## 服务器信息 - IP: `172.20.205.37` - 域名: `qcsj88888.com`、`api.qcsj88888.com` - 系统: Ubuntu (Alibaba Cloud ECS) ## 容器拓扑 | 容器 | 镜像 | 端口 | 网络 | |---|---|---|---| | java-backend | xjz/java-backend:1.0.0 | 8001 | app-tier, deploy_app-tier | | frontend | xjz/frontend:2.5.4 | 5173→80 | app-tier | | postgres | postgres:18.3 | 127.0.0.1:5432 | 宿主机, deploy_app-tier | | redis | redis:8.6.2-alpine | 6379 | deploy_app-tier | | nginx-proxy-manager | jc21/nginx-proxy-manager | 80/443/81 | deploy_app-tier | | gogs | gogs/gogs | 3000/2222 | deploy_app-tier | ``` qcsj88888.com (HTTPS) ↓ NPM ├── /api/v1/* → java-backend:8001 └── 其余 → frontend:5173 ``` ## 项目路径 - 代码: `/root/payments/code/payment-platform` - Compose: `/root/payments/code/payment-platform/docker-compose.yml` - NPM 数据: `/root/payments/deploy/nginx-proxy-manager/data` ## 常用操作 ### 查看容器状态 ```bash cd /root/payments/code/payment-platform docker compose ps docker stats --no-stream ``` ### 查看日志 ```bash docker compose logs java-backend --tail 50 # 最近50行 docker compose logs java-backend -f # 实时跟踪 docker compose logs java-backend --since 5m # 最近5分钟 ``` ### 重启后端 ```bash docker compose restart java-backend ``` ### 停止/启动 ```bash docker compose stop java-backend docker compose start java-backend ``` ### 健康检查 ```bash curl http://localhost:8001/api/v1/payment/notify/health # 预期返回: {"code":0,"data":{"status":"ok"}} ``` ## 升级部署 ```bash # === 本地 === cd D:\project2\payment-platform\java mvn clean package -DskipTests scp target/payment-platform-1.0.0.jar root@172.20.205.37:/root/payments/code/payment-platform/java/target/ # === 服务器 === cd /root/payments/code/payment-platform/java docker build -t xjz/java-backend:1.0.0 . cd .. docker compose up -d java-backend docker compose logs java-backend --tail 20 -f ``` ## 数据库迁移 新增 SQL 脚本放在 `java/sql/`,服务器执行: ```bash docker exec -i postgres psql -U admin -d payment_platform_prod < /root/payments/code/payment-platform/java/sql/xxx.sql ``` ## 回滚到 Python ```bash docker stop java-backend docker rm java-backend cd /root/payments/code/payment-platform git checkout master docker compose up -d backend ``` ## 配置说明 ### JVM 参数 ```yaml JAVA_OPTS: "-Xms128m -Xmx256m -XX:+UseSerialGC -XX:MaxRAMPercentage=50 -XX:TieredStopAtLevel=1" ``` - `-Xms128m`: 初始堆 128MB - `-Xmx256m`: 最大堆 256MB - `-XX:+UseSerialGC`: 单线程 GC(2C 服务器避免并发 GC 开销) - `-XX:MaxRAMPercentage=50`: JVM 最多用 50% 物理内存 - `-XX:TieredStopAtLevel=1`: 减少 JIT 编译层级,启动更快 ### 环境变量(数据库/Redis) ```yaml SPRING_DATASOURCE_DRUID_URL: jdbc:postgresql://postgres:5432/payment_platform_prod?currentSchema=public SPRING_DATASOURCE_DRUID_USERNAME: admin SPRING_DATASOURCE_DRUID_PASSWORD: 'xjz#123321' SPRING_DATA_REDIS_HOST: redis SPRING_DATA_REDIS_PORT: 6379 SPRING_DATA_REDIS_DATABASE: 0 SPRING_DATA_REDIS_PASSWORD: '123456#xjz' ``` ## 故障排查 ### 后端起不来 ```bash docker compose logs java-backend --tail 100 ``` 常见原因: - `Connection refused: postgres:5432` → postgres 没加入 deploy_app-tier,执行 `docker network connect deploy_app-tier postgres` - `OutOfMemoryError` → 调大 `-Xmx` 到 384m - 端口占用 → `lsof -i:8001`,停掉占用进程 ### 页面访问 502 检查后端是否正常: ```bash curl http://localhost:8001/api/v1/payment/notify/health ``` 后端正常则查 NPM 是否在线:`docker ps | grep nginx-proxy-manager` ### 磁盘空间 ```bash docker system prune -a --filter "until=72h" # 清理72小时前的旧镜像 ``` ## 备份 ```bash # 数据库 docker exec postgres pg_dump -U admin payment_platform_prod > /root/backup/payment_$(date +%Y%m%d).sql ```