anxin-ruoyi/docker/database/docker-compose.database.yml
2026-01-05 01:46:20 +08:00

123 lines
3.0 KiB
YAML

# 数据库服务独立配置文件
# 可用于单独启动和管理数据库服务
version: '3.8'
services:
# MySQL数据库服务
anxin-mysql:
image: mysql:8.0
container_name: ${COMPOSE_PROJECT_NAME:-anxin}-mysql
restart: unless-stopped
# 环境变量配置
environment:
# 必需的环境变量
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
MYSQL_DATABASE: ${DB_NAME:-anxin}
MYSQL_USER: ${DB_USER:-anxin}
MYSQL_PASSWORD: ${DB_PASSWORD:-anxin123}
# 可选的环境变量
MYSQL_ALLOW_EMPTY_PASSWORD: ${MYSQL_ALLOW_EMPTY_PASSWORD:-no}
MYSQL_RANDOM_ROOT_PASSWORD: ${MYSQL_RANDOM_ROOT_PASSWORD:-no}
# 系统配置
TZ: ${TIMEZONE:-Asia/Shanghai}
# 端口映射
ports:
- "${DB_PORT:-3306}:3306"
# 卷挂载配置
volumes:
# 数据持久化 - 挂载数据目录
- mysql-data:/var/lib/mysql
# 初始化脚本 - 按字母顺序执行
- ./init:/docker-entrypoint-initdb.d:ro
# MySQL配置文件
- ../configs/my.cnf.template:/etc/mysql/conf.d/custom.cnf:ro
# 日志目录
- mysql-logs:/var/log/mysql
# 临时文件目录
- mysql-tmp:/tmp
# 网络配置
networks:
- anxin-network
# 资源限制
deploy:
resources:
limits:
memory: ${DATABASE_MEMORY_LIMIT:-512M}
cpus: '${DATABASE_CPU_LIMIT:-0.5}'
reservations:
memory: ${DATABASE_MEMORY_RESERVATION:-256M}
cpus: '${DATABASE_CPU_RESERVATION:-0.25}'
# 健康检查
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-root123}"]
interval: 30s
timeout: 20s
retries: 10
start_period: 60s
# 安全配置
security_opt:
- no-new-privileges:true
# 用户配置(可选,用于安全加固)
# user: "999:999"
# 命令覆盖(可选,用于自定义启动参数)
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--default-time-zone='+08:00'
--max-connections=200
--innodb-buffer-pool-size=128M
--innodb-log-file-size=32M
--innodb-flush-log-at-trx-commit=1
--slow-query-log=1
--slow-query-log-file=/var/log/mysql/slow.log
--long-query-time=3
--log-error=/var/log/mysql/error.log
# 网络配置
networks:
anxin-network:
name: ${NETWORK_NAME:-anxin-network}
driver: bridge
ipam:
driver: default
config:
- subnet: ${SUBNET:-172.20.0.0/16}
gateway: ${GATEWAY:-172.20.0.1}
# 卷配置
volumes:
# 数据库数据卷 - 持久化存储
mysql-data:
driver: local
driver_opts:
type: none
o: bind
device: ${MYSQL_DATA_PATH:-./data/mysql}
# 数据库日志卷
mysql-logs:
driver: local
driver_opts:
type: none
o: bind
device: ${MYSQL_LOGS_PATH:-./data/logs/mysql}
# 临时文件卷
mysql-tmp:
driver: local