variable cleanup

This commit is contained in:
uprightbass360
2025-10-26 04:49:25 -04:00
parent 323186cce2
commit f46b88bd93
4 changed files with 492 additions and 300 deletions

View File

@@ -10,6 +10,7 @@ COMPOSE_PROJECT_NAME=acore-compose
# =====================
STORAGE_PATH=./storage
STORAGE_PATH_LOCAL=./local-storage
HOST_BACKUP_PATH=./storage/backups
HOST_ZONEINFO_PATH=/usr/share/zoneinfo
TZ=UTC
@@ -18,6 +19,7 @@ TZ=UTC
# =====================
MYSQL_IMAGE=mysql:8.0
CONTAINER_MYSQL=ac-mysql
MYSQL_HOST=ac-mysql
MYSQL_ROOT_PASSWORD=azerothcore123
MYSQL_ROOT_HOST=%
MYSQL_USER=root
@@ -30,6 +32,8 @@ MYSQL_INNODB_BUFFER_POOL_SIZE=256M
MYSQL_INNODB_LOG_FILE_SIZE=64M
MYSQL_INNODB_REDO_LOG_CAPACITY=512M
MYSQL_RUNTIME_TMPFS_SIZE=8G
DB_WAIT_RETRIES=60
DB_WAIT_SLEEP=10
# DB names
DB_AUTH_NAME=acore_auth
@@ -37,6 +41,13 @@ DB_WORLD_NAME=acore_world
DB_CHARACTERS_NAME=acore_characters
DB_PLAYERBOTS_NAME=acore_playerbots
# Container identifiers
CONTAINER_DB_IMPORT=ac-db-import
CONTAINER_DB_INIT=ac-db-init
CONTAINER_BACKUP=ac-backup
CONTAINER_MODULES=ac-modules
CONTAINER_POST_INSTALL=ac-post-install
# DB import image
AC_DB_IMPORT_IMAGE=acore/ac-wotlk-db-import:14.0.0-dev
@@ -84,13 +95,24 @@ SOAP_PORT=7878
SERVER_ADDRESS=127.0.0.1
REALM_PORT=8215
# =====================
# Backups
# =====================
BACKUP_RETENTION_DAYS=3
BACKUP_RETENTION_HOURS=6
BACKUP_DAILY_TIME=09
BACKUP_HEALTHCHECK_MAX_MINUTES=1440
BACKUP_HEALTHCHECK_GRACE_SECONDS=4500
BACKUP_HEALTHCHECK_INTERVAL=60s
BACKUP_HEALTHCHECK_TIMEOUT=30s
BACKUP_HEALTHCHECK_RETRIES=3
BACKUP_HEALTHCHECK_START_PERIOD=120s
# =====================
# Playerbots runtime flags (used by worldserver env)
# =====================
PLAYERBOT_ENABLED=0
PLAYERBOT_MAX_BOTS=40
PLAYERBOT_ENABLED=0
PLAYERBOT_MAX_BOTS=1000
# =====================
# Module toggles (0/1)
@@ -116,6 +138,7 @@ MODULE_ACCOUNT_ACHIEVEMENTS=0
MODULE_AUTO_REVIVE=0
MODULE_GAIN_HONOR_GUARD=0
MODULE_ARAC=0
MODULE_ELUNA=0
# Requires optional SQL/DBC patches; leave off by default
MODULE_TIME_IS_TIME=0
# Requires in-game NPC placement/config; leave off by default
@@ -169,6 +192,24 @@ AC_ELUNA_REQUIRE_PATHS=
AC_ELUNA_REQUIRE_CPATHS=
AC_ELUNA_AUTO_RELOAD_INTERVAL=1
# =====================
# Health checks
# =====================
MYSQL_HEALTHCHECK_INTERVAL=20s
MYSQL_HEALTHCHECK_TIMEOUT=15s
MYSQL_HEALTHCHECK_RETRIES=25
MYSQL_HEALTHCHECK_START_PERIOD=120s
AUTH_HEALTHCHECK_INTERVAL=30s
AUTH_HEALTHCHECK_TIMEOUT=10s
AUTH_HEALTHCHECK_RETRIES=3
AUTH_HEALTHCHECK_START_PERIOD=60s
WORLD_HEALTHCHECK_INTERVAL=30s
WORLD_HEALTHCHECK_TIMEOUT=10s
WORLD_HEALTHCHECK_RETRIES=3
WORLD_HEALTHCHECK_START_PERIOD=120s
# =====================
# Tools (phpMyAdmin / Keira3)
# =====================
@@ -197,3 +238,9 @@ NETWORK_GATEWAY=172.20.0.1
# Container user mapping
# =====================
CONTAINER_USER=0:0
# =====================
# Helper images
# =====================
ALPINE_GIT_IMAGE=alpine/git:latest
ALPINE_IMAGE=alpine:latest

View File

@@ -1,54 +1,54 @@
name: ${COMPOSE_PROJECT_NAME:-ac-compose}
name: ${COMPOSE_PROJECT_NAME}
services:
# =====================
# Database Layer (db)
# =====================
ac-mysql:
profiles: ["db"]
image: ${MYSQL_IMAGE:-mysql:8.0}
container_name: ${CONTAINER_MYSQL:-ac-mysql}
image: ${MYSQL_IMAGE}
container_name: ${CONTAINER_MYSQL}
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
MYSQL_ROOT_HOST: '${MYSQL_ROOT_HOST:-%}'
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_HOST: '${MYSQL_ROOT_HOST}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATADIR: /var/lib/mysql-runtime
MYSQL_CHARACTER_SET: ${MYSQL_CHARACTER_SET:-utf8mb4}
MYSQL_COLLATION: ${MYSQL_COLLATION:-utf8mb4_unicode_ci}
MYSQL_MAX_CONNECTIONS: ${MYSQL_MAX_CONNECTIONS:-1000}
MYSQL_INNODB_BUFFER_POOL_SIZE: ${MYSQL_INNODB_BUFFER_POOL_SIZE:-256M}
MYSQL_INNODB_LOG_FILE_SIZE: ${MYSQL_INNODB_LOG_FILE_SIZE:-64M}
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:-64306}:${MYSQL_PORT:-3306}"
- "${MYSQL_EXTERNAL_PORT}:${MYSQL_PORT}"
volumes:
- ${STORAGE_PATH:-./storage}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH:-${STORAGE_PATH:-./storage}/backups}:/backups
- ${HOST_ZONEINFO_PATH:-/usr/share/zoneinfo}:/usr/share/zoneinfo:ro
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH}:/backups
- ${HOST_ZONEINFO_PATH}:/usr/share/zoneinfo:ro
tmpfs:
- /var/lib/mysql-runtime:size=${MYSQL_RUNTIME_TMPFS_SIZE:-8G}
- /var/lib/mysql-runtime:size=${MYSQL_RUNTIME_TMPFS_SIZE}
command:
- mysqld
- --datadir=/var/lib/mysql-runtime
- --default-authentication-plugin=mysql_native_password
- --character-set-server=${MYSQL_CHARACTER_SET:-utf8mb4}
- --collation-server=${MYSQL_COLLATION:-utf8mb4_unicode_ci}
- --max_connections=${MYSQL_MAX_CONNECTIONS:-1000}
- --innodb-buffer-pool-size=${MYSQL_INNODB_BUFFER_POOL_SIZE:-256M}
- --innodb-log-file-size=${MYSQL_INNODB_LOG_FILE_SIZE:-64M}
- --innodb-redo-log-capacity=${MYSQL_INNODB_REDO_LOG_CAPACITY:-512M}
- --character-set-server=${MYSQL_CHARACTER_SET}
- --collation-server=${MYSQL_COLLATION}
- --max_connections=${MYSQL_MAX_CONNECTIONS}
- --innodb-buffer-pool-size=${MYSQL_INNODB_BUFFER_POOL_SIZE}
- --innodb-log-file-size=${MYSQL_INNODB_LOG_FILE_SIZE}
- --innodb-redo-log-capacity=${MYSQL_INNODB_REDO_LOG_CAPACITY}
restart: unless-stopped
healthcheck:
test: ["CMD", "sh", "-c", "mysqladmin ping -h localhost -u ${MYSQL_USER:-root} -p${MYSQL_ROOT_PASSWORD:-azerothcore123} --silent || exit 1"]
interval: ${MYSQL_HEALTHCHECK_INTERVAL:-20s}
timeout: ${MYSQL_HEALTHCHECK_TIMEOUT:-15s}
retries: ${MYSQL_HEALTHCHECK_RETRIES:-25}
start_period: ${MYSQL_HEALTHCHECK_START_PERIOD:-120s}
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
ac-db-import:
profiles: ["db"]
image: ${AC_DB_IMPORT_IMAGE:-acore/ac-wotlk-db-import:14.0.0-dev}
container_name: ${CONTAINER_DB_IMPORT:-ac-db-import}
image: ${AC_DB_IMPORT_IMAGE}
container_name: ${CONTAINER_DB_IMPORT}
user: "0:0"
depends_on:
ac-mysql:
@@ -56,16 +56,16 @@ services:
networks:
- azerothcore
volumes:
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH:-./storage}/logs:/azerothcore/logs
- ${STORAGE_PATH:-./storage}/mysql-data:/var/lib/mysql-persistent
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/logs:/azerothcore/logs
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
- ./scripts/db-import-conditional.sh:/tmp/db-import-conditional.sh:ro
environment:
AC_DATA_DIR: "/azerothcore/data"
AC_LOGS_DIR: "/azerothcore/logs"
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_AUTH_NAME:-acore_auth}"
AC_WORLD_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_WORLD_NAME:-acore_world}"
AC_CHARACTER_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_CHARACTERS_NAME:-acore_characters}"
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"
@@ -73,62 +73,62 @@ services:
AC_LOGGER_ROOT_CONFIG: "1,Console"
AC_LOGGER_SERVER_CONFIG: "1,Console"
AC_APPENDER_CONSOLE_CONFIG: "1,2,0"
CONTAINER_MYSQL: ${CONTAINER_MYSQL:-ac-mysql}
MYSQL_PORT: ${MYSQL_PORT:-3306}
MYSQL_USER: ${MYSQL_USER:-root}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
DB_AUTH_NAME: ${DB_AUTH_NAME:-acore_auth}
DB_WORLD_NAME: ${DB_WORLD_NAME:-acore_world}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME:-acore_characters}
CONTAINER_USER: ${CONTAINER_USER:-0:0}
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}
entrypoint:
- sh
- -c
- |
chown ${CONTAINER_USER:-0:0} /azerothcore/env/dist/etc 2>/dev/null || true
chown ${CONTAINER_USER} /azerothcore/env/dist/etc 2>/dev/null || true
echo "📥 Using local database import script..."
/tmp/db-import-conditional.sh
restart: "no"
ac-db-init:
profiles: ["db"]
image: ${MYSQL_IMAGE:-mysql:8.0}
container_name: ${CONTAINER_DB_INIT:-ac-db-init}
image: ${MYSQL_IMAGE}
container_name: ${CONTAINER_DB_INIT}
depends_on:
ac-db-import:
condition: service_completed_successfully
volumes:
- ${STORAGE_PATH:-./storage}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH:-${STORAGE_PATH:-./storage}/backups}:/backups
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH}:/backups
networks:
- azerothcore
environment:
MYSQL_PWD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
MYSQL_HOST: ${CONTAINER_MYSQL:-ac-mysql}
MYSQL_USER: ${MYSQL_USER:-root}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
DB_WAIT_RETRIES: ${DB_WAIT_RETRIES:-60}
DB_WAIT_SLEEP: ${DB_WAIT_SLEEP:-10}
DB_AUTH_NAME: ${DB_AUTH_NAME:-acore_auth}
DB_WORLD_NAME: ${DB_WORLD_NAME:-acore_world}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME:-acore_characters}
MYSQL_CHARACTER_SET: ${MYSQL_CHARACTER_SET:-utf8mb4}
MYSQL_COLLATION: ${MYSQL_COLLATION:-utf8mb4_unicode_ci}
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
- |
if [ -f "/var/lib/mysql-persistent/.restore-completed" ]; then
echo "✅ Databases already restored from backup - init not needed"; exit 0; fi
if mysql -h ${MYSQL_HOST:-ac-mysql} -u${MYSQL_USER:-root} -p${MYSQL_ROOT_PASSWORD:-azerothcore123} -e "
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema IN ('${DB_AUTH_NAME:-acore_auth}', '${DB_WORLD_NAME:-acore_world}', '${DB_CHARACTERS_NAME:-acore_characters}');" -s -N 2>/dev/null | grep -q -v '^0$'; then
if mysql -h ${MYSQL_HOST} -u${MYSQL_USER} -p${MYSQL_ROOT_PASSWORD} -e "
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema IN ('${DB_AUTH_NAME}', '${DB_WORLD_NAME}', '${DB_CHARACTERS_NAME}');" -s -N 2>/dev/null | grep -q -v '^0$'; then
echo "✅ Databases already populated - init not needed"; exit 0; fi
echo "🔧 Creating fresh AzerothCore databases..."
microdnf install -y curl || yum install -y curl || (apt-get update && apt-get install -y curl)
mysql -h ${MYSQL_HOST:-ac-mysql} -u${MYSQL_USER:-root} -p${MYSQL_ROOT_PASSWORD:-azerothcore123} -e "
CREATE DATABASE IF NOT EXISTS ${DB_AUTH_NAME:-acore_auth} DEFAULT CHARACTER SET ${MYSQL_CHARACTER_SET:-utf8mb4} COLLATE ${MYSQL_COLLATION:-utf8mb4_unicode_ci};
CREATE DATABASE IF NOT EXISTS ${DB_WORLD_NAME:-acore_world} DEFAULT CHARACTER SET ${MYSQL_CHARACTER_SET:-utf8mb4} COLLATE ${MYSQL_COLLATION:-utf8mb4_unicode_ci};
CREATE DATABASE IF NOT EXISTS ${DB_CHARACTERS_NAME:-acore_characters} DEFAULT CHARACTER SET ${MYSQL_CHARACTER_SET:-utf8mb4} COLLATE ${MYSQL_COLLATION:-utf8mb4_unicode_ci};
mysql -h ${MYSQL_HOST} -u${MYSQL_USER} -p${MYSQL_ROOT_PASSWORD} -e "
CREATE DATABASE IF NOT EXISTS ${DB_AUTH_NAME} DEFAULT CHARACTER SET ${MYSQL_CHARACTER_SET} COLLATE ${MYSQL_COLLATION};
CREATE DATABASE IF NOT EXISTS ${DB_WORLD_NAME} DEFAULT CHARACTER SET ${MYSQL_CHARACTER_SET} COLLATE ${MYSQL_COLLATION};
CREATE DATABASE IF NOT EXISTS ${DB_CHARACTERS_NAME} DEFAULT CHARACTER SET ${MYSQL_CHARACTER_SET} COLLATE ${MYSQL_COLLATION};
SHOW DATABASES;" || { echo "❌ Failed to create databases"; exit 1; }
echo "$(date): Fresh databases created - import needed" > /var/lib/mysql-persistent/.restore-failed
echo "✅ Fresh databases created!"
@@ -136,25 +136,25 @@ services:
ac-backup:
profiles: ["db"]
image: ${MYSQL_IMAGE:-mysql:8.0}
container_name: ${CONTAINER_BACKUP:-ac-backup}
image: ${MYSQL_IMAGE}
container_name: ${CONTAINER_BACKUP}
depends_on:
ac-db-import:
condition: service_completed_successfully
environment:
MYSQL_HOST: ${CONTAINER_MYSQL:-ac-mysql}
MYSQL_PORT: ${MYSQL_PORT:-3306}
MYSQL_USER: ${MYSQL_USER:-root}
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
BACKUP_RETENTION_DAYS: ${BACKUP_RETENTION_DAYS:-3}
BACKUP_RETENTION_HOURS: ${BACKUP_RETENTION_HOURS:-6}
BACKUP_DAILY_TIME: ${BACKUP_DAILY_TIME:-09}
DB_AUTH_NAME: ${DB_AUTH_NAME:-acore_auth}
DB_WORLD_NAME: ${DB_WORLD_NAME:-acore_world}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME:-acore_characters}
TZ: ${TZ:-UTC}
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:-${STORAGE_PATH:-./storage}/backups}:/backups
- ${HOST_BACKUP_PATH}:/backups
- ./scripts:/tmp/scripts:ro
working_dir: /tmp
command:
@@ -170,6 +170,22 @@ services:
echo "No local scheduler provided"
fi
restart: unless-stopped
healthcheck:
test:
- "CMD"
- "sh"
- "-c"
- >
mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'
>/dev/null 2>&1 &&
(
find /backups -name '*.sql.gz' -mmin -${BACKUP_HEALTHCHECK_MAX_MINUTES} -print -quit >/dev/null ||
awk -v limit=${BACKUP_HEALTHCHECK_GRACE_SECONDS} 'NR==1 { exit ($1 < limit) ? 0 : 1 }' /proc/uptime
)
interval: ${BACKUP_HEALTHCHECK_INTERVAL}
timeout: ${BACKUP_HEALTHCHECK_TIMEOUT}
retries: ${BACKUP_HEALTHCHECK_RETRIES}
start_period: ${BACKUP_HEALTHCHECK_START_PERIOD}
networks:
- azerothcore
@@ -178,17 +194,17 @@ services:
# =====================
ac-client-data-standard:
profiles: ["client-data"]
image: ${AC_CLIENT_DATA_IMAGE:-acore/ac-wotlk-client-data:14.0.0-dev}
image: ${AC_CLIENT_DATA_IMAGE}
container_name: ac-client-data
user: "0:0"
volumes:
- ac-client-data:/azerothcore/data
- ${CLIENT_DATA_CACHE_PATH:-${STORAGE_PATH_LOCAL:-./local-storage}/client-data-cache}:/cache
- ${CLIENT_DATA_CACHE_PATH}:/cache
- ./scripts:/tmp/scripts:ro
working_dir: /tmp
environment:
- CONTAINER_USER=${CONTAINER_USER:-0:0}
- CLIENT_DATA_VERSION=${CLIENT_DATA_VERSION:-}
- CONTAINER_USER=${CONTAINER_USER}
- CLIENT_DATA_VERSION=${CLIENT_DATA_VERSION}
command:
- sh
- -c
@@ -200,7 +216,7 @@ services:
elif command -v yum >/dev/null 2>&1; then
yum install -y curl unzip wget bash ca-certificates p7zip aria2 jq
fi
mkdir -p /cache && chown ${CONTAINER_USER:-0:0} /cache /azerothcore/data 2>/dev/null || true
mkdir -p /cache && chown ${CONTAINER_USER} /cache /azerothcore/data 2>/dev/null || true
if [ -f /tmp/scripts/download-client-data.sh ]; then
chmod +x /tmp/scripts/download-client-data.sh 2>/dev/null || true
bash /tmp/scripts/download-client-data.sh
@@ -213,17 +229,17 @@ services:
ac-client-data-playerbots:
profiles: ["client-data-bots"]
image: ${AC_CLIENT_DATA_IMAGE_PLAYERBOTS:-uprightbass360/azerothcore-wotlk-playerbots:client-data-Playerbot}
image: ${AC_CLIENT_DATA_IMAGE_PLAYERBOTS}
container_name: ac-client-data
user: "0:0"
volumes:
- ac-client-data:/azerothcore/data
- ${CLIENT_DATA_CACHE_PATH:-${STORAGE_PATH_LOCAL:-./local-storage}/client-data-cache}:/cache
- ${CLIENT_DATA_CACHE_PATH}:/cache
- ./scripts:/tmp/scripts:ro
working_dir: /tmp
environment:
- CONTAINER_USER=${CONTAINER_USER:-0:0}
- CLIENT_DATA_VERSION=${CLIENT_DATA_VERSION:-}
- CONTAINER_USER=${CONTAINER_USER}
- CLIENT_DATA_VERSION=${CLIENT_DATA_VERSION}
command:
- sh
- -c
@@ -235,7 +251,7 @@ services:
elif command -v yum >/dev/null 2>&1; then
yum install -y curl unzip wget bash ca-certificates p7zip aria2 jq
fi
mkdir -p /cache && chown ${CONTAINER_USER:-0:0} /cache /azerothcore/data 2>/dev/null || true
mkdir -p /cache && chown ${CONTAINER_USER} /cache /azerothcore/data 2>/dev/null || true
if [ -f /tmp/scripts/download-client-data.sh ]; then
chmod +x /tmp/scripts/download-client-data.sh 2>/dev/null || true
bash /tmp/scripts/download-client-data.sh
@@ -251,9 +267,9 @@ services:
# =====================
ac-authserver-standard:
profiles: ["services-standard"]
image: ${AC_AUTHSERVER_IMAGE:-acore/ac-wotlk-authserver:14.0.0-dev}
image: ${AC_AUTHSERVER_IMAGE}
container_name: ac-authserver
user: "${CONTAINER_USER:-0:0}"
user: "${CONTAINER_USER}"
depends_on:
ac-mysql:
condition: service_healthy
@@ -262,7 +278,7 @@ services:
ac-db-init:
condition: service_completed_successfully
environment:
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_AUTH_NAME:-acore_auth}"
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_AUTH_NAME}"
AC_UPDATES_ENABLE_DATABASES: "0"
AC_BIND_IP: "0.0.0.0"
AC_LOG_LEVEL: "1"
@@ -270,78 +286,78 @@ services:
AC_LOGGER_SERVER_CONFIG: "1,Console"
AC_APPENDER_CONSOLE_CONFIG: "1,2,0"
ports:
- "${AUTH_EXTERNAL_PORT:-3784}:${AUTH_PORT:-3724}"
- "${AUTH_EXTERNAL_PORT}:${AUTH_PORT}"
restart: unless-stopped
networks:
- azerothcore
volumes:
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
cap_add: ["SYS_NICE"]
healthcheck:
test: ["CMD", "sh", "-c", "ps aux | grep '[a]uthserver' | grep -v grep || exit 1"]
interval: ${AUTH_HEALTHCHECK_INTERVAL:-30s}
timeout: ${AUTH_HEALTHCHECK_TIMEOUT:-10s}
retries: ${AUTH_HEALTHCHECK_RETRIES:-3}
start_period: ${AUTH_HEALTHCHECK_START_PERIOD:-60s}
interval: ${AUTH_HEALTHCHECK_INTERVAL}
timeout: ${AUTH_HEALTHCHECK_TIMEOUT}
retries: ${AUTH_HEALTHCHECK_RETRIES}
start_period: ${AUTH_HEALTHCHECK_START_PERIOD}
ac-worldserver-standard:
profiles: ["services-standard"]
image: ${AC_WORLDSERVER_IMAGE:-acore/ac-wotlk-worldserver:14.0.0-dev}
image: ${AC_WORLDSERVER_IMAGE}
container_name: ac-worldserver
user: "${CONTAINER_USER:-0:0}"
user: "${CONTAINER_USER}"
stdin_open: true
tty: true
depends_on:
- ac-authserver-standard
- ac-client-data-standard
environment:
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_AUTH_NAME:-acore_auth}"
AC_WORLD_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_WORLD_NAME:-acore_world}"
AC_CHARACTER_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_CHARACTERS_NAME:-acore_characters}"
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_UPDATES_ENABLE_DATABASES: "0"
AC_BIND_IP: "0.0.0.0"
AC_DATA_DIR: "/azerothcore/data"
AC_SOAP_PORT: "7878"
AC_PROCESS_PRIORITY: "0"
AC_ELUNA_ENABLED: "${AC_ELUNA_ENABLED:-1}"
AC_ELUNA_TRACE_BACK: "${AC_ELUNA_TRACE_BACK:-1}"
AC_ELUNA_AUTO_RELOAD: "${AC_ELUNA_AUTO_RELOAD:-1}"
AC_ELUNA_BYTECODE_CACHE: "${AC_ELUNA_BYTECODE_CACHE:-1}"
AC_ELUNA_SCRIPT_PATH: "${AC_ELUNA_SCRIPT_PATH:-lua_scripts}"
AC_ELUNA_REQUIRE_PATHS: "${AC_ELUNA_REQUIRE_PATHS:-}"
AC_ELUNA_REQUIRE_CPATHS: "${AC_ELUNA_REQUIRE_CPATHS:-}"
AC_ELUNA_AUTO_RELOAD_INTERVAL: "${AC_ELUNA_AUTO_RELOAD_INTERVAL:-1}"
PLAYERBOT_ENABLED: "${PLAYERBOT_ENABLED:-0}"
PLAYERBOT_MAX_BOTS: "${PLAYERBOT_MAX_BOTS:-40}"
AC_ELUNA_ENABLED: "${AC_ELUNA_ENABLED}"
AC_ELUNA_TRACE_BACK: "${AC_ELUNA_TRACE_BACK}"
AC_ELUNA_AUTO_RELOAD: "${AC_ELUNA_AUTO_RELOAD}"
AC_ELUNA_BYTECODE_CACHE: "${AC_ELUNA_BYTECODE_CACHE}"
AC_ELUNA_SCRIPT_PATH: "${AC_ELUNA_SCRIPT_PATH}"
AC_ELUNA_REQUIRE_PATHS: "${AC_ELUNA_REQUIRE_PATHS}"
AC_ELUNA_REQUIRE_CPATHS: "${AC_ELUNA_REQUIRE_CPATHS}"
AC_ELUNA_AUTO_RELOAD_INTERVAL: "${AC_ELUNA_AUTO_RELOAD_INTERVAL}"
PLAYERBOT_ENABLED: "${PLAYERBOT_ENABLED}"
PLAYERBOT_MAX_BOTS: "${PLAYERBOT_MAX_BOTS}"
AC_LOG_LEVEL: "2"
ports:
- "${WORLD_EXTERNAL_PORT:-8215}:${WORLD_PORT:-8085}"
- "${SOAP_EXTERNAL_PORT:-7778}:${SOAP_PORT:-7878}"
- "${WORLD_EXTERNAL_PORT}:${WORLD_PORT}"
- "${SOAP_EXTERNAL_PORT}:${SOAP_PORT}"
volumes:
- ac-client-data:/azerothcore/data
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH:-./storage}/logs:/azerothcore/logs
- ${STORAGE_PATH:-./storage}/modules:/azerothcore/modules
- ${STORAGE_PATH:-./storage}/lua_scripts:/azerothcore/lua_scripts
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/logs:/azerothcore/logs
- ${STORAGE_PATH}/modules:/azerothcore/modules
- ${STORAGE_PATH}/lua_scripts:/azerothcore/lua_scripts
restart: unless-stopped
networks:
- azerothcore
cap_add: ["SYS_NICE"]
healthcheck:
test: ["CMD", "sh", "-c", "ps aux | grep '[w]orldserver' | grep -v grep || exit 1"]
interval: ${WORLD_HEALTHCHECK_INTERVAL:-30s}
timeout: ${WORLD_HEALTHCHECK_TIMEOUT:-10s}
retries: ${WORLD_HEALTHCHECK_RETRIES:-3}
start_period: ${WORLD_HEALTHCHECK_START_PERIOD:-120s}
interval: ${WORLD_HEALTHCHECK_INTERVAL}
timeout: ${WORLD_HEALTHCHECK_TIMEOUT}
retries: ${WORLD_HEALTHCHECK_RETRIES}
start_period: ${WORLD_HEALTHCHECK_START_PERIOD}
# =====================
# Services - Playerbots (services-playerbots)
# =====================
ac-authserver-playerbots:
profiles: ["services-playerbots"]
image: ${AC_AUTHSERVER_IMAGE_PLAYERBOTS:-uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot}
image: ${AC_AUTHSERVER_IMAGE_PLAYERBOTS}
container_name: ac-authserver
user: "${CONTAINER_USER:-0:0}"
user: "${CONTAINER_USER}"
depends_on:
ac-mysql:
condition: service_healthy
@@ -350,7 +366,7 @@ services:
ac-db-init:
condition: service_completed_successfully
environment:
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_AUTH_NAME:-acore_auth}"
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_AUTH_NAME}"
AC_UPDATES_ENABLE_DATABASES: "0"
AC_BIND_IP: "0.0.0.0"
AC_LOG_LEVEL: "1"
@@ -358,25 +374,25 @@ services:
AC_LOGGER_SERVER_CONFIG: "1,Console"
AC_APPENDER_CONSOLE_CONFIG: "1,2,0"
ports:
- "${AUTH_EXTERNAL_PORT:-3784}:${AUTH_PORT:-3724}"
- "${AUTH_EXTERNAL_PORT}:${AUTH_PORT}"
restart: unless-stopped
networks:
- azerothcore
volumes:
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
cap_add: ["SYS_NICE"]
healthcheck:
test: ["CMD", "sh", "-c", "ps aux | grep '[a]uthserver' | grep -v grep || exit 1"]
interval: ${AUTH_HEALTHCHECK_INTERVAL:-30s}
timeout: ${AUTH_HEALTHCHECK_TIMEOUT:-10s}
retries: ${AUTH_HEALTHCHECK_RETRIES:-3}
start_period: ${AUTH_HEALTHCHECK_START_PERIOD:-60s}
interval: ${AUTH_HEALTHCHECK_INTERVAL}
timeout: ${AUTH_HEALTHCHECK_TIMEOUT}
retries: ${AUTH_HEALTHCHECK_RETRIES}
start_period: ${AUTH_HEALTHCHECK_START_PERIOD}
ac-authserver-modules:
profiles: ["services-modules"]
image: ${AC_AUTHSERVER_IMAGE_MODULES:-acore/ac-wotlk-authserver:modules-latest}
image: ${AC_AUTHSERVER_IMAGE_MODULES}
container_name: ac-authserver
user: "${CONTAINER_USER:-0:0}"
user: "${CONTAINER_USER}"
depends_on:
ac-mysql:
condition: service_healthy
@@ -385,7 +401,7 @@ services:
ac-db-init:
condition: service_completed_successfully
environment:
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_AUTH_NAME:-acore_auth}"
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_AUTH_NAME}"
AC_UPDATES_ENABLE_DATABASES: "0"
AC_BIND_IP: "0.0.0.0"
AC_LOG_LEVEL: "1"
@@ -393,127 +409,127 @@ services:
AC_LOGGER_SERVER_CONFIG: "1,Console"
AC_APPENDER_CONSOLE_CONFIG: "1,2,0"
ports:
- "${AUTH_EXTERNAL_PORT:-3784}:${AUTH_PORT:-3724}"
- "${AUTH_EXTERNAL_PORT}:${AUTH_PORT}"
restart: unless-stopped
networks:
- azerothcore
volumes:
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
cap_add: ["SYS_NICE"]
healthcheck:
test: ["CMD", "sh", "-c", "ps aux | grep '[a]uthserver' | grep -v grep || exit 1"]
interval: ${AUTH_HEALTHCHECK_INTERVAL:-30s}
timeout: ${AUTH_HEALTHCHECK_TIMEOUT:-10s}
retries: ${AUTH_HEALTHCHECK_RETRIES:-3}
start_period: ${AUTH_HEALTHCHECK_START_PERIOD:-60s}
interval: ${AUTH_HEALTHCHECK_INTERVAL}
timeout: ${AUTH_HEALTHCHECK_TIMEOUT}
retries: ${AUTH_HEALTHCHECK_RETRIES}
start_period: ${AUTH_HEALTHCHECK_START_PERIOD}
ac-worldserver-playerbots:
profiles: ["services-playerbots"]
image: ${AC_WORLDSERVER_IMAGE_PLAYERBOTS:-uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot}
image: ${AC_WORLDSERVER_IMAGE_PLAYERBOTS}
container_name: ac-worldserver
user: "${CONTAINER_USER:-0:0}"
user: "${CONTAINER_USER}"
stdin_open: true
tty: true
depends_on:
- ac-authserver-playerbots
- ac-client-data-playerbots
environment:
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_AUTH_NAME:-acore_auth}"
AC_WORLD_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_WORLD_NAME:-acore_world}"
AC_CHARACTER_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_CHARACTERS_NAME:-acore_characters}"
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_UPDATES_ENABLE_DATABASES: "0"
AC_BIND_IP: "0.0.0.0"
AC_DATA_DIR: "/azerothcore/data"
AC_SOAP_PORT: "7878"
AC_PROCESS_PRIORITY: "0"
AC_ELUNA_ENABLED: "${AC_ELUNA_ENABLED:-1}"
AC_ELUNA_TRACE_BACK: "${AC_ELUNA_TRACE_BACK:-1}"
AC_ELUNA_AUTO_RELOAD: "${AC_ELUNA_AUTO_RELOAD:-1}"
AC_ELUNA_BYTECODE_CACHE: "${AC_ELUNA_BYTECODE_CACHE:-1}"
AC_ELUNA_SCRIPT_PATH: "${AC_ELUNA_SCRIPT_PATH:-lua_scripts}"
AC_ELUNA_REQUIRE_PATHS: "${AC_ELUNA_REQUIRE_PATHS:-}"
AC_ELUNA_REQUIRE_CPATHS: "${AC_ELUNA_REQUIRE_CPATHS:-}"
AC_ELUNA_AUTO_RELOAD_INTERVAL: "${AC_ELUNA_AUTO_RELOAD_INTERVAL:-1}"
PLAYERBOT_ENABLED: "${PLAYERBOT_ENABLED:-1}"
PLAYERBOT_MAX_BOTS: "${PLAYERBOT_MAX_BOTS:-40}"
AC_ELUNA_ENABLED: "${AC_ELUNA_ENABLED}"
AC_ELUNA_TRACE_BACK: "${AC_ELUNA_TRACE_BACK}"
AC_ELUNA_AUTO_RELOAD: "${AC_ELUNA_AUTO_RELOAD}"
AC_ELUNA_BYTECODE_CACHE: "${AC_ELUNA_BYTECODE_CACHE}"
AC_ELUNA_SCRIPT_PATH: "${AC_ELUNA_SCRIPT_PATH}"
AC_ELUNA_REQUIRE_PATHS: "${AC_ELUNA_REQUIRE_PATHS}"
AC_ELUNA_REQUIRE_CPATHS: "${AC_ELUNA_REQUIRE_CPATHS}"
AC_ELUNA_AUTO_RELOAD_INTERVAL: "${AC_ELUNA_AUTO_RELOAD_INTERVAL}"
PLAYERBOT_ENABLED: "${PLAYERBOT_ENABLED}"
PLAYERBOT_MAX_BOTS: "${PLAYERBOT_MAX_BOTS}"
AC_LOG_LEVEL: "2"
ports:
- "${WORLD_EXTERNAL_PORT:-8215}:${WORLD_PORT:-8085}"
- "${SOAP_EXTERNAL_PORT:-7778}:${SOAP_PORT:-7878}"
- "${WORLD_EXTERNAL_PORT}:${WORLD_PORT}"
- "${SOAP_EXTERNAL_PORT}:${SOAP_PORT}"
volumes:
- ac-client-data:/azerothcore/data
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH:-./storage}/logs:/azerothcore/logs
- ${STORAGE_PATH:-./storage}/modules:/azerothcore/modules
- ${STORAGE_PATH:-./storage}/lua_scripts:/azerothcore/lua_scripts
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/logs:/azerothcore/logs
- ${STORAGE_PATH}/modules:/azerothcore/modules
- ${STORAGE_PATH}/lua_scripts:/azerothcore/lua_scripts
restart: unless-stopped
networks:
- azerothcore
cap_add: ["SYS_NICE"]
healthcheck:
test: ["CMD", "sh", "-c", "ps aux | grep '[w]orldserver' | grep -v grep || exit 1"]
interval: ${WORLD_HEALTHCHECK_INTERVAL:-30s}
timeout: ${WORLD_HEALTHCHECK_TIMEOUT:-10s}
retries: ${WORLD_HEALTHCHECK_RETRIES:-3}
start_period: ${WORLD_HEALTHCHECK_START_PERIOD:-120s}
interval: ${WORLD_HEALTHCHECK_INTERVAL}
timeout: ${WORLD_HEALTHCHECK_TIMEOUT}
retries: ${WORLD_HEALTHCHECK_RETRIES}
start_period: ${WORLD_HEALTHCHECK_START_PERIOD}
ac-worldserver-modules:
profiles: ["services-modules"]
image: ${AC_WORLDSERVER_IMAGE_MODULES:-acore/ac-wotlk-worldserver:modules-latest}
image: ${AC_WORLDSERVER_IMAGE_MODULES}
container_name: ac-worldserver
user: "${CONTAINER_USER:-0:0}"
user: "${CONTAINER_USER}"
stdin_open: true
tty: true
depends_on:
- ac-authserver-modules
- ac-client-data-standard
environment:
AC_LOGIN_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_AUTH_NAME:-acore_auth}"
AC_WORLD_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_WORLD_NAME:-acore_world}"
AC_CHARACTER_DATABASE_INFO: "${CONTAINER_MYSQL:-ac-mysql};${MYSQL_PORT:-3306};${MYSQL_USER:-root};${MYSQL_ROOT_PASSWORD:-azerothcore123};${DB_CHARACTERS_NAME:-acore_characters}"
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_UPDATES_ENABLE_DATABASES: "0"
AC_BIND_IP: "0.0.0.0"
AC_DATA_DIR: "/azerothcore/data"
AC_SOAP_PORT: "7878"
AC_PROCESS_PRIORITY: "0"
AC_ELUNA_ENABLED: "${AC_ELUNA_ENABLED:-1}"
AC_ELUNA_TRACE_BACK: "${AC_ELUNA_TRACE_BACK:-1}"
AC_ELUNA_AUTO_RELOAD: "${AC_ELUNA_AUTO_RELOAD:-1}"
AC_ELUNA_BYTECODE_CACHE: "${AC_ELUNA_BYTECODE_CACHE:-1}"
AC_ELUNA_SCRIPT_PATH: "${AC_ELUNA_SCRIPT_PATH:-lua_scripts}"
AC_ELUNA_REQUIRE_PATHS: "${AC_ELUNA_REQUIRE_PATHS:-}"
AC_ELUNA_REQUIRE_CPATHS: "${AC_ELUNA_REQUIRE_CPATHS:-}"
AC_ELUNA_AUTO_RELOAD_INTERVAL: "${AC_ELUNA_AUTO_RELOAD_INTERVAL:-1}"
PLAYERBOT_ENABLED: "${PLAYERBOT_ENABLED:-0}"
PLAYERBOT_MAX_BOTS: "${PLAYERBOT_MAX_BOTS:-40}"
AC_ELUNA_ENABLED: "${AC_ELUNA_ENABLED}"
AC_ELUNA_TRACE_BACK: "${AC_ELUNA_TRACE_BACK}"
AC_ELUNA_AUTO_RELOAD: "${AC_ELUNA_AUTO_RELOAD}"
AC_ELUNA_BYTECODE_CACHE: "${AC_ELUNA_BYTECODE_CACHE}"
AC_ELUNA_SCRIPT_PATH: "${AC_ELUNA_SCRIPT_PATH}"
AC_ELUNA_REQUIRE_PATHS: "${AC_ELUNA_REQUIRE_PATHS}"
AC_ELUNA_REQUIRE_CPATHS: "${AC_ELUNA_REQUIRE_CPATHS}"
AC_ELUNA_AUTO_RELOAD_INTERVAL: "${AC_ELUNA_AUTO_RELOAD_INTERVAL}"
PLAYERBOT_ENABLED: "${PLAYERBOT_ENABLED}"
PLAYERBOT_MAX_BOTS: "${PLAYERBOT_MAX_BOTS}"
AC_LOG_LEVEL: "2"
volumes:
- ac-client-data:/azerothcore/data
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH:-./storage}/logs:/azerothcore/logs
- ${STORAGE_PATH:-./storage}/modules:/azerothcore/modules
- ${STORAGE_PATH:-./storage}/lua_scripts:/azerothcore/lua_scripts
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/logs:/azerothcore/logs
- ${STORAGE_PATH}/modules:/azerothcore/modules
- ${STORAGE_PATH}/lua_scripts:/azerothcore/lua_scripts
networks:
- azerothcore
ports:
- "${WORLD_EXTERNAL_PORT:-8215}:${WORLD_PORT:-8085}"
- "${SOAP_EXTERNAL_PORT:-7778}:${SOAP_PORT:-7878}"
- "${WORLD_EXTERNAL_PORT}:${WORLD_PORT}"
- "${SOAP_EXTERNAL_PORT}:${SOAP_PORT}"
restart: unless-stopped
cap_add: ["SYS_NICE"]
healthcheck:
test: ["CMD", "sh", "-c", "ps aux | grep '[w]orldserver' | grep -v grep || exit 1"]
interval: ${WORLD_HEALTHCHECK_INTERVAL:-30s}
timeout: ${WORLD_HEALTHCHECK_TIMEOUT:-10s}
retries: ${WORLD_HEALTHCHECK_RETRIES:-3}
start_period: ${WORLD_HEALTHCHECK_START_PERIOD:-120s}
interval: ${WORLD_HEALTHCHECK_INTERVAL}
timeout: ${WORLD_HEALTHCHECK_TIMEOUT}
retries: ${WORLD_HEALTHCHECK_RETRIES}
start_period: ${WORLD_HEALTHCHECK_START_PERIOD}
# =====================
# Modules & Post-install (modules)
# =====================
ac-modules:
profiles: ["modules"]
image: ${ALPINE_GIT_IMAGE:-alpine/git:latest}
container_name: ${CONTAINER_MODULES:-ac-modules}
image: ${ALPINE_GIT_IMAGE}
container_name: ${CONTAINER_MODULES}
user: "0:0"
depends_on:
ac-mysql:
@@ -523,51 +539,51 @@ services:
ac-db-init:
condition: service_completed_successfully
volumes:
- ${STORAGE_PATH:-./storage}/modules:/modules
- ${STORAGE_PATH:-./storage}/config:/azerothcore/env/dist/etc
- ${STORAGE_PATH}/modules:/modules
- ${STORAGE_PATH}/config:/azerothcore/env/dist/etc
- ./scripts:/tmp/scripts:ro
environment:
- MODULE_PLAYERBOTS=${MODULE_PLAYERBOTS:-0}
- MODULE_AOE_LOOT=${MODULE_AOE_LOOT:-0}
- MODULE_LEARN_SPELLS=${MODULE_LEARN_SPELLS:-0}
- MODULE_FIREWORKS=${MODULE_FIREWORKS:-0}
- MODULE_INDIVIDUAL_PROGRESSION=${MODULE_INDIVIDUAL_PROGRESSION:-0}
- MODULE_AHBOT=${MODULE_AHBOT:-0}
- MODULE_AUTOBALANCE=${MODULE_AUTOBALANCE:-0}
- MODULE_TRANSMOG=${MODULE_TRANSMOG:-0}
- MODULE_NPC_BUFFER=${MODULE_NPC_BUFFER:-0}
- MODULE_DYNAMIC_XP=${MODULE_DYNAMIC_XP:-0}
- MODULE_SOLO_LFG=${MODULE_SOLO_LFG:-0}
- MODULE_1V1_ARENA=${MODULE_1V1_ARENA:-0}
- MODULE_PHASED_DUELS=${MODULE_PHASED_DUELS:-0}
- MODULE_BREAKING_NEWS=${MODULE_BREAKING_NEWS:-0}
- MODULE_BOSS_ANNOUNCER=${MODULE_BOSS_ANNOUNCER:-0}
- MODULE_ACCOUNT_ACHIEVEMENTS=${MODULE_ACCOUNT_ACHIEVEMENTS:-0}
- MODULE_AUTO_REVIVE=${MODULE_AUTO_REVIVE:-0}
- MODULE_GAIN_HONOR_GUARD=${MODULE_GAIN_HONOR_GUARD:-0}
- MODULE_ELUNA=${MODULE_ELUNA:-0}
- MODULE_ARAC=${MODULE_ARAC:-0}
- MODULE_TIME_IS_TIME=${MODULE_TIME_IS_TIME:-0}
- MODULE_POCKET_PORTAL=${MODULE_POCKET_PORTAL:-0}
- MODULE_RANDOM_ENCHANTS=${MODULE_RANDOM_ENCHANTS:-0}
- MODULE_SOLOCRAFT=${MODULE_SOLOCRAFT:-0}
- MODULE_PVP_TITLES=${MODULE_PVP_TITLES:-0}
- MODULE_NPC_BEASTMASTER=${MODULE_NPC_BEASTMASTER:-0}
- MODULE_NPC_ENCHANTER=${MODULE_NPC_ENCHANTER:-0}
- MODULE_INSTANCE_RESET=${MODULE_INSTANCE_RESET:-0}
- MODULE_LEVEL_GRANT=${MODULE_LEVEL_GRANT:-0}
- MODULE_ASSISTANT=${MODULE_ASSISTANT:-0}
- MODULE_REAGENT_BANK=${MODULE_REAGENT_BANK:-0}
- MODULE_BLACK_MARKET_AUCTION_HOUSE=${MODULE_BLACK_MARKET_AUCTION_HOUSE:-0}
- CONTAINER_MYSQL=${CONTAINER_MYSQL:-ac-mysql}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-azerothcore123}
- DB_AUTH_NAME=${DB_AUTH_NAME:-acore_auth}
- DB_WORLD_NAME=${DB_WORLD_NAME:-acore_world}
- DB_CHARACTERS_NAME=${DB_CHARACTERS_NAME:-acore_characters}
- DB_PLAYERBOTS_NAME=${DB_PLAYERBOTS_NAME:-acore_playerbots}
- MYSQL_CHARACTER_SET=${MYSQL_CHARACTER_SET:-utf8mb4}
- MYSQL_COLLATION=${MYSQL_COLLATION:-utf8mb4_unicode_ci}
- CONTAINER_USER=${CONTAINER_USER:-0:0}
- MODULE_PLAYERBOTS=${MODULE_PLAYERBOTS}
- MODULE_AOE_LOOT=${MODULE_AOE_LOOT}
- MODULE_LEARN_SPELLS=${MODULE_LEARN_SPELLS}
- MODULE_FIREWORKS=${MODULE_FIREWORKS}
- MODULE_INDIVIDUAL_PROGRESSION=${MODULE_INDIVIDUAL_PROGRESSION}
- MODULE_AHBOT=${MODULE_AHBOT}
- MODULE_AUTOBALANCE=${MODULE_AUTOBALANCE}
- MODULE_TRANSMOG=${MODULE_TRANSMOG}
- MODULE_NPC_BUFFER=${MODULE_NPC_BUFFER}
- MODULE_DYNAMIC_XP=${MODULE_DYNAMIC_XP}
- MODULE_SOLO_LFG=${MODULE_SOLO_LFG}
- MODULE_1V1_ARENA=${MODULE_1V1_ARENA}
- MODULE_PHASED_DUELS=${MODULE_PHASED_DUELS}
- MODULE_BREAKING_NEWS=${MODULE_BREAKING_NEWS}
- MODULE_BOSS_ANNOUNCER=${MODULE_BOSS_ANNOUNCER}
- MODULE_ACCOUNT_ACHIEVEMENTS=${MODULE_ACCOUNT_ACHIEVEMENTS}
- MODULE_AUTO_REVIVE=${MODULE_AUTO_REVIVE}
- MODULE_GAIN_HONOR_GUARD=${MODULE_GAIN_HONOR_GUARD}
- MODULE_ELUNA=${MODULE_ELUNA}
- MODULE_ARAC=${MODULE_ARAC}
- MODULE_TIME_IS_TIME=${MODULE_TIME_IS_TIME}
- MODULE_POCKET_PORTAL=${MODULE_POCKET_PORTAL}
- MODULE_RANDOM_ENCHANTS=${MODULE_RANDOM_ENCHANTS}
- MODULE_SOLOCRAFT=${MODULE_SOLOCRAFT}
- MODULE_PVP_TITLES=${MODULE_PVP_TITLES}
- MODULE_NPC_BEASTMASTER=${MODULE_NPC_BEASTMASTER}
- MODULE_NPC_ENCHANTER=${MODULE_NPC_ENCHANTER}
- MODULE_INSTANCE_RESET=${MODULE_INSTANCE_RESET}
- MODULE_LEVEL_GRANT=${MODULE_LEVEL_GRANT}
- MODULE_ASSISTANT=${MODULE_ASSISTANT}
- MODULE_REAGENT_BANK=${MODULE_REAGENT_BANK}
- MODULE_BLACK_MARKET_AUCTION_HOUSE=${MODULE_BLACK_MARKET_AUCTION_HOUSE}
- CONTAINER_MYSQL=${CONTAINER_MYSQL}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- DB_AUTH_NAME=${DB_AUTH_NAME}
- DB_WORLD_NAME=${DB_WORLD_NAME}
- DB_CHARACTERS_NAME=${DB_CHARACTERS_NAME}
- DB_PLAYERBOTS_NAME=${DB_PLAYERBOTS_NAME}
- MYSQL_CHARACTER_SET=${MYSQL_CHARACTER_SET}
- MYSQL_COLLATION=${MYSQL_COLLATION}
- CONTAINER_USER=${CONTAINER_USER}
entrypoint: ["/bin/sh"]
command:
- -c
@@ -579,33 +595,33 @@ services:
ac-post-install:
profiles: ["modules"]
image: ${ALPINE_IMAGE:-alpine:latest}
container_name: ${CONTAINER_POST_INSTALL:-ac-post-install}
image: ${ALPINE_IMAGE}
container_name: ${CONTAINER_POST_INSTALL}
user: "0:0"
volumes:
- ${STORAGE_PATH:-./storage}/config:/azerothcore/config
- ${STORAGE_PATH:-./storage}/install-markers:/install-markers
- ${STORAGE_PATH}/config:/azerothcore/config
- ${STORAGE_PATH}/install-markers:/install-markers
- ./scripts:/tmp/scripts:ro
- /var/run/docker.sock:/var/run/docker.sock:rw
working_dir: /tmp
environment:
MYSQL_HOST: ${CONTAINER_MYSQL:-ac-mysql}
MYSQL_PORT: ${MYSQL_PORT:-3306}
MYSQL_USER: ${MYSQL_USER:-root}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
DB_AUTH_NAME: ${DB_AUTH_NAME:-acore_auth}
DB_WORLD_NAME: ${DB_WORLD_NAME:-acore_world}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME:-acore_characters}
DB_PLAYERBOTS_NAME: ${DB_PLAYERBOTS_NAME:-acore_playerbots}
MYSQL_CHARACTER_SET: ${MYSQL_CHARACTER_SET:-utf8mb4}
MYSQL_COLLATION: ${MYSQL_COLLATION:-utf8mb4_unicode_ci}
STORAGE_PATH: ${STORAGE_PATH:-./storage}
SERVER_ADDRESS: ${SERVER_ADDRESS:-127.0.0.1}
REALM_PORT: ${REALM_PORT:-8215}
NETWORK_NAME: ${NETWORK_NAME:-azerothcore}
MYSQL_HOST: ${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}
DB_PLAYERBOTS_NAME: ${DB_PLAYERBOTS_NAME}
MYSQL_CHARACTER_SET: ${MYSQL_CHARACTER_SET}
MYSQL_COLLATION: ${MYSQL_COLLATION}
STORAGE_PATH: ${STORAGE_PATH}
SERVER_ADDRESS: ${SERVER_ADDRESS}
REALM_PORT: ${REALM_PORT}
NETWORK_NAME: ${NETWORK_NAME}
CONTAINER_AUTHSERVER: ac-authserver
CONTAINER_WORLDSERVER: ac-worldserver
CONTAINER_USER: ${CONTAINER_USER:-0:0}
CONTAINER_USER: ${CONTAINER_USER}
depends_on:
ac-modules:
condition: service_completed_successfully
@@ -616,7 +632,7 @@ services:
- -c
- |
apk add --no-cache bash curl docker-cli
chown ${CONTAINER_USER:-0:0} /azerothcore/config /install-markers 2>/dev/null || true
chown ${CONTAINER_USER} /azerothcore/config /install-markers 2>/dev/null || true
echo "📥 Running local auto-post-install script..."
(chmod +x /tmp/scripts/auto-post-install.sh 2>/dev/null || true) && bash /tmp/scripts/auto-post-install.sh
restart: "no"
@@ -631,18 +647,18 @@ services:
image: phpmyadmin/phpmyadmin:latest
container_name: ac-phpmyadmin
environment:
PMA_HOST: ${PMA_HOST:-ac-mysql}
PMA_PORT: ${PMA_PORT:-3306}
PMA_USER: ${PMA_USER:-root}
PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-azerothcore123}
PMA_ARBITRARY: ${PMA_ARBITRARY:-1}
PMA_ABSOLUTE_URI: ${PMA_ABSOLUTE_URI:-}
UPLOAD_LIMIT: ${PMA_UPLOAD_LIMIT:-300M}
MEMORY_LIMIT: ${PMA_MEMORY_LIMIT:-512M}
MAX_EXECUTION_TIME: ${PMA_MAX_EXECUTION_TIME:-600}
PMA_HOST: ${PMA_HOST}
PMA_PORT: ${PMA_PORT}
PMA_USER: ${PMA_USER}
PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
PMA_ARBITRARY: ${PMA_ARBITRARY}
PMA_ABSOLUTE_URI: ${PMA_ABSOLUTE_URI}
UPLOAD_LIMIT: ${PMA_UPLOAD_LIMIT}
MEMORY_LIMIT: ${PMA_MEMORY_LIMIT}
MAX_EXECUTION_TIME: ${PMA_MAX_EXECUTION_TIME}
ports:
- "${PMA_EXTERNAL_PORT:-8081}:80"
- "${PMA_EXTERNAL_PORT}:80"
healthcheck:
test: ["CMD", "sh", "-c", "curl -fsS http://localhost:80/ || exit 1"]
interval: 30s
@@ -662,13 +678,13 @@ services:
- NODE_ENV=production
- KEIRA_PORT=8080
- KEIRA_HOST=0.0.0.0
- KEIRA_DATABASE_HOST=${KEIRA_DATABASE_HOST:-ac-mysql}
- KEIRA_DATABASE_PORT=${KEIRA_DATABASE_PORT:-3306}
- KEIRA_DATABASE_HOST=${KEIRA_DATABASE_HOST}
- KEIRA_DATABASE_PORT=${KEIRA_DATABASE_PORT}
- KEIRA_DATABASE_USER=root
- KEIRA_DATABASE_PASSWORD=${MYSQL_ROOT_PASSWORD:-azerothcore123}
- KEIRA_DATABASE_NAME=${DB_WORLD_NAME:-acore_world}
- KEIRA_DATABASE_PASSWORD=${MYSQL_ROOT_PASSWORD}
- KEIRA_DATABASE_NAME=${DB_WORLD_NAME}
ports:
- "${KEIRA3_EXTERNAL_PORT:-4201}:8080"
- "${KEIRA3_EXTERNAL_PORT}:8080"
healthcheck:
test: ["CMD", "sh", "-c", "curl -f http://localhost:8080/health >/dev/null 2>&1 || nc -z localhost 8080 || exit 1"]
interval: 30s
@@ -687,14 +703,14 @@ services:
volumes:
ac-client-data:
name: ${CLIENT_DATA_VOLUME:-ac-client-data}
name: ${CLIENT_DATA_VOLUME}
driver: local
networks:
azerothcore:
name: ${NETWORK_NAME:-azerothcore}
name: ${NETWORK_NAME}
driver: bridge
ipam:
config:
- subnet: ${NETWORK_SUBNET:-172.20.0.0/16}
gateway: ${NETWORK_GATEWAY:-172.20.0.1}
- subnet: ${NETWORK_SUBNET}
gateway: ${NETWORK_GATEWAY}

110
setup.sh
View File

@@ -58,12 +58,14 @@ readonly DEFAULT_CUSTOM_UID="1000"
readonly DEFAULT_CUSTOM_GID="1000"
# Static values
readonly DEFAULT_LOCAL_ADDRESS="127.0.0.1"
readonly DEFAULT_LOCAL_ADDRESS="$(get_template_value "SERVER_ADDRESS")"
readonly DEFAULT_FALLBACK_LAN_IP="192.168.1.100"
readonly DEFAULT_DOMAIN_PLACEHOLDER="your-domain.com"
readonly DEFAULT_BACKUP_DAYS="3"
readonly DEFAULT_BACKUP_HOURS="6"
readonly DEFAULT_BACKUP_TIME="09"
readonly DEFAULT_BACKUP_DAYS="$(get_template_value "BACKUP_RETENTION_DAYS")"
readonly DEFAULT_BACKUP_HOURS="$(get_template_value "BACKUP_RETENTION_HOURS")"
readonly DEFAULT_BACKUP_TIME="$(get_template_value "BACKUP_DAILY_TIME")"
readonly DEFAULT_BACKUP_HEALTHCHECK_MAX_MINUTES="$(get_template_value "BACKUP_HEALTHCHECK_MAX_MINUTES")"
readonly DEFAULT_BACKUP_HEALTHCHECK_GRACE_SECONDS="$(get_template_value "BACKUP_HEALTHCHECK_GRACE_SECONDS")"
readonly DEFAULT_NFS_STORAGE="/nfs/azerothcore"
readonly DEFAULT_MOUNT_STORAGE="/mnt/azerothcore-data"
@@ -78,6 +80,8 @@ readonly DEFAULT_WORLD_IMAGE_PLAYERBOTS="$(get_template_value "AC_WORLDSERVER_IM
readonly DEFAULT_CLIENT_DATA_IMAGE_PLAYERBOTS="$(get_template_value "AC_CLIENT_DATA_IMAGE_PLAYERBOTS")"
readonly DEFAULT_AUTH_IMAGE_MODULES="$(get_template_value "AC_AUTHSERVER_IMAGE_MODULES")"
readonly DEFAULT_WORLD_IMAGE_MODULES="$(get_template_value "AC_WORLDSERVER_IMAGE_MODULES")"
readonly DEFAULT_ALPINE_GIT_IMAGE="$(get_template_value "ALPINE_GIT_IMAGE")"
readonly DEFAULT_ALPINE_IMAGE="$(get_template_value "ALPINE_IMAGE")"
# Database names
readonly DEFAULT_DB_AUTH_NAME="$(get_template_value "DB_AUTH_NAME")"
@@ -87,6 +91,11 @@ readonly DEFAULT_DB_PLAYERBOTS_NAME="$(get_template_value "DB_PLAYERBOTS_NAME")"
# Container names
readonly DEFAULT_CONTAINER_MYSQL="$(get_template_value "CONTAINER_MYSQL")"
readonly DEFAULT_CONTAINER_DB_IMPORT="$(get_template_value "CONTAINER_DB_IMPORT")"
readonly DEFAULT_CONTAINER_DB_INIT="$(get_template_value "CONTAINER_DB_INIT")"
readonly DEFAULT_CONTAINER_BACKUP="$(get_template_value "CONTAINER_BACKUP")"
readonly DEFAULT_CONTAINER_MODULES="$(get_template_value "CONTAINER_MODULES")"
readonly DEFAULT_CONTAINER_POST_INSTALL="$(get_template_value "CONTAINER_POST_INSTALL")"
readonly DEFAULT_COMPOSE_PROJECT_NAME="$(get_template_value "COMPOSE_PROJECT_NAME")"
readonly DEFAULT_CLIENT_DATA_VOLUME="$(get_template_value "CLIENT_DATA_VOLUME")"
@@ -106,6 +115,9 @@ readonly DEFAULT_MYSQL_INNODB_BUFFER_POOL_SIZE="$(get_template_value "MYSQL_INNO
readonly DEFAULT_MYSQL_INNODB_LOG_FILE_SIZE="$(get_template_value "MYSQL_INNODB_LOG_FILE_SIZE")"
readonly DEFAULT_MYSQL_INNODB_REDO_LOG_CAPACITY="$(get_template_value "MYSQL_INNODB_REDO_LOG_CAPACITY")"
readonly DEFAULT_MYSQL_RUNTIME_TMPFS_SIZE="$(get_template_value "MYSQL_RUNTIME_TMPFS_SIZE")"
readonly DEFAULT_MYSQL_HOST="$(get_template_value "MYSQL_HOST")"
readonly DEFAULT_DB_WAIT_RETRIES="$(get_template_value "DB_WAIT_RETRIES")"
readonly DEFAULT_DB_WAIT_SLEEP="$(get_template_value "DB_WAIT_SLEEP")"
# Paths
readonly DEFAULT_HOST_ZONEINFO_PATH="$(get_template_value "HOST_ZONEINFO_PATH")"
@@ -144,6 +156,25 @@ readonly DEFAULT_ELUNA_BYTECODE_CACHE="$(get_template_value "AC_ELUNA_BYTECODE_C
readonly DEFAULT_ELUNA_AUTO_RELOAD_INTERVAL="$(get_template_value "AC_ELUNA_AUTO_RELOAD_INTERVAL")"
readonly DEFAULT_ELUNA_REQUIRE_PATHS="$(get_template_value "AC_ELUNA_REQUIRE_PATHS")"
readonly DEFAULT_ELUNA_REQUIRE_CPATHS="$(get_template_value "AC_ELUNA_REQUIRE_CPATHS")"
readonly DEFAULT_MODULE_ELUNA="$(get_template_value "MODULE_ELUNA")"
# Health check configuration
readonly DEFAULT_MYSQL_HEALTHCHECK_INTERVAL="$(get_template_value "MYSQL_HEALTHCHECK_INTERVAL")"
readonly DEFAULT_MYSQL_HEALTHCHECK_TIMEOUT="$(get_template_value "MYSQL_HEALTHCHECK_TIMEOUT")"
readonly DEFAULT_MYSQL_HEALTHCHECK_RETRIES="$(get_template_value "MYSQL_HEALTHCHECK_RETRIES")"
readonly DEFAULT_MYSQL_HEALTHCHECK_START_PERIOD="$(get_template_value "MYSQL_HEALTHCHECK_START_PERIOD")"
readonly DEFAULT_AUTH_HEALTHCHECK_INTERVAL="$(get_template_value "AUTH_HEALTHCHECK_INTERVAL")"
readonly DEFAULT_AUTH_HEALTHCHECK_TIMEOUT="$(get_template_value "AUTH_HEALTHCHECK_TIMEOUT")"
readonly DEFAULT_AUTH_HEALTHCHECK_RETRIES="$(get_template_value "AUTH_HEALTHCHECK_RETRIES")"
readonly DEFAULT_AUTH_HEALTHCHECK_START_PERIOD="$(get_template_value "AUTH_HEALTHCHECK_START_PERIOD")"
readonly DEFAULT_WORLD_HEALTHCHECK_INTERVAL="$(get_template_value "WORLD_HEALTHCHECK_INTERVAL")"
readonly DEFAULT_WORLD_HEALTHCHECK_TIMEOUT="$(get_template_value "WORLD_HEALTHCHECK_TIMEOUT")"
readonly DEFAULT_WORLD_HEALTHCHECK_RETRIES="$(get_template_value "WORLD_HEALTHCHECK_RETRIES")"
readonly DEFAULT_WORLD_HEALTHCHECK_START_PERIOD="$(get_template_value "WORLD_HEALTHCHECK_START_PERIOD")"
readonly DEFAULT_BACKUP_HEALTHCHECK_INTERVAL="$(get_template_value "BACKUP_HEALTHCHECK_INTERVAL")"
readonly DEFAULT_BACKUP_HEALTHCHECK_TIMEOUT="$(get_template_value "BACKUP_HEALTHCHECK_TIMEOUT")"
readonly DEFAULT_BACKUP_HEALTHCHECK_RETRIES="$(get_template_value "BACKUP_HEALTHCHECK_RETRIES")"
readonly DEFAULT_BACKUP_HEALTHCHECK_START_PERIOD="$(get_template_value "BACKUP_HEALTHCHECK_START_PERIOD")"
# Route detection IP (not in template)
readonly ROUTE_DETECTION_IP="1.1.1.1"
@@ -252,6 +283,7 @@ KNOWN_MODULE_VARS=(
MODULE_AUTO_REVIVE
MODULE_GAIN_HONOR_GUARD
MODULE_ARAC
MODULE_ELUNA
MODULE_TIME_IS_TIME
MODULE_POCKET_PORTAL
MODULE_RANDOM_ENCHANTS
@@ -878,7 +910,7 @@ fi
MODULE_1V1_ARENA=0 MODULE_PHASED_DUELS=0 MODULE_BREAKING_NEWS=0 MODULE_BOSS_ANNOUNCER=0 MODULE_ACCOUNT_ACHIEVEMENTS=0 \
MODULE_AUTO_REVIVE=0 MODULE_GAIN_HONOR_GUARD=0 MODULE_TIME_IS_TIME=0 MODULE_POCKET_PORTAL=0 \
MODULE_RANDOM_ENCHANTS=0 MODULE_SOLOCRAFT=0 MODULE_PVP_TITLES=0 MODULE_NPC_BEASTMASTER=0 MODULE_NPC_ENCHANTER=0 \
MODULE_INSTANCE_RESET=0 MODULE_LEVEL_GRANT=0 MODULE_ASSISTANT=0 MODULE_REAGENT_BANK=0 MODULE_BLACK_MARKET_AUCTION_HOUSE=0 MODULE_ARAC=0 \
MODULE_INSTANCE_RESET=0 MODULE_LEVEL_GRANT=0 MODULE_ASSISTANT=0 MODULE_REAGENT_BANK=0 MODULE_BLACK_MARKET_AUCTION_HOUSE=0 MODULE_ARAC=0 MODULE_ELUNA=0 \
MODULE_CHALLENGE_MODES=0 MODULE_OLLAMA_CHAT=0 MODULE_SKELETON_MODULE=0 MODULE_BG_SLAVERYVALLEY=0 MODULE_ELUNA_TS=0 \
MODULE_PLAYER_BOT_LEVEL_BRACKETS=0 MODULE_STATBOOSTER=0 MODULE_DUNGEON_RESPAWN=0 MODULE_AZEROTHSHARD=0 MODULE_WORGOBLIN=0
local AC_AUTHSERVER_IMAGE_PLAYERBOTS_VALUE="$DEFAULT_AUTH_IMAGE_PLAYERBOTS"
@@ -1225,6 +1257,38 @@ fi
MYSQL_INNODB_REDO_LOG_CAPACITY=${MYSQL_INNODB_REDO_LOG_CAPACITY:-$DEFAULT_MYSQL_INNODB_REDO_LOG_CAPACITY}
MYSQL_RUNTIME_TMPFS_SIZE=${MYSQL_RUNTIME_TMPFS_SIZE:-$DEFAULT_MYSQL_RUNTIME_TMPFS_SIZE}
CLIENT_DATA_VOLUME=${CLIENT_DATA_VOLUME:-$DEFAULT_CLIENT_DATA_VOLUME}
BACKUP_HEALTHCHECK_MAX_MINUTES=${BACKUP_HEALTHCHECK_MAX_MINUTES:-$DEFAULT_BACKUP_HEALTHCHECK_MAX_MINUTES}
BACKUP_HEALTHCHECK_GRACE_SECONDS=${BACKUP_HEALTHCHECK_GRACE_SECONDS:-$DEFAULT_BACKUP_HEALTHCHECK_GRACE_SECONDS}
DB_WAIT_RETRIES=${DB_WAIT_RETRIES:-$DEFAULT_DB_WAIT_RETRIES}
DB_WAIT_SLEEP=${DB_WAIT_SLEEP:-$DEFAULT_DB_WAIT_SLEEP}
MYSQL_HEALTHCHECK_INTERVAL=${MYSQL_HEALTHCHECK_INTERVAL:-$DEFAULT_MYSQL_HEALTHCHECK_INTERVAL}
MYSQL_HEALTHCHECK_TIMEOUT=${MYSQL_HEALTHCHECK_TIMEOUT:-$DEFAULT_MYSQL_HEALTHCHECK_TIMEOUT}
MYSQL_HEALTHCHECK_RETRIES=${MYSQL_HEALTHCHECK_RETRIES:-$DEFAULT_MYSQL_HEALTHCHECK_RETRIES}
MYSQL_HEALTHCHECK_START_PERIOD=${MYSQL_HEALTHCHECK_START_PERIOD:-$DEFAULT_MYSQL_HEALTHCHECK_START_PERIOD}
AUTH_HEALTHCHECK_INTERVAL=${AUTH_HEALTHCHECK_INTERVAL:-$DEFAULT_AUTH_HEALTHCHECK_INTERVAL}
AUTH_HEALTHCHECK_TIMEOUT=${AUTH_HEALTHCHECK_TIMEOUT:-$DEFAULT_AUTH_HEALTHCHECK_TIMEOUT}
AUTH_HEALTHCHECK_RETRIES=${AUTH_HEALTHCHECK_RETRIES:-$DEFAULT_AUTH_HEALTHCHECK_RETRIES}
AUTH_HEALTHCHECK_START_PERIOD=${AUTH_HEALTHCHECK_START_PERIOD:-$DEFAULT_AUTH_HEALTHCHECK_START_PERIOD}
WORLD_HEALTHCHECK_INTERVAL=${WORLD_HEALTHCHECK_INTERVAL:-$DEFAULT_WORLD_HEALTHCHECK_INTERVAL}
WORLD_HEALTHCHECK_TIMEOUT=${WORLD_HEALTHCHECK_TIMEOUT:-$DEFAULT_WORLD_HEALTHCHECK_TIMEOUT}
WORLD_HEALTHCHECK_RETRIES=${WORLD_HEALTHCHECK_RETRIES:-$DEFAULT_WORLD_HEALTHCHECK_RETRIES}
WORLD_HEALTHCHECK_START_PERIOD=${WORLD_HEALTHCHECK_START_PERIOD:-$DEFAULT_WORLD_HEALTHCHECK_START_PERIOD}
BACKUP_HEALTHCHECK_INTERVAL=${BACKUP_HEALTHCHECK_INTERVAL:-$DEFAULT_BACKUP_HEALTHCHECK_INTERVAL}
BACKUP_HEALTHCHECK_TIMEOUT=${BACKUP_HEALTHCHECK_TIMEOUT:-$DEFAULT_BACKUP_HEALTHCHECK_TIMEOUT}
BACKUP_HEALTHCHECK_RETRIES=${BACKUP_HEALTHCHECK_RETRIES:-$DEFAULT_BACKUP_HEALTHCHECK_RETRIES}
BACKUP_HEALTHCHECK_START_PERIOD=${BACKUP_HEALTHCHECK_START_PERIOD:-$DEFAULT_BACKUP_HEALTHCHECK_START_PERIOD}
MODULE_ELUNA=${MODULE_ELUNA:-$DEFAULT_MODULE_ELUNA}
local HOST_BACKUP_PATH_VALUE_INPUT="${HOST_BACKUP_PATH:-}"
local storage_base="${STORAGE_PATH%/}"
[ -z "$storage_base" ] && storage_base="/"
local HOST_BACKUP_PATH_VALUE
if [ -n "$HOST_BACKUP_PATH_VALUE_INPUT" ]; then
HOST_BACKUP_PATH_VALUE="$HOST_BACKUP_PATH_VALUE_INPUT"
elif [ "$storage_base" = "/" ]; then
HOST_BACKUP_PATH_VALUE="/backups"
else
HOST_BACKUP_PATH_VALUE="${storage_base}/backups"
fi
cat > "$ENV_OUT" <<EOF
# Generated by ac-compose/setup.sh
@@ -1233,6 +1297,7 @@ COMPOSE_PROJECT_NAME=$DEFAULT_COMPOSE_PROJECT_NAME
STORAGE_PATH=$STORAGE_PATH
STORAGE_PATH_LOCAL=$LOCAL_STORAGE_ROOT
HOST_BACKUP_PATH=$HOST_BACKUP_PATH_VALUE
HOST_ZONEINFO_PATH=${HOST_ZONEINFO_PATH:-$DEFAULT_HOST_ZONEINFO_PATH}
TZ=$DEFAULT_TZ
@@ -1251,6 +1316,9 @@ MYSQL_INNODB_BUFFER_POOL_SIZE=$DEFAULT_MYSQL_INNODB_BUFFER_POOL_SIZE
MYSQL_INNODB_LOG_FILE_SIZE=$DEFAULT_MYSQL_INNODB_LOG_FILE_SIZE
MYSQL_INNODB_REDO_LOG_CAPACITY=${MYSQL_INNODB_REDO_LOG_CAPACITY:-$DEFAULT_MYSQL_INNODB_REDO_LOG_CAPACITY}
MYSQL_RUNTIME_TMPFS_SIZE=${MYSQL_RUNTIME_TMPFS_SIZE:-$DEFAULT_MYSQL_RUNTIME_TMPFS_SIZE}
MYSQL_HOST=$DEFAULT_MYSQL_HOST
DB_WAIT_RETRIES=$DB_WAIT_RETRIES
DB_WAIT_SLEEP=$DB_WAIT_SLEEP
DB_AUTH_NAME=$DEFAULT_DB_AUTH_NAME
DB_WORLD_NAME=$DEFAULT_DB_WORLD_NAME
DB_CHARACTERS_NAME=$DEFAULT_DB_CHARACTERS_NAME
@@ -1271,6 +1339,13 @@ AC_CLIENT_DATA_IMAGE_PLAYERBOTS=$DEFAULT_CLIENT_DATA_IMAGE_PLAYERBOTS
CLIENT_DATA_CACHE_PATH=$CLIENT_DATA_CACHE_PATH_VALUE
CLIENT_DATA_VOLUME=${CLIENT_DATA_VOLUME:-$DEFAULT_CLIENT_DATA_VOLUME}
# Containers
CONTAINER_DB_IMPORT=$DEFAULT_CONTAINER_DB_IMPORT
CONTAINER_DB_INIT=$DEFAULT_CONTAINER_DB_INIT
CONTAINER_BACKUP=$DEFAULT_CONTAINER_BACKUP
CONTAINER_MODULES=$DEFAULT_CONTAINER_MODULES
CONTAINER_POST_INSTALL=$DEFAULT_CONTAINER_POST_INSTALL
# Ports
AUTH_EXTERNAL_PORT=$AUTH_EXTERNAL_PORT
AUTH_PORT=$DEFAULT_AUTH_INTERNAL_PORT
@@ -1287,6 +1362,12 @@ REALM_PORT=$REALM_PORT
BACKUP_RETENTION_DAYS=$BACKUP_RETENTION_DAYS
BACKUP_RETENTION_HOURS=$BACKUP_RETENTION_HOURS
BACKUP_DAILY_TIME=$BACKUP_DAILY_TIME
BACKUP_HEALTHCHECK_MAX_MINUTES=$BACKUP_HEALTHCHECK_MAX_MINUTES
BACKUP_HEALTHCHECK_GRACE_SECONDS=$BACKUP_HEALTHCHECK_GRACE_SECONDS
BACKUP_HEALTHCHECK_INTERVAL=$BACKUP_HEALTHCHECK_INTERVAL
BACKUP_HEALTHCHECK_TIMEOUT=$BACKUP_HEALTHCHECK_TIMEOUT
BACKUP_HEALTHCHECK_RETRIES=$BACKUP_HEALTHCHECK_RETRIES
BACKUP_HEALTHCHECK_START_PERIOD=$BACKUP_HEALTHCHECK_START_PERIOD
# Container user
CONTAINER_USER=$CONTAINER_USER
@@ -1311,6 +1392,7 @@ MODULE_ACCOUNT_ACHIEVEMENTS=$MODULE_ACCOUNT_ACHIEVEMENTS
MODULE_AUTO_REVIVE=$MODULE_AUTO_REVIVE
MODULE_GAIN_HONOR_GUARD=$MODULE_GAIN_HONOR_GUARD
MODULE_ARAC=$MODULE_ARAC
MODULE_ELUNA=$MODULE_ELUNA
MODULE_TIME_IS_TIME=$MODULE_TIME_IS_TIME
MODULE_POCKET_PORTAL=$MODULE_POCKET_PORTAL
MODULE_RANDOM_ENCHANTS=$MODULE_RANDOM_ENCHANTS
@@ -1369,10 +1451,28 @@ KEIRA3_EXTERNAL_PORT=$DEFAULT_KEIRA3_EXTERNAL_PORT
KEIRA_DATABASE_HOST=$DEFAULT_CONTAINER_MYSQL
KEIRA_DATABASE_PORT=$DEFAULT_MYSQL_INTERNAL_PORT
# Health checks
MYSQL_HEALTHCHECK_INTERVAL=$MYSQL_HEALTHCHECK_INTERVAL
MYSQL_HEALTHCHECK_TIMEOUT=$MYSQL_HEALTHCHECK_TIMEOUT
MYSQL_HEALTHCHECK_RETRIES=$MYSQL_HEALTHCHECK_RETRIES
MYSQL_HEALTHCHECK_START_PERIOD=$MYSQL_HEALTHCHECK_START_PERIOD
AUTH_HEALTHCHECK_INTERVAL=$AUTH_HEALTHCHECK_INTERVAL
AUTH_HEALTHCHECK_TIMEOUT=$AUTH_HEALTHCHECK_TIMEOUT
AUTH_HEALTHCHECK_RETRIES=$AUTH_HEALTHCHECK_RETRIES
AUTH_HEALTHCHECK_START_PERIOD=$AUTH_HEALTHCHECK_START_PERIOD
WORLD_HEALTHCHECK_INTERVAL=$WORLD_HEALTHCHECK_INTERVAL
WORLD_HEALTHCHECK_TIMEOUT=$WORLD_HEALTHCHECK_TIMEOUT
WORLD_HEALTHCHECK_RETRIES=$WORLD_HEALTHCHECK_RETRIES
WORLD_HEALTHCHECK_START_PERIOD=$WORLD_HEALTHCHECK_START_PERIOD
# Networking
NETWORK_NAME=$DEFAULT_NETWORK_NAME
NETWORK_SUBNET=$DEFAULT_NETWORK_SUBNET
NETWORK_GATEWAY=$DEFAULT_NETWORK_GATEWAY
# Helper images
ALPINE_GIT_IMAGE=$DEFAULT_ALPINE_GIT_IMAGE
ALPINE_IMAGE=$DEFAULT_ALPINE_IMAGE
EOF
local storage_abs_path="$STORAGE_PATH"

View File

@@ -40,25 +40,22 @@ command -v docker >/dev/null 2>&1 || { echo "Docker CLI not found" >&2; exit 1;
docker info >/dev/null 2>&1 || { echo "Docker daemon unavailable" >&2; exit 1; }
read_env(){
local key="$1" default="$2" value
local key="$1" value=""
if [ -f "$ENV_FILE" ]; then
value="$(grep -E "^${key}=" "$ENV_FILE" 2>/dev/null | tail -n1 | cut -d'=' -f2- | tr -d '\r')"
fi
if [ -z "$value" ]; then
value="$default"
fi
echo "$value"
}
PROJECT_NAME="$(read_env COMPOSE_PROJECT_NAME ac-compose)"
NETWORK_NAME="$(read_env NETWORK_NAME azerothcore)"
AUTH_PORT="$(read_env AUTH_EXTERNAL_PORT 3784)"
WORLD_PORT="$(read_env WORLD_EXTERNAL_PORT 8215)"
SOAP_PORT="$(read_env SOAP_EXTERNAL_PORT 7778)"
MYSQL_PORT="$(read_env MYSQL_EXTERNAL_PORT 64306)"
PMA_PORT="$(read_env PMA_EXTERNAL_PORT 8081)"
KEIRA_PORT="$(read_env KEIRA3_EXTERNAL_PORT 4201)"
ELUNA_ENABLED="$(read_env AC_ELUNA_ENABLED 1)"
PROJECT_NAME="$(read_env COMPOSE_PROJECT_NAME)"
NETWORK_NAME="$(read_env NETWORK_NAME)"
AUTH_PORT="$(read_env AUTH_EXTERNAL_PORT)"
WORLD_PORT="$(read_env WORLD_EXTERNAL_PORT)"
SOAP_PORT="$(read_env SOAP_EXTERNAL_PORT)"
MYSQL_PORT="$(read_env MYSQL_EXTERNAL_PORT)"
PMA_PORT="$(read_env PMA_EXTERNAL_PORT)"
KEIRA_PORT="$(read_env KEIRA3_EXTERNAL_PORT)"
ELUNA_ENABLED="$(read_env AC_ELUNA_ENABLED)"
container_exists(){
docker ps -a --format '{{.Names}}' | grep -qx "$1"
@@ -68,6 +65,15 @@ container_running(){
docker ps --format '{{.Names}}' | grep -qx "$1"
}
is_one_shot(){
case "$1" in
ac-db-import|ac-db-init|ac-modules|ac-post-install|ac-client-data|ac-client-data-playerbots)
return 0;;
*)
return 1;;
esac
}
format_state(){
local status="$1" health="$2" started="$3" exit_code="$4"
local started_fmt
@@ -144,7 +150,17 @@ print_service(){
exit_code="$(docker inspect --format='{{.State.ExitCode}}' "$container" 2>/dev/null || echo "?")"
image="$(docker inspect --format='{{.Config.Image}}' "$container" 2>/dev/null || echo "-")"
local state_info colour text
state_info="$(format_state "$status" "$health" "$started" "$exit_code")"
if [ "$status" = "exited" ] && is_one_shot "$container"; then
local finished
finished="$(docker inspect --format='{{.State.FinishedAt}}' "$container" 2>/dev/null | cut -c12-19 2>/dev/null || echo "--:--:--")"
if [ "$exit_code" = "0" ]; then
state_info="${GREEN}|○ completed (at $finished)"
else
state_info="${RED}|○ failed (code $exit_code)"
fi
else
state_info="$(format_state "$status" "$health" "$started" "$exit_code")"
fi
colour="${state_info%%|*}"
text="${state_info#*|}"
printf "%-20s %-15s %b%-30s%b %s\n" "$label" "$container" "$colour" "$text" "$NC" "$(short_image "$image")"
@@ -184,7 +200,7 @@ module_summary(){
if container_running "ac-worldserver"; then
local playerbot="disabled"
local module_playerbots
module_playerbots="$(read_env MODULE_PLAYERBOTS 0)"
module_playerbots="$(read_env MODULE_PLAYERBOTS)"
if [ "$module_playerbots" = "1" ]; then
playerbot="enabled"
if docker inspect --format='{{.State.Status}}' ac-worldserver 2>/dev/null | grep -q "running"; then
@@ -204,9 +220,14 @@ user_stats(){
fi
local mysql_pw db_auth db_characters
mysql_pw="$(read_env MYSQL_ROOT_PASSWORD azerothcore123)"
db_auth="$(read_env DB_AUTH_NAME acore_auth)"
db_characters="$(read_env DB_CHARACTERS_NAME acore_characters)"
mysql_pw="$(read_env MYSQL_ROOT_PASSWORD)"
db_auth="$(read_env DB_AUTH_NAME)"
db_characters="$(read_env DB_CHARACTERS_NAME)"
if [ -z "$mysql_pw" ] || [ -z "$db_auth" ] || [ -z "$db_characters" ]; then
printf "USERS: %sMissing MySQL configuration in .env%s\n" "$YELLOW" "$NC"
return
fi
local exec_mysql
exec_mysql(){
@@ -239,6 +260,10 @@ ports_summary(){
for i in "${!names[@]}"; do
local svc="${names[$i]}"
local port="${ports[$i]}"
if [ -z "$port" ]; then
printf " %-10s %-6s %b○%b not set\n" "$svc" "--" "$YELLOW" "$NC"
continue
fi
if timeout 1 bash -c "</dev/tcp/127.0.0.1/${port}" >/dev/null 2>&1; then
printf " %-10s %-6s %b●%b reachable\n" "$svc" "$port" "$GREEN" "$NC"
else
@@ -248,6 +273,10 @@ ports_summary(){
}
network_summary(){
if [ -z "$NETWORK_NAME" ]; then
echo "DOCKER NET: not set"
return
fi
if docker network ls --format '{{.Name}}' | grep -qx "$NETWORK_NAME"; then
echo "DOCKER NET: $NETWORK_NAME"
else