qcsj88888.com / api.qcsj88888.com (HTTPS, Let's Encrypt)
↓ NPM (nginx-proxy-manager, deploy_app-tier)
├── /api/v1/* → 172.20.205.37:8001 (Python, unhealthy) ← 改成 8081
└── 其余 → 172.20.205.37:5173 (frontend, xjz/frontend:2.5.4)
容器:
- backend: xjz/backend:2.4.0-fix, port 8001, unhealthy
- frontend: xjz/frontend:2.5.4, port 5173→80
- postgres: postgres:18.3, 127.0.0.1:5432
- redis: redis:8.6.2-alpine, deploy_app-tier 网络
- NPM: deploy_app-tier 网络
网络:payment-platform_app-tier (backend+frontend) + deploy_app-tier (NPM+redis+postgres)
宿主机IP:172.20.205.37
Compose文件:/root/payments/code/payment-platform/docker-compose.yml
新建 java/src/main/resources/application-prod.yml,覆盖 dev 的 DB/Redis:
spring:
datasource:
druid:
url: jdbc:postgresql://172.20.205.37:5432/payment_platform_prod?currentSchema=public
username: admin
password: 'xjz#123321'
data:
redis:
host: redis
port: 6379
database: 0
password: '123456#xjz'
logging:
level:
com.payment.platform: info
org.springframework.security: info
注意:Redis host 是 redis(容器名),不是宿主机 IP — Java 容器要加入 deploy_app-tier 网络才能解析 redis。
本地:
cd D:\project2\payment-platform
git add java/src/main/resources/application-prod.yml
git commit -m "chore: add application-prod.yml for production deployment"
git push origin java
服务器:
cd /root/payments/code/payment-platform
git fetch origin java
git checkout java
cd /root/payments/code/payment-platform/java/sql
# 逐个执行增量迁移
for f in 002 003 004 005 006; do
docker exec -i postgres psql -U admin -d payment_platform_prod < ${f}_*.sql
done
cd /root/payments/code/payment-platform/java
docker run --rm \
-v "$PWD":/app \
-v "$HOME/.m2":/root/.m2 \
-w /app \
maven:3.9-eclipse-temurin-21-alpine \
mvn package -DskipTests
docker build -t xjz/java-backend:1.0.0 .
在 /root/payments/code/payment-platform/docker-compose.yml 中添加 java-backend 服务(端口用 8001,平替 Python):
java-backend:
container_name: java-backend
image: xjz/java-backend:1.0.0
restart: always
environment:
TZ: "Asia/Shanghai"
SPRING_PROFILES_ACTIVE: prod
JAVA_OPTS: "-Xms256m -Xmx512m"
ports:
- "8001:8081" # 宿主机 8001 → 容器 8081
networks:
- app-tier
- deploy_app-tier
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081/api/v1/payment/notify/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
cd /root/payments/code/payment-platform
# 停掉 Python backend
docker stop backend
# 起 Java
docker compose up -d java-backend
# 检查健康状态
docker compose logs java-backend --tail 30
NPM 路由不用改 — 目标端口 8001 没变。
# 健康检查
curl https://qcsj88888.com/api/v1/payment/notify/health
# 确认 Java 日志正常
docker logs java-backend --tail 20
登录 https://qcsj88888.com,走一遍核心流程:首页统计、转账记录、消费记录。
Step 6 已经停了 Python,确认 Java 稳定后删掉 Python 容器:
docker rm backend
镜像 xjz/backend:2.4.0-fix 保留,不影响回滚。
docker stop java-backend
docker rm java-backend
cd /root/payments/code/payment-platform
docker compose up -d backend # 重新起 Python
NPM 路由没改过,端口也没变,直接起 Python 即可。
数据库迁移是纯加法,不影响 Python 版本。