Files
java-template/docker-compose.yml
2025-11-28 15:58:43 +08:00

231 lines
6.6 KiB
YAML

# LJWX 生产环境 Docker Compose 配置 v2.0
# 使用统一.env配置文件管理所有变量
version: '3.8'
networks:
ljwx-network:
driver: bridge
name: ${NETWORK_NAME:-ljwx-network}
volumes:
mysql_data:
driver: local
name: ${MYSQL_VOLUME:-mysql_data}
redis_data:
driver: local
name: ${REDIS_VOLUME:-redis_data}
services:
# ============================================
# 基础设施服务
# ============================================
# MySQL数据库
ljwx-mysql:
image: ${REGISTRY}/ljwx-mysql:${LJWX_MYSQL_VERSION}
container_name: ljwx-mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- TZ=${TZ:-Asia/Shanghai}
# 数据库迁移配置
- DB_MIGRATION_ENABLED=${DB_MIGRATION_ENABLED:-true}
- DB_MIGRATION_AUTO_APPLY=${DB_MIGRATION_AUTO_APPLY:-true}
volumes:
- mysql_data:/var/lib/mysql
# 挂载迁移脚本目录(用于动态迁移)
- ${DB_MIGRATION_DIR:-./docker/mysql/migrations}:/docker-migrations:ro
ports:
- "${MYSQL_PORT:-3307}:3306"
networks:
- ljwx-network
restart: unless-stopped
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
# Redis缓存
ljwx-redis:
image: ${REGISTRY}/ljwx-redis:${LJWX_REDIS_VERSION}
container_name: ljwx-redis
command: redis-server --requirepass ${REDIS_PASSWORD}
environment:
- TZ=${TZ:-Asia/Shanghai}
volumes:
- redis_data:/data
ports:
- "${REDIS_PORT}:6379"
networks:
- ljwx-network
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 3s
retries: 5
start_period: 10s
# ============================================
# 业务应用服务
# ============================================
# 后端服务 - ljwx-boot
ljwx-boot:
image: ${REGISTRY}/ljwx-boot:${LJWX_BOOT_VERSION}
container_name: ljwx-boot
environment:
# JVM 配置
- JAVA_OPTS=${BOOT_JVM_OPTS:--Xms512m -Xmx1g -XX:+UseG1GC}
# Spring Boot 配置
- SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-prod}
# 数据库配置
- SPRING_DATASOURCE_URL=jdbc:mysql://ljwx-mysql:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&serverTimezone=${TZ:-Asia/Shanghai}&useSSL=false&allowPublicKeyRetrieval=true&autoReconnect=true&failOverReadOnly=false&maxReconnects=3&initialTimeout=2&connectTimeout=60000&socketTimeout=60000
- SPRING_DATASOURCE_USERNAME=${MYSQL_USER}
- SPRING_DATASOURCE_PASSWORD=${MYSQL_PASSWORD}
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
# Redis 配置
- REDIS_HOST=${REDIS_HOST:-ljwx-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSWORD=${REDIS_PASSWORD}
- REDIS_DB=${REDIS_DB:-0}
- SPRING_REDIS_HOST=${REDIS_HOST:-ljwx-redis}
- SPRING_REDIS_PORT=${REDIS_PORT:-6379}
- SPRING_REDIS_PASSWORD=${REDIS_PASSWORD}
# 时区配置
- TZ=${TZ:-Asia/Shanghai}
ports:
- "${BOOT_PORT:-9998}:9998"
depends_on:
ljwx-mysql:
condition: service_healthy
ljwx-redis:
condition: service_healthy
networks:
- ljwx-network
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "netstat -an | grep 9998 || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
# 大屏服务 - ljwx-bigscreen
ljwx-bigscreen:
image: ${REGISTRY}/ljwx-bigscreen:${LJWX_BIGSCREEN_VERSION}
container_name: ljwx-bigscreen
environment:
# 数据库配置
- MYSQL_HOST=ljwx-mysql
- MYSQL_PORT=3306
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
# Redis 配置
- REDIS_HOST=${REDIS_HOST:-ljwx-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSWORD=${REDIS_PASSWORD}
# 后端API配置
- API_BASE_URL=http://ljwx-boot:9998
- BACKEND_URL=http://ljwx-boot:9998
# 时区配置
- TZ=${TZ:-Asia/Shanghai}
ports:
- "${BIGSCREEN_EXTERNAL_PORT:-8000}:${BIGSCREEN_PORT:-5225}"
depends_on:
ljwx-mysql:
condition: service_healthy
ljwx-boot:
condition: service_healthy
ljwx-redis:
condition: service_healthy
networks:
- ljwx-network
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "netstat -an | grep ${BIGSCREEN_PORT:-5225} || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# 前端管理界面 - ljwx-admin
ljwx-admin:
image: ${REGISTRY}/ljwx-admin:${LJWX_ADMIN_VERSION}
container_name: ljwx-admin
environment:
- API_BASE_URL=http://ljwx-boot:9998
- TZ=${TZ:-Asia/Shanghai}
ports:
- "${ADMIN_EXTERNAL_PORT:-8080}:${ADMIN_PORT:-80}"
depends_on:
ljwx-boot:
condition: service_healthy
networks:
- ljwx-network
restart: unless-stopped
# ============================================
# 使用说明
# ============================================
#
# 配置文件:
# - 统一配置文件: .env
# - 从模板创建: cp .env.unified .env
# - 修改版本号、密码等配置
#
# 构建镜像:
# ./build-and-push.sh -b
#
# 推送镜像:
# ./build-and-push.sh -p
#
# 部署服务:
# ./build-and-push.sh -d
# 或
# docker-compose -f docker-compose.prod.v2.yml up -d
#
# 一键完成:
# ./build-and-push.sh -a
#
# 查看服务:
# docker-compose -f docker-compose.prod.v2.yml ps
# docker-compose -f docker-compose.prod.v2.yml logs -f [service-name]
#
# 停止服务:
# docker-compose -f docker-compose.prod.v2.yml down
#
# 数据库迁移:
# ./db-migrate.sh export # 导出基线
# ./db-migrate.sh status # 查看状态
# ./db-migrate.sh apply-all # 应用迁移
#
# ============================================
# 服务访问地址
# ============================================
#
# 业务应用:
# - 后端API: http://localhost:${BOOT_PORT:-9998}
# - 管理界面: http://localhost:${ADMIN_EXTERNAL_PORT:-8080}
# - 大屏服务: http://localhost:${BIGSCREEN_EXTERNAL_PORT:-8000}
#
# 基础设施:
# - MySQL: localhost:${MYSQL_PORT:-3307} (${MYSQL_USER}/${MYSQL_PASSWORD})
# - Redis: localhost:${REDIS_PORT:-6379} (password: ${REDIS_PASSWORD})
#
# 健康检查:
# - Boot: http://localhost:${BOOT_PORT:-9998}/actuator/health
#