# 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 #