Files
AzerothCore-RealmMaster/docker-compose-azerothcore-database.yml
2025-10-13 00:44:10 -04:00

171 lines
6.5 KiB
YAML

# ==============================================
# AZEROTHCORE DATABASE LAYER
# ==============================================
services:
# Step 1: MySQL database
ac-mysql:
image: ${MYSQL_IMAGE}
container_name: ${CONTAINER_MYSQL}
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_HOST: '${MYSQL_ROOT_HOST}'
MYSQL_ALLOW_EMPTY_PASSWORD: no
MYSQL_DATADIR: /var/lib/mysql-runtime
# MySQL configuration variables for startup script
MYSQL_CHARACTER_SET: ${MYSQL_CHARACTER_SET}
MYSQL_COLLATION: ${MYSQL_COLLATION}
MYSQL_MAX_CONNECTIONS: ${MYSQL_MAX_CONNECTIONS}
MYSQL_INNODB_BUFFER_POOL_SIZE: ${MYSQL_INNODB_BUFFER_POOL_SIZE}
MYSQL_INNODB_LOG_FILE_SIZE: ${MYSQL_INNODB_LOG_FILE_SIZE}
ports:
- "${MYSQL_EXTERNAL_PORT}:${MYSQL_PORT}"
volumes:
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH}:/backups
tmpfs:
- /var/lib/mysql-runtime:size=2G
command:
- mysqld
- --datadir=/var/lib/mysql-runtime
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --max_connections=1000
- --innodb-buffer-pool-size=256M
- --innodb-log-file-size=64M
restart: unless-stopped
healthcheck:
test: ["CMD", "sh", "-c", "mysqladmin ping -h localhost -u ${MYSQL_USER} -p${MYSQL_ROOT_PASSWORD} --silent || exit 1"]
interval: ${MYSQL_HEALTHCHECK_INTERVAL}
timeout: ${MYSQL_HEALTHCHECK_TIMEOUT}
retries: ${MYSQL_HEALTHCHECK_RETRIES}
start_period: ${MYSQL_HEALTHCHECK_START_PERIOD}
networks:
- azerothcore
# Step 2: Backup service
ac-backup:
image: ${MYSQL_IMAGE}
container_name: ${CONTAINER_BACKUP}
environment:
MYSQL_HOST: ${CONTAINER_MYSQL}
MYSQL_PORT: ${MYSQL_PORT}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD}
BACKUP_RETENTION_DAYS: ${BACKUP_RETENTION_DAYS}
BACKUP_RETENTION_HOURS: ${BACKUP_RETENTION_HOURS}
BACKUP_DAILY_TIME: ${BACKUP_DAILY_TIME}
DB_AUTH_NAME: ${DB_AUTH_NAME}
DB_WORLD_NAME: ${DB_WORLD_NAME}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME}
TZ: ${TZ}
volumes:
- ${HOST_BACKUP_PATH}:/backups
working_dir: /tmp
command:
- /bin/bash
- -c
- |
# Install curl for downloading backup scheduler script (handle different package managers)
microdnf install -y curl || yum install -y curl || (apt-get update && apt-get install -y curl)
# Download backup scheduler script from GitHub
echo "📥 Downloading backup scheduler script from GitHub..."
curl -fsSL https://raw.githubusercontent.com/uprightbass360/acore-compose/main/scripts/backup-scheduler.sh -o /tmp/backup-scheduler.sh
chmod +x /tmp/backup-scheduler.sh
/tmp/backup-scheduler.sh
restart: unless-stopped
networks:
- azerothcore
# Step 3: Database initialization (one-time setup)
ac-db-init:
image: ${MYSQL_IMAGE}
container_name: ${CONTAINER_DB_INIT}
volumes:
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH}:/backups
networks:
- azerothcore
environment:
MYSQL_PWD: ${MYSQL_ROOT_PASSWORD}
MYSQL_HOST: ${CONTAINER_MYSQL}
MYSQL_USER: ${MYSQL_USER}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
DB_WAIT_RETRIES: ${DB_WAIT_RETRIES}
DB_WAIT_SLEEP: ${DB_WAIT_SLEEP}
DB_AUTH_NAME: ${DB_AUTH_NAME}
DB_WORLD_NAME: ${DB_WORLD_NAME}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME}
MYSQL_CHARACTER_SET: ${MYSQL_CHARACTER_SET}
MYSQL_COLLATION: ${MYSQL_COLLATION}
command:
- sh
- -c
- |
# Install curl for downloading db init script (handle different package managers)
microdnf install -y curl || yum install -y curl || (apt-get update && apt-get install -y curl)
# Download enhanced db init script from GitHub
echo "📥 Downloading enhanced database initialization script from GitHub..."
curl -fsSL https://raw.githubusercontent.com/uprightbass360/acore-compose/main/scripts/db-init-enhanced.sh -o /tmp/db-init-enhanced.sh
chmod +x /tmp/db-init-enhanced.sh
/tmp/db-init-enhanced.sh
restart: "no"
# Step 4: Database import (one-time setup - run after db-init)
ac-db-import:
image: ${AC_DB_IMPORT_IMAGE}
container_name: ${CONTAINER_DB_IMPORT}
depends_on:
ac-mysql:
condition: service_healthy
networks:
- azerothcore
volumes:
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
environment:
AC_DATA_DIR: "/azerothcore/data"
AC_LOGS_DIR: "/azerothcore/logs"
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_AUTH_NAME}"
AC_WORLD_DATABASE_INFO: "${CONTAINER_MYSQL};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_WORLD_NAME}"
AC_CHARACTER_DATABASE_INFO: "${CONTAINER_MYSQL};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_CHARACTERS_NAME}"
AC_CLOSE_IDLE_CONNECTIONS: "false"
AC_UPDATES_ENABLE_DATABASES: "7"
AC_UPDATES_AUTO_SETUP: "1"
# Additional environment variables for conditional import
CONTAINER_MYSQL: ${CONTAINER_MYSQL}
MYSQL_PORT: ${MYSQL_PORT}
MYSQL_USER: ${MYSQL_USER}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
DB_AUTH_NAME: ${DB_AUTH_NAME}
DB_WORLD_NAME: ${DB_WORLD_NAME}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME}
CONTAINER_USER: ${CONTAINER_USER}
command:
- sh
- -c
- |
# Install curl for downloading conditional db import script (as root)
microdnf install -y curl || yum install -y curl || (apt-get update && apt-get install -y curl)
# Set ownership for config directories
chown ${CONTAINER_USER} /azerothcore/env/dist/etc 2>/dev/null || true
# Download conditional db import script from GitHub
echo "📥 Downloading conditional database import script from GitHub..."
curl -fsSL https://raw.githubusercontent.com/uprightbass360/acore-compose/main/scripts/db-import-conditional.sh -o /tmp/db-import-conditional.sh
chmod +x /tmp/db-import-conditional.sh
/tmp/db-import-conditional.sh
restart: "no"
networks:
azerothcore:
driver: bridge
name: ${NETWORK_NAME}
ipam:
config:
- subnet: ${NETWORK_SUBNET}
gateway: ${NETWORK_GATEWAY}