2026-05-19 14:29:57 +08:00
|
|
|
|
# =============================================================================
|
|
|
|
|
|
# XuqmGroup 私有化部署 — 基础设施服务(MySQL / Redis)
|
|
|
|
|
|
#
|
|
|
|
|
|
# 使用场景:MYSQL_MODE=managed 或 REDIS_MODE=managed 时,
|
|
|
|
|
|
# 由 Docker Compose 启动容器化数据库,无需客户自备。
|
|
|
|
|
|
#
|
|
|
|
|
|
# 生产环境建议使用客户自备的 external 模式,由 DBA 管理数据库。
|
|
|
|
|
|
# 开发/体验环境可使用 managed 模式快速启动。
|
|
|
|
|
|
#
|
|
|
|
|
|
# 数据目录:
|
|
|
|
|
|
# MySQL 数据 → ./data/mysql (重启后保留)
|
|
|
|
|
|
# Redis 数据 → ./data/redis (AOF 持久化,重启后保留)
|
|
|
|
|
|
# =============================================================================
|
|
|
|
|
|
|
2026-05-18 19:49:31 +08:00
|
|
|
|
services:
|
2026-05-19 14:29:57 +08:00
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
# MySQL 8.4(托管模式,profile: infra-mysql)
|
|
|
|
|
|
# 仅在 MYSQL_MODE=managed 时启用
|
|
|
|
|
|
# 首次启动自动创建数据库和业务账号
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
2026-05-18 19:49:31 +08:00
|
|
|
|
mysql:
|
|
|
|
|
|
image: mysql:8.4
|
|
|
|
|
|
profiles: ["infra-mysql"]
|
|
|
|
|
|
environment:
|
2026-05-19 14:29:57 +08:00
|
|
|
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} # root 密码(见 config/secrets.env)
|
|
|
|
|
|
MYSQL_DATABASE: ${MYSQL_DATABASE} # 自动创建的数据库名
|
|
|
|
|
|
MYSQL_USER: ${MYSQL_USERNAME} # 业务账号(自动创建)
|
|
|
|
|
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD} # 业务账号密码
|
|
|
|
|
|
TZ: Asia/Shanghai # 时区,与 Spring Boot 保持一致
|
2026-05-18 19:49:31 +08:00
|
|
|
|
command:
|
2026-05-19 14:29:57 +08:00
|
|
|
|
- --character-set-server=utf8mb4 # 服务器默认字符集,支持中文和 emoji
|
|
|
|
|
|
- --collation-server=utf8mb4_unicode_ci # 排序规则
|
|
|
|
|
|
- --default-time-zone=+08:00 # 数据库时区
|
2026-05-18 19:49:31 +08:00
|
|
|
|
ports:
|
2026-05-19 14:29:57 +08:00
|
|
|
|
# 暴露到宿主机,方便外部工具(如 Navicat)连接
|
|
|
|
|
|
# 生产环境可注释此行,仅允许容器内部访问
|
2026-05-18 19:49:31 +08:00
|
|
|
|
- "${MYSQL_PORT:-3306}:3306"
|
|
|
|
|
|
volumes:
|
2026-05-19 14:29:57 +08:00
|
|
|
|
- ./data/mysql:/var/lib/mysql # 数据持久化,重启后保留
|
2026-05-18 19:49:31 +08:00
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
2026-05-19 14:29:57 +08:00
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
# Redis 7.4(托管模式,profile: infra-redis)
|
|
|
|
|
|
# 仅在 REDIS_MODE=managed 时启用
|
|
|
|
|
|
# 启用 AOF 持久化,重启后数据不丢失
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
2026-05-18 19:49:31 +08:00
|
|
|
|
redis:
|
|
|
|
|
|
image: redis:7.4-alpine
|
|
|
|
|
|
profiles: ["infra-redis"]
|
2026-05-19 14:29:57 +08:00
|
|
|
|
command:
|
|
|
|
|
|
- redis-server
|
|
|
|
|
|
- --appendonly yes # 开启 AOF 持久化
|
|
|
|
|
|
- --requirepass ${REDIS_PASSWORD} # 密码(见 config/secrets.env)
|
2026-05-18 19:49:31 +08:00
|
|
|
|
ports:
|
2026-05-19 14:29:57 +08:00
|
|
|
|
# 暴露到宿主机,方便调试
|
|
|
|
|
|
# 生产环境可注释此行
|
2026-05-18 19:49:31 +08:00
|
|
|
|
- "${REDIS_PORT:-6379}:6379"
|
|
|
|
|
|
volumes:
|
2026-05-19 14:29:57 +08:00
|
|
|
|
- ./data/redis:/data # AOF 文件持久化目录
|
2026-05-18 19:49:31 +08:00
|
|
|
|
restart: unless-stopped
|