# ============================================== # AZEROTHCORE UNIFIED DOCKER COMPOSE # ============================================== # Compatible with both local development and Portainer deployment # Set DEPLOYMENT_MODE=local|portainer in .env file services: # Step 1: Standard MySQL database ac-mysql: image: mysql:8.0 container_name: ac-mysql user: "0:0" # Run as root to handle NFS permissions environment: MYSQL_ROOT_PASSWORD: ${DOCKER_DB_ROOT_PASSWORD:-password} MYSQL_ROOT_HOST: '%' ports: - "${DOCKER_DB_EXTERNAL_PORT:-64306}:3306" volumes: - ${STORAGE_PATH_CONTAINERS:-./volumes}/azerothcore/mysql:/var/lib/mysql command: - --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 - --user=mysql restart: unless-stopped healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${DOCKER_DB_ROOT_PASSWORD:-password}"] interval: 10s timeout: 5s retries: 10 start_period: 30s networks: - azerothcore # Step 2: Initialize databases ac-db-init: image: mysql:8.0 container_name: ac-db-init depends_on: ac-mysql: condition: service_healthy networks: - azerothcore environment: MYSQL_PWD: ${DOCKER_DB_ROOT_PASSWORD:-password} command: - sh - -c - | echo "Creating AzerothCore databases..." mysql -h ac-mysql -uroot -e " CREATE DATABASE IF NOT EXISTS acore_auth DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE IF NOT EXISTS acore_world DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE IF NOT EXISTS acore_characters DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; SHOW DATABASES; " || true echo "Databases created!" restart: "no" # Step 3: Import AzerothCore database schema and data ac-db-import: image: acore/ac-wotlk-db-import:14.0.0-dev container_name: ac-db-import depends_on: - ac-db-init networks: - azerothcore volumes: - ${STORAGE_PATH_CONTAINERS:-./volumes}/azerothcore/config:/azerothcore/env/dist/etc environment: AC_DATA_DIR: "/azerothcore/data" AC_LOGS_DIR: "/azerothcore/logs" AC_LOGIN_DATABASE_INFO: "ac-mysql;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" AC_WORLD_DATABASE_INFO: "ac-mysql;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" AC_CHARACTER_DATABASE_INFO: "ac-mysql;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" AC_CLOSE_IDLE_CONNECTIONS: "false" AC_UPDATES_ENABLE_DATABASES: "7" AC_UPDATES_AUTO_SETUP: "1" AC_LOG_LEVEL: "1" AC_LOGGER_ROOT_CONFIG: "1,Console" AC_LOGGER_SERVER_CONFIG: "1,Console" AC_APPENDER_CONSOLE_CONFIG: "1,2,0" entrypoint: ["/bin/bash", "-c"] command: - | echo 'Waiting for databases to be ready...' sleep 10 echo 'Creating config file for dbimport...' mkdir -p /azerothcore/env/dist/etc cat > /azerothcore/env/dist/etc/dbimport.conf </dev/null || echo 'No scripts to make executable' touch /var/log/backup.log echo "$$BACKUP_CRON_SCHEDULE /scripts/backup.sh >> /var/log/backup.log 2>&1" | crontab - echo "Starting backup service with schedule: $$BACKUP_CRON_SCHEDULE" echo "Backup retention: $$BACKUP_RETENTION_DAYS days" echo "Scripts location: /scripts" echo "Backup location: /backups" if [ -f "/scripts/backup.sh" ]; then echo "Running initial backup..." /scripts/backup.sh >> /var/log/backup.log 2>&1 else echo "No backup script found at /scripts/backup.sh" fi echo "Starting cron daemon..." /etc/init.d/cron start tail -f /var/log/backup.log restart: unless-stopped networks: - azerothcore networks: azerothcore: driver: bridge name: ${NETWORK_NAME:-azerothcore} ipam: config: - subnet: ${NETWORK_SUBNET:-172.20.0.0/16} gateway: ${NETWORK_GATEWAY:-172.20.0.1}