Files
jeepay/docker-compose.yml
T
大森林 92781ab894 feat(docker): 加固 Compose 部署并默认使用 SWR 镜像,补发布脚本
- docker-compose.yml:三个 jeepay 应用补齐 HTTP healthcheck,UI 依赖
  改为等待 service_healthy;MySQL/Redis/RocketMQ 默认镜像切换为
  swr.cn-south-1.myhuaweicloud.com/jeepay/*,可通过环境变量覆盖;
  按需声明 platform: linux/amd64。
- 三个 Dockerfile 引入 ARG BASE_IMAGE,默认使用 SWR 下的 temurin:17-jre,
  便于在国内网络下稳定构建。
- 新增 docker/publish-dockerhub.sh、publish-swr.sh、sync-swr-thirdparty.sh
  及 run-dockerhub-mcp.sh,覆盖"打包 → 构建 → 推送"的完整链路,SWR
  版本同时推送 amd64 / arm64 临时 tag 再合成多架构 tag。
- 新增 docker-compose.swr-smoke.yml / docker-compose.swr-test.yml 两份
  最小化 smoke/test compose,便于验证 SWR 镜像可用性。
- README 补充 2.1/2.2/2.3 章节的发布操作说明,同时提示 UI 已等待后端
  healthcheck、卸载脚本具备幂等性。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 11:26:00 +08:00

347 lines
9.8 KiB
YAML

# Maven 依赖提前编译,修改 MQ 队列 (修改 jeepay-components-mq 依赖) 也需要重新运行此命令
# 启动命令 docker compose up
# 启动并运行在后台 docker compose up -d
# 重新编译 docker compose up --build
# 重新创建 docker compose up --force-recreate
# 重新编译并覆盖之前的 docker compose up --build --force-recreate
#
# 前端目录默认使用本仓库同级的 ../jeepay-ui,可在 .env 中覆盖 UI_BASE_DIR。
services:
mysql:
hostname: mysql
container_name: jeepay-mysql
restart: always
image: ${MYSQL_IMAGE:-swr.cn-south-1.myhuaweicloud.com/jeepay/mysql:8}
environment:
LANG: C.UTF-8
MYSQL_ROOT_PASSWORD: "rootroot"
MYSQL_DATABASE: "jeepaydb"
MYSQL_USER: "jeepay"
MYSQL_PASSWORD: "jeepay"
ports:
- "13306:3306"
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
volumes:
- mysql:/var/lib/mysql
- ./docs/sql/init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
- ./docs/sql/patch.sql:/docker-entrypoint-initdb.d/02-patch.sql:ro
networks:
jeepay:
ipv4_address: 172.20.0.10
# 使用 RocketMQ 作为默认 MQ 方案
rocketmq-namesrv:
platform: linux/amd64
image: ${ROCKETMQ_IMAGE:-swr.cn-south-1.myhuaweicloud.com/jeepay/rocketmq:5.3.1}
hostname: rocketmq-namesrv
container_name: jeepay-rocketmq-namesrv
restart: always
user: "0:0"
ports:
- "9876:9876"
environment:
# 开发环境降低 NameServer 内存占用
HEAP_OPTS: "-Xms256m -Xmx256m -Xmn128m"
command: sh mqnamesrv
healthcheck:
# arm64 模拟 amd64 时 bash 启动较慢,需增大超时
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/localhost/9876'"]
interval: 15s
timeout: 15s
retries: 10
start_period: 40s
volumes:
- rocketmq_namesrv_logs:/home/rocketmq/logs
networks:
jeepay:
ipv4_address: 172.20.0.11
rocketmq-broker:
platform: linux/amd64
image: ${ROCKETMQ_IMAGE:-swr.cn-south-1.myhuaweicloud.com/jeepay/rocketmq:5.3.1}
hostname: rocketmq-broker
container_name: jeepay-rocketmq-broker
restart: always
# Docker 创建的 named volume 默认 root 权限,而镜像以 rocketmq(uid=3000) 运行,需要提权
user: "0:0"
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
NAMESRV_ADDR: rocketmq-namesrv:9876
# 开发环境限制 Broker 堆内存,默认 2g+1g 在 Docker Desktop 上容易 OOM
JAVA_OPT_EXT: "-Xms512m -Xmx512m -Xmn256m"
command: sh mqbroker -n rocketmq-namesrv:9876 -c /home/rocketmq/rocketmq-5.3.1/conf/broker.conf
depends_on:
rocketmq-namesrv:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/localhost/10911'"]
interval: 15s
timeout: 15s
retries: 15
start_period: 120s
volumes:
- rocketmq_broker_logs:/home/rocketmq/logs
- rocketmq_broker_store:/home/rocketmq/store
- ./docker/rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-5.3.1/conf/broker.conf:ro
networks:
jeepay:
ipv4_address: 172.20.0.13
# 扩展额外延迟插件的 RabbitMQ
#rabbitmq:
# build:
# context: ./docker/rabbitmq
# dockerfile: Dockerfile
# hostname: rabbitmq
# container_name: jeepay-rabbitmq
# image: jeepay-rabbitmq:latest
# restart: always
# ports:
# - "15672:15672"
# - "4369:4369"
# - "5672:5672"
# - "25672:25672"
# environment:
# RABBITMQ_DEFAULT_USER: 'admin'
# RABBITMQ_DEFAULT_PASS: 'admin'
# RABBITMQ_DEFAULT_VHOST: 'jeepay'
# volumes:
# - rabbitmq:/var/lib/rabbitmq
# networks:
# jeepay:
# ipv4_address: 172.20.0.14
# 如需回退 ActiveMQ,可启用下面服务并同步修改 conf/*.yml 中的 MQ 配置。
#activemq:
# build:
# context: ./docker/activemq
# dockerfile: Dockerfile
# hostname: activemq
# container_name: jeepay-activemq
# image: jeepay-activemq:latest
# restart: always
# ports:
# - "8161:8161"
# - "61616:61616"
# volumes:
# - activemq:/opt/activemq
# - ./docker/activemq/activemq.xml:/opt/activemq/conf/activemq.xml
# networks:
# jeepay:
# ipv4_address: 172.20.0.15
redis:
platform: linux/amd64
hostname: redis
container_name: jeepay-redis
restart: always
image: ${REDIS_IMAGE:-swr.cn-south-1.myhuaweicloud.com/jeepay/redis:6.2.14}
ports:
- "6380:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 12
start_period: 10s
volumes:
- redis:/data
networks:
jeepay:
ipv4_address: 172.20.0.12
payment:
build:
context: ./jeepay-payment
dockerfile: Dockerfile
image: jeepay-payment:latest
hostname: payment
container_name: jeepay-payment
restart: always
ports:
- "9216:9216"
healthcheck:
test: ["CMD-SHELL", "curl -s -o /dev/null http://127.0.0.1:9216"]
interval: 15s
timeout: 5s
retries: 12
start_period: 45s
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
rocketmq-broker:
condition: service_healthy
volumes:
- ./logs/payment:/jeepayhomes/service/logs
- ./conf/payment/application.yml:/jeepayhomes/service/app/application.yml
networks:
jeepay:
ipv4_address: 172.20.0.21
manager:
build:
context: ./jeepay-manager
dockerfile: Dockerfile
image: jeepay-manager:latest
hostname: manager
container_name: jeepay-manager
restart: always
ports:
- "9217:9217"
healthcheck:
test: ["CMD-SHELL", "curl -s -o /dev/null http://127.0.0.1:9217"]
interval: 15s
timeout: 5s
retries: 12
start_period: 45s
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
rocketmq-broker:
condition: service_healthy
volumes:
- ./logs/manager:/jeepayhomes/service/logs
- ./conf/manager/application.yml:/jeepayhomes/service/app/application.yml
networks:
jeepay:
ipv4_address: 172.20.0.22
merchant:
build:
context: ./jeepay-merchant
dockerfile: Dockerfile
image: jeepay-merchant:latest
hostname: merchant
container_name: jeepay-merchant
restart: always
ports:
- "9218:9218"
healthcheck:
test: ["CMD-SHELL", "curl -s -o /dev/null http://127.0.0.1:9218"]
interval: 15s
timeout: 5s
retries: 12
start_period: 45s
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
rocketmq-broker:
condition: service_healthy
volumes:
- ./logs/merchant:/jeepayhomes/service/logs
- ./conf/merchant/application.yml:/jeepayhomes/service/app/application.yml
networks:
jeepay:
ipv4_address: 172.20.0.23
ui-payment:
build:
context: ${UI_BASE_DIR:-..}/jeepay-ui
dockerfile: Dockerfile
args:
PLATFORM: cashier
image: jeepay-ui-payment:latest
hostname: payment-ui
container_name: jeepay-ui-payment
restart: always
environment:
- BACKEND_HOST=172.20.0.21:9216
ports:
- "9226:80"
depends_on:
payment:
condition: service_healthy
networks:
jeepay:
ipv4_address: 172.20.0.31
ui-manager:
build:
context: ${UI_BASE_DIR:-..}/jeepay-ui
dockerfile: Dockerfile
args:
PLATFORM: manager
image: jeepay-ui-manager:latest
hostname: manager-ui
container_name: jeepay-ui-manager
restart: always
environment:
- BACKEND_HOST=172.20.0.22:9217
ports:
- "9227:80"
depends_on:
manager:
condition: service_healthy
networks:
jeepay:
ipv4_address: 172.20.0.32
ui-merchant:
build:
context: ${UI_BASE_DIR:-..}/jeepay-ui
dockerfile: Dockerfile
args:
PLATFORM: merchant
image: jeepay-ui-merchant:latest
hostname: merchant-ui
container_name: jeepay-ui-merchant
restart: always
environment:
- BACKEND_HOST=172.20.0.23:9218
ports:
- "9228:80"
depends_on:
merchant:
condition: service_healthy
networks:
jeepay:
ipv4_address: 172.20.0.33
# 如果你需要对外完整配置,可以使用下面的方式
# https://www.digitalocean.com/community/tools/nginx?domains.0.server.domain=pay.test.com&domains.0.server.documentRoot=&domains.0.server.redirectSubdomains=false&domains.0.https.hsts=false&domains.0.https.hstsPreload=true&domains.0.php.php=false&domains.0.reverseProxy.reverseProxy=true&domains.0.reverseProxy.proxyPass=http%3A%2F%2F172.20.0.26%3A9226&domains.0.routing.index=index.html&domains.0.routing.fallbackHtml=true&domains.0.routing.fallbackPhp=false&domains.0.logging.accessLog=true&domains.0.logging.errorLog=true&global.reverseProxy.proxyCoexistenceXForwarded=remove&global.app.lang=zhCN
# 访问并配置好所有域名和代理,下载文件放到项目根目录下取名叫做 nginx.tar.gz
#nginx:
# image: nginx:latest
# hostname: nginx
# container_name: jeepay-nginx
# ports:
# - "80:80"
# - "443:443"
# depends_on:
# - ui-manager
# - ui-payment
# - ui-merchant
# volumes:
# - ./nginx.tar.gz:/etc/nginx/nginx.tar.gz
# # 需要给权限比如 chmod a+r ./conf/nginx.sh
# - ./docker/nginx.sh:/docker-entrypoint.d/nginx.sh
networks:
jeepay:
ipam:
config:
- subnet: 172.20.0.0/16
volumes:
mysql:
redis:
rocketmq_namesrv_logs:
rocketmq_broker_logs:
rocketmq_broker_store:
# rabbitmq: