Files
BMS/deploy/docker-compose.yml
T
2026-09-24 11:23:14 +08:00

121 lines
3.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BMS 全栈 Docker Compose 编排(阿里云 ECS 4C8G)
# 用法:docker compose up -d
# 组件:mysql / redis / elasticsearch / backend / frontend
services:
# ---- MySQL(本机)----
mysql:
image: mysql:8.0
container_name: bms-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${BMS_DB_PASSWORD:-ChangeMe123!} # 生产务必改
MYSQL_DATABASE: bms
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --max_connections=200
# 低内存优化
- --innodb-buffer-pool-size=256M
- --performance-schema=OFF
ports:
- "127.0.0.1:3306:3306" # 仅本机,不开公网
volumes:
- bms-mysql-data:/var/lib/mysql
# 首次初始化自动导入建库脚本(可选,脚本按顺序放 init 目录)
- ./init-sql:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p${BMS_DB_PASSWORD:-ChangeMe123!}"]
interval: 10s
timeout: 5s
retries: 10
# ---- Redis ----
redis:
image: redis:7-alpine
container_name: bms-redis
restart: always
command: ["redis-server", "--appendonly", "yes"]
ports:
- "127.0.0.1:6379:6379" # 仅本机
volumes:
- bms-redis-data:/data
# ---- Elasticsearch(保留,限堆 1G)----
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: bms-es
restart: always
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g # 关键:限堆,否则吃一半内存
- xpack.security.enabled=false # 后端 HTTP 直连无鉴权
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
ports:
- "127.0.0.1:9200:9200" # 仅本机
volumes:
- bms-es-data:/usr/share/elasticsearch/data
healthcheck:
test: ["CMD-SHELL", "curl -s http://localhost:9200 >/dev/null || exit 1"]
interval: 20s
timeout: 5s
retries: 10
# ---- 后端 Spring Boot ----
backend:
build:
context: .. # 指到仓库根目录
dockerfile: deploy/Dockerfile.backend
container_name: bms-backend
restart: always
environment:
TZ: Asia/Shanghai
JAVA_OPTS: "-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"
# 数据源环境变量(后端用 ${} 占位,由这里注入)
BMS_DB_URL: "jdbc:mysql://mysql:3306/bms?useUnicode=true&characterEncoding=utf8&connectionCollation=utf8mb4_unicode_ci&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8"
BMS_DB_USER: root
BMS_DB_PASSWORD: ${BMS_DB_PASSWORD:-ChangeMe123!}
# Oracle 从库(远端只读,保留原值)
BMS_ORACLE_URL: "jdbc:oracle:thin:@//120.79.189.203:15281/WSDB"
BMS_ORACLE_USER: readonly_report
BMS_ORACLE_PASSWORD: ${BMS_ORACLE_PASSWORD:-k5x15WP1hE}
# token 密钥 / Druid 密码
TOKEN_SECRET: ${TOKEN_SECRET:-please-change-me}
DRUID_LOGIN_PASSWORD: ${DRUID_LOGIN_PASSWORD:-ChangeMe456!}
ports:
- "127.0.0.1:8080:8080" # 仅本机,由 frontend 反代
volumes:
- bms-upload:/app/uploadPath
- bms-logs:/app/logs
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_started
elasticsearch:
condition: service_healthy
# ---- 前端 Nginx ----
frontend:
build:
context: .. # 指到仓库根目录
dockerfile: deploy/Dockerfile.frontend
container_name: bms-frontend
restart: always
ports:
- "80:80" # 对外(或改成 443 上 HTTPS)
depends_on:
- backend
volumes:
bms-mysql-data:
bms-redis-data:
bms-es-data:
bms-upload:
bms-logs: