121 lines
3.8 KiB
YAML
121 lines
3.8 KiB
YAML
# 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:
|