automation tweaks

This commit is contained in:
uprightbass360
2025-10-26 19:12:56 -04:00
parent f46b88bd93
commit 39ac59d641
6 changed files with 250 additions and 263 deletions

View File

@@ -2,7 +2,9 @@
# Docker Compose will auto-load .env in the same folder as docker-compose.yml. # Docker Compose will auto-load .env in the same folder as docker-compose.yml.
# Template for acore-compose profiles-based compose # Template for acore-compose profiles-based compose
# =====================
# Project name # Project name
# =====================
COMPOSE_PROJECT_NAME=acore-compose COMPOSE_PROJECT_NAME=acore-compose
# ===================== # =====================
@@ -10,10 +12,78 @@ COMPOSE_PROJECT_NAME=acore-compose
# ===================== # =====================
STORAGE_PATH=./storage STORAGE_PATH=./storage
STORAGE_PATH_LOCAL=./local-storage STORAGE_PATH_LOCAL=./local-storage
HOST_BACKUP_PATH=./storage/backups BACKUP_PATH=${STORAGE_PATH}/backups
HOST_ZONEINFO_PATH=/usr/share/zoneinfo HOST_ZONEINFO_PATH=/usr/share/zoneinfo
TZ=UTC TZ=UTC
# =====================
# Permissions & IDs
# =====================
CONTAINER_USER=0:0
PERMISSION_LOCAL_USER=0:0
PERMISSION_NFS_USER=1001:1000
DEFAULT_CUSTOM_UID=1000
DEFAULT_CUSTOM_GID=1000
# =====================
# Shared Storage Presets
# =====================
NFS_STORAGE_PATH=/nfs/azerothcore
MOUNT_STORAGE_PATH=/mnt/azerothcore-data
# =====================
# 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
# =====================
# Images
# =====================
AC_DB_IMPORT_IMAGE=acore/ac-wotlk-db-import:14.0.0-dev
# Services (Standard)
AC_AUTHSERVER_IMAGE=acore/ac-wotlk-authserver:14.0.0-dev
AC_WORLDSERVER_IMAGE=acore/ac-wotlk-worldserver:14.0.0-dev
# Services (Playerbots)
AC_AUTHSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot
AC_WORLDSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot
# Services (Module Build Tags)
# Images used during module compilation and tagging
AC_AUTHSERVER_IMAGE_MODULES=uprightbass360/azerothcore-wotlk-playerbots:authserver-modules-latest
AC_WORLDSERVER_IMAGE_MODULES=uprightbass360/azerothcore-wotlk-playerbots:worldserver-modules-latest
# Client Data
AC_CLIENT_DATA_IMAGE=acore/ac-wotlk-client-data:14.0.0-dev
AC_CLIENT_DATA_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:client-data-Playerbot
# Helper images
ALPINE_GIT_IMAGE=alpine/git:latest
ALPINE_IMAGE=alpine:latest
# =====================
# Ports
# =====================
AUTH_EXTERNAL_PORT=3784
AUTH_PORT=3724
WORLD_EXTERNAL_PORT=8215
WORLD_PORT=8085
SOAP_EXTERNAL_PORT=7778
SOAP_PORT=7878
# =====================
# Networking
# =====================
NETWORK_NAME=azerothcore
NETWORK_SUBNET=172.20.0.0/16
NETWORK_GATEWAY=172.20.0.1
# =====================
# Server address / realm
# =====================
SERVER_ADDRESS=127.0.0.1
REALM_PORT=8215
# ===================== # =====================
# MySQL / Database Layer # MySQL / Database Layer
# ===================== # =====================
@@ -35,66 +105,13 @@ MYSQL_RUNTIME_TMPFS_SIZE=8G
DB_WAIT_RETRIES=60 DB_WAIT_RETRIES=60
DB_WAIT_SLEEP=10 DB_WAIT_SLEEP=10
# =====================
# DB names # DB names
# =====================
DB_AUTH_NAME=acore_auth DB_AUTH_NAME=acore_auth
DB_WORLD_NAME=acore_world DB_WORLD_NAME=acore_world
DB_CHARACTERS_NAME=acore_characters DB_CHARACTERS_NAME=acore_characters
DB_PLAYERBOTS_NAME=acore_playerbots 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
# =====================
# Services (Standard)
# =====================
AC_AUTHSERVER_IMAGE=acore/ac-wotlk-authserver:14.0.0-dev
AC_WORLDSERVER_IMAGE=acore/ac-wotlk-worldserver:14.0.0-dev
# =====================
# Services (Playerbots)
# =====================
AC_AUTHSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot
AC_WORLDSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot
# =====================
# Services (Module Build Tags)
# =====================
# Images used during module compilation and tagging
AC_AUTHSERVER_IMAGE_MODULES=uprightbass360/azerothcore-wotlk-playerbots:authserver-modules-latest
AC_WORLDSERVER_IMAGE_MODULES=uprightbass360/azerothcore-wotlk-playerbots:worldserver-modules-latest
# =====================
# Client Data
# =====================
AC_CLIENT_DATA_IMAGE=acore/ac-wotlk-client-data:14.0.0-dev
AC_CLIENT_DATA_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:client-data-Playerbot
CLIENT_DATA_VERSION=v17
CLIENT_DATA_CACHE_PATH=${STORAGE_PATH_LOCAL:-./local-storage}/client-data-cache
CLIENT_DATA_VOLUME=ac-client-data
# =====================
# Ports
# =====================
AUTH_EXTERNAL_PORT=3784
AUTH_PORT=3724
WORLD_EXTERNAL_PORT=8215
WORLD_PORT=8085
SOAP_EXTERNAL_PORT=7778
SOAP_PORT=7878
# =====================
# Server address / realm
# =====================
SERVER_ADDRESS=127.0.0.1
REALM_PORT=8215
# ===================== # =====================
# Backups # Backups
# ===================== # =====================
@@ -114,6 +131,13 @@ BACKUP_HEALTHCHECK_START_PERIOD=120s
PLAYERBOT_ENABLED=0 PLAYERBOT_ENABLED=0
PLAYERBOT_MAX_BOTS=40 PLAYERBOT_MAX_BOTS=40
# =====================
# Client Data Settings
# =====================
CLIENT_DATA_VERSION=v17
CLIENT_DATA_CACHE_PATH=${STORAGE_PATH_LOCAL}/client-data-cache
CLIENT_DATA_VOLUME=ac-client-data
# ===================== # =====================
# Module toggles (0/1) # Module toggles (0/1)
# ===================== # =====================
@@ -178,7 +202,7 @@ MODULE_BLACK_MARKET_AUCTION_HOUSE=0
# ===================== # =====================
AUTO_REBUILD_ON_DEPLOY=0 AUTO_REBUILD_ON_DEPLOY=0
# Default AzerothCore source checkout used for module rebuilds # Default AzerothCore source checkout used for module rebuilds
MODULES_REBUILD_SOURCE_PATH=${STORAGE_PATH_LOCAL:-./local-storage}/source/azerothcore MODULES_REBUILD_SOURCE_PATH=${STORAGE_PATH_LOCAL}/source/azerothcore
# ===================== # =====================
# Eluna runtime (worldserver.conf overrides) # Eluna runtime (worldserver.conf overrides)
@@ -222,25 +246,6 @@ PMA_ABSOLUTE_URI=
PMA_UPLOAD_LIMIT=300M PMA_UPLOAD_LIMIT=300M
PMA_MEMORY_LIMIT=512M PMA_MEMORY_LIMIT=512M
PMA_MAX_EXECUTION_TIME=600 PMA_MAX_EXECUTION_TIME=600
KEIRA3_EXTERNAL_PORT=4201 KEIRA3_EXTERNAL_PORT=4201
KEIRA_DATABASE_HOST=ac-mysql KEIRA_DATABASE_HOST=ac-mysql
KEIRA_DATABASE_PORT=3306 KEIRA_DATABASE_PORT=3306
# =====================
# Networking
# =====================
NETWORK_NAME=azerothcore
NETWORK_SUBNET=172.20.0.0/16
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

@@ -2,9 +2,9 @@
# Export auth and character databases to ExportBackup_<timestamp>/ # Export auth and character databases to ExportBackup_<timestamp>/
set -euo pipefail set -euo pipefail
MYSQL_PW="${MYSQL_ROOT_PASSWORD:-azerothcore123}" MYSQL_PW="${MYSQL_ROOT_PASSWORD}"
DB_AUTH="${DB_AUTH_NAME:-acore_auth}" DB_AUTH="${DB_AUTH_NAME}"
DB_CHAR="${DB_CHARACTERS_NAME:-acore_characters}" DB_CHAR="${DB_CHARACTERS_NAME}"
usage(){ usage(){
cat <<EOF cat <<EOF

View File

@@ -3,10 +3,10 @@
set -euo pipefail set -euo pipefail
BACKUP_DIR="${1:-ImportBackup}" BACKUP_DIR="${1:-ImportBackup}"
MYSQL_PW="${MYSQL_ROOT_PASSWORD:-azerothcore123}" MYSQL_PW="${MYSQL_ROOT_PASSWORD}"
DB_AUTH="${DB_AUTH_NAME:-acore_auth}" DB_AUTH="${DB_AUTH_NAME}"
DB_CHAR="${DB_CHARACTERS_NAME:-acore_characters}" DB_CHAR="${DB_CHARACTERS_NAME}"
DB_WORLD="${DB_WORLD_NAME:-acore_world}" DB_WORLD="${DB_WORLD_NAME}"
COLOR_RED='\033[0;31m' COLOR_RED='\033[0;31m'
COLOR_GREEN='\033[0;32m' COLOR_GREEN='\033[0;32m'

View File

@@ -21,7 +21,7 @@ services:
- "${MYSQL_EXTERNAL_PORT}:${MYSQL_PORT}" - "${MYSQL_EXTERNAL_PORT}:${MYSQL_PORT}"
volumes: volumes:
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent - ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH}:/backups - ${BACKUP_PATH}:/backups
- ${HOST_ZONEINFO_PATH}:/usr/share/zoneinfo:ro - ${HOST_ZONEINFO_PATH}:/usr/share/zoneinfo:ro
tmpfs: tmpfs:
- /var/lib/mysql-runtime:size=${MYSQL_RUNTIME_TMPFS_SIZE} - /var/lib/mysql-runtime:size=${MYSQL_RUNTIME_TMPFS_SIZE}
@@ -99,7 +99,7 @@ services:
condition: service_completed_successfully condition: service_completed_successfully
volumes: volumes:
- ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent - ${STORAGE_PATH}/mysql-data:/var/lib/mysql-persistent
- ${HOST_BACKUP_PATH}:/backups - ${BACKUP_PATH}:/backups
networks: networks:
- azerothcore - azerothcore
environment: environment:
@@ -154,7 +154,7 @@ services:
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME} DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME}
TZ: ${TZ} TZ: ${TZ}
volumes: volumes:
- ${HOST_BACKUP_PATH}:/backups - ${BACKUP_PATH}:/backups
- ./scripts:/tmp/scripts:ro - ./scripts:/tmp/scripts:ro
working_dir: /tmp working_dir: /tmp
command: command:
@@ -575,6 +575,16 @@ services:
- MODULE_ASSISTANT=${MODULE_ASSISTANT} - MODULE_ASSISTANT=${MODULE_ASSISTANT}
- MODULE_REAGENT_BANK=${MODULE_REAGENT_BANK} - MODULE_REAGENT_BANK=${MODULE_REAGENT_BANK}
- MODULE_BLACK_MARKET_AUCTION_HOUSE=${MODULE_BLACK_MARKET_AUCTION_HOUSE} - MODULE_BLACK_MARKET_AUCTION_HOUSE=${MODULE_BLACK_MARKET_AUCTION_HOUSE}
- MODULE_CHALLENGE_MODES=${MODULE_CHALLENGE_MODES}
- MODULE_OLLAMA_CHAT=${MODULE_OLLAMA_CHAT}
- MODULE_PLAYER_BOT_LEVEL_BRACKETS=${MODULE_PLAYER_BOT_LEVEL_BRACKETS}
- MODULE_STATBOOSTER=${MODULE_STATBOOSTER}
- MODULE_DUNGEON_RESPAWN=${MODULE_DUNGEON_RESPAWN}
- MODULE_SKELETON_MODULE=${MODULE_SKELETON_MODULE}
- MODULE_BG_SLAVERYVALLEY=${MODULE_BG_SLAVERYVALLEY}
- MODULE_AZEROTHSHARD=${MODULE_AZEROTHSHARD}
- MODULE_WORGOBLIN=${MODULE_WORGOBLIN}
- MODULE_ELUNA_TS=${MODULE_ELUNA_TS}
- CONTAINER_MYSQL=${CONTAINER_MYSQL} - CONTAINER_MYSQL=${CONTAINER_MYSQL}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- DB_AUTH_NAME=${DB_AUTH_NAME} - DB_AUTH_NAME=${DB_AUTH_NAME}

297
setup.sh
View File

@@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
set -e set -e
clear
# ============================================== # ==============================================
# ac-compose - Interactive .env generator # ac-compose - Interactive .env generator
@@ -42,139 +43,134 @@ get_template_value() {
echo "$value" echo "$value"
} }
# Load constants from .env.template (required) declare -A TEMPLATE_VALUE_MAP=(
readonly DEFAULT_MYSQL_PASSWORD="$(get_template_value "MYSQL_ROOT_PASSWORD")" [DEFAULT_MYSQL_PASSWORD]=MYSQL_ROOT_PASSWORD
readonly DEFAULT_REALM_PORT="$(get_template_value "WORLD_EXTERNAL_PORT")" [DEFAULT_REALM_PORT]=WORLD_EXTERNAL_PORT
readonly DEFAULT_AUTH_PORT="$(get_template_value "AUTH_EXTERNAL_PORT")" [DEFAULT_AUTH_PORT]=AUTH_EXTERNAL_PORT
readonly DEFAULT_SOAP_PORT="$(get_template_value "SOAP_EXTERNAL_PORT")" [DEFAULT_SOAP_PORT]=SOAP_EXTERNAL_PORT
readonly DEFAULT_MYSQL_PORT="$(get_template_value "MYSQL_EXTERNAL_PORT")" [DEFAULT_MYSQL_PORT]=MYSQL_EXTERNAL_PORT
readonly DEFAULT_PLAYERBOT_MAX="$(get_template_value "PLAYERBOT_MAX_BOTS")" [DEFAULT_PLAYERBOT_MAX]=PLAYERBOT_MAX_BOTS
readonly DEFAULT_LOCAL_STORAGE="$(get_template_value "STORAGE_PATH")" [DEFAULT_LOCAL_STORAGE]=STORAGE_PATH
[DEFAULT_BACKUP_PATH]=BACKUP_PATH
[PERMISSION_LOCAL_USER]=PERMISSION_LOCAL_USER
[PERMISSION_NFS_USER]=PERMISSION_NFS_USER
[DEFAULT_CUSTOM_UID]=DEFAULT_CUSTOM_UID
[DEFAULT_CUSTOM_GID]=DEFAULT_CUSTOM_GID
[DEFAULT_LOCAL_ADDRESS]=SERVER_ADDRESS
[DEFAULT_BACKUP_DAYS]=BACKUP_RETENTION_DAYS
[DEFAULT_BACKUP_HOURS]=BACKUP_RETENTION_HOURS
[DEFAULT_BACKUP_TIME]=BACKUP_DAILY_TIME
[DEFAULT_BACKUP_HEALTHCHECK_MAX_MINUTES]=BACKUP_HEALTHCHECK_MAX_MINUTES
[DEFAULT_BACKUP_HEALTHCHECK_GRACE_SECONDS]=BACKUP_HEALTHCHECK_GRACE_SECONDS
[DEFAULT_NFS_STORAGE]=NFS_STORAGE_PATH
[DEFAULT_MOUNT_STORAGE]=MOUNT_STORAGE_PATH
[DEFAULT_MYSQL_IMAGE]=MYSQL_IMAGE
[DEFAULT_AC_DB_IMPORT_IMAGE]=AC_DB_IMPORT_IMAGE
[DEFAULT_AC_AUTHSERVER_IMAGE]=AC_AUTHSERVER_IMAGE
[DEFAULT_AC_WORLDSERVER_IMAGE]=AC_WORLDSERVER_IMAGE
[DEFAULT_AC_CLIENT_DATA_IMAGE]=AC_CLIENT_DATA_IMAGE
[DEFAULT_AUTH_IMAGE_PLAYERBOTS]=AC_AUTHSERVER_IMAGE_PLAYERBOTS
[DEFAULT_WORLD_IMAGE_PLAYERBOTS]=AC_WORLDSERVER_IMAGE_PLAYERBOTS
[DEFAULT_CLIENT_DATA_IMAGE_PLAYERBOTS]=AC_CLIENT_DATA_IMAGE_PLAYERBOTS
[DEFAULT_AUTH_IMAGE_MODULES]=AC_AUTHSERVER_IMAGE_MODULES
[DEFAULT_WORLD_IMAGE_MODULES]=AC_WORLDSERVER_IMAGE_MODULES
[DEFAULT_ALPINE_GIT_IMAGE]=ALPINE_GIT_IMAGE
[DEFAULT_ALPINE_IMAGE]=ALPINE_IMAGE
[DEFAULT_DB_AUTH_NAME]=DB_AUTH_NAME
[DEFAULT_DB_WORLD_NAME]=DB_WORLD_NAME
[DEFAULT_DB_CHARACTERS_NAME]=DB_CHARACTERS_NAME
[DEFAULT_DB_PLAYERBOTS_NAME]=DB_PLAYERBOTS_NAME
[DEFAULT_CONTAINER_MYSQL]=CONTAINER_MYSQL
[DEFAULT_CONTAINER_DB_IMPORT]=CONTAINER_DB_IMPORT
[DEFAULT_CONTAINER_DB_INIT]=CONTAINER_DB_INIT
[DEFAULT_CONTAINER_BACKUP]=CONTAINER_BACKUP
[DEFAULT_CONTAINER_MODULES]=CONTAINER_MODULES
[DEFAULT_CONTAINER_POST_INSTALL]=CONTAINER_POST_INSTALL
[DEFAULT_COMPOSE_PROJECT_NAME]=COMPOSE_PROJECT_NAME
[DEFAULT_CLIENT_DATA_VOLUME]=CLIENT_DATA_VOLUME
[DEFAULT_CLIENT_DATA_CACHE_PATH]=CLIENT_DATA_CACHE_PATH
[DEFAULT_CLIENT_DATA_VERSION]=CLIENT_DATA_VERSION
[DEFAULT_NETWORK_NAME]=NETWORK_NAME
[DEFAULT_NETWORK_SUBNET]=NETWORK_SUBNET
[DEFAULT_NETWORK_GATEWAY]=NETWORK_GATEWAY
[DEFAULT_MYSQL_CHARACTER_SET]=MYSQL_CHARACTER_SET
[DEFAULT_MYSQL_COLLATION]=MYSQL_COLLATION
[DEFAULT_MYSQL_MAX_CONNECTIONS]=MYSQL_MAX_CONNECTIONS
[DEFAULT_MYSQL_INNODB_BUFFER_POOL_SIZE]=MYSQL_INNODB_BUFFER_POOL_SIZE
[DEFAULT_MYSQL_INNODB_LOG_FILE_SIZE]=MYSQL_INNODB_LOG_FILE_SIZE
[DEFAULT_MYSQL_INNODB_REDO_LOG_CAPACITY]=MYSQL_INNODB_REDO_LOG_CAPACITY
[DEFAULT_MYSQL_RUNTIME_TMPFS_SIZE]=MYSQL_RUNTIME_TMPFS_SIZE
[DEFAULT_MYSQL_HOST]=MYSQL_HOST
[DEFAULT_DB_WAIT_RETRIES]=DB_WAIT_RETRIES
[DEFAULT_DB_WAIT_SLEEP]=DB_WAIT_SLEEP
[DEFAULT_HOST_ZONEINFO_PATH]=HOST_ZONEINFO_PATH
[DEFAULT_ELUNA_SCRIPT_PATH]=AC_ELUNA_SCRIPT_PATH
[DEFAULT_PMA_EXTERNAL_PORT]=PMA_EXTERNAL_PORT
[DEFAULT_PMA_UPLOAD_LIMIT]=PMA_UPLOAD_LIMIT
[DEFAULT_PMA_MEMORY_LIMIT]=PMA_MEMORY_LIMIT
[DEFAULT_PMA_MAX_EXECUTION_TIME]=PMA_MAX_EXECUTION_TIME
[DEFAULT_KEIRA3_EXTERNAL_PORT]=KEIRA3_EXTERNAL_PORT
[DEFAULT_PMA_USER]=PMA_USER
[DEFAULT_PMA_ARBITRARY]=PMA_ARBITRARY
[DEFAULT_PMA_ABSOLUTE_URI]=PMA_ABSOLUTE_URI
[DEFAULT_AUTH_INTERNAL_PORT]=AUTH_PORT
[DEFAULT_WORLD_INTERNAL_PORT]=WORLD_PORT
[DEFAULT_SOAP_INTERNAL_PORT]=SOAP_PORT
[DEFAULT_MYSQL_INTERNAL_PORT]=MYSQL_PORT
[DEFAULT_TZ]=TZ
[DEFAULT_MYSQL_ROOT_HOST]=MYSQL_ROOT_HOST
[DEFAULT_MYSQL_USER]=MYSQL_USER
[DEFAULT_ELUNA_ENABLED]=AC_ELUNA_ENABLED
[DEFAULT_ELUNA_TRACE_BACK]=AC_ELUNA_TRACE_BACK
[DEFAULT_ELUNA_AUTO_RELOAD]=AC_ELUNA_AUTO_RELOAD
[DEFAULT_ELUNA_BYTECODE_CACHE]=AC_ELUNA_BYTECODE_CACHE
[DEFAULT_ELUNA_AUTO_RELOAD_INTERVAL]=AC_ELUNA_AUTO_RELOAD_INTERVAL
[DEFAULT_ELUNA_REQUIRE_PATHS]=AC_ELUNA_REQUIRE_PATHS
[DEFAULT_ELUNA_REQUIRE_CPATHS]=AC_ELUNA_REQUIRE_CPATHS
[DEFAULT_MODULE_ELUNA]=MODULE_ELUNA
)
# Permission schemes (hardcoded as not in template) for __template_var in "${!TEMPLATE_VALUE_MAP[@]}"; do
readonly PERMISSION_LOCAL_USER="0:0" __template_key="${TEMPLATE_VALUE_MAP[$__template_var]}"
readonly PERMISSION_NFS_USER="1001:1000" __template_value="$(get_template_value "${__template_key}")"
readonly DEFAULT_CUSTOM_UID="1000" printf -v "${__template_var}" '%s' "${__template_value}"
readonly DEFAULT_CUSTOM_GID="1000" readonly "${__template_var}"
done
unset __template_var __template_key __template_value
# Static values # Static values
readonly DEFAULT_LOCAL_ADDRESS="$(get_template_value "SERVER_ADDRESS")"
readonly DEFAULT_FALLBACK_LAN_IP="192.168.1.100" readonly DEFAULT_FALLBACK_LAN_IP="192.168.1.100"
readonly DEFAULT_DOMAIN_PLACEHOLDER="your-domain.com" readonly DEFAULT_DOMAIN_PLACEHOLDER="your-domain.com"
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"
# Docker images (from .env.template)
readonly DEFAULT_MYSQL_IMAGE="$(get_template_value "MYSQL_IMAGE")"
readonly DEFAULT_AC_DB_IMPORT_IMAGE="$(get_template_value "AC_DB_IMPORT_IMAGE")"
readonly DEFAULT_AC_AUTHSERVER_IMAGE="$(get_template_value "AC_AUTHSERVER_IMAGE")"
readonly DEFAULT_AC_WORLDSERVER_IMAGE="$(get_template_value "AC_WORLDSERVER_IMAGE")"
readonly DEFAULT_AC_CLIENT_DATA_IMAGE="$(get_template_value "AC_CLIENT_DATA_IMAGE")"
readonly DEFAULT_AUTH_IMAGE_PLAYERBOTS="$(get_template_value "AC_AUTHSERVER_IMAGE_PLAYERBOTS")"
readonly DEFAULT_WORLD_IMAGE_PLAYERBOTS="$(get_template_value "AC_WORLDSERVER_IMAGE_PLAYERBOTS")"
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")"
readonly DEFAULT_DB_WORLD_NAME="$(get_template_value "DB_WORLD_NAME")"
readonly DEFAULT_DB_CHARACTERS_NAME="$(get_template_value "DB_CHARACTERS_NAME")"
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")"
# Version constants
readonly DEFAULT_CLIENT_DATA_VERSION="$(get_template_value "CLIENT_DATA_VERSION")"
# Network configuration
readonly DEFAULT_NETWORK_NAME="$(get_template_value "NETWORK_NAME")"
readonly DEFAULT_NETWORK_SUBNET="$(get_template_value "NETWORK_SUBNET")"
readonly DEFAULT_NETWORK_GATEWAY="$(get_template_value "NETWORK_GATEWAY")"
# MySQL configuration
readonly DEFAULT_MYSQL_CHARACTER_SET="$(get_template_value "MYSQL_CHARACTER_SET")"
readonly DEFAULT_MYSQL_COLLATION="$(get_template_value "MYSQL_COLLATION")"
readonly DEFAULT_MYSQL_MAX_CONNECTIONS="$(get_template_value "MYSQL_MAX_CONNECTIONS")"
readonly DEFAULT_MYSQL_INNODB_BUFFER_POOL_SIZE="$(get_template_value "MYSQL_INNODB_BUFFER_POOL_SIZE")"
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")"
readonly DEFAULT_ELUNA_SCRIPT_PATH="$(get_template_value "AC_ELUNA_SCRIPT_PATH")"
# Tool configuration
readonly DEFAULT_PMA_EXTERNAL_PORT="$(get_template_value "PMA_EXTERNAL_PORT")"
readonly DEFAULT_PMA_UPLOAD_LIMIT="$(get_template_value "PMA_UPLOAD_LIMIT")"
readonly DEFAULT_PMA_MEMORY_LIMIT="$(get_template_value "PMA_MEMORY_LIMIT")"
readonly DEFAULT_PMA_MAX_EXECUTION_TIME="$(get_template_value "PMA_MAX_EXECUTION_TIME")"
readonly DEFAULT_KEIRA3_EXTERNAL_PORT="$(get_template_value "KEIRA3_EXTERNAL_PORT")"
readonly DEFAULT_PMA_USER="$(get_template_value "PMA_USER")"
readonly DEFAULT_PMA_ARBITRARY="$(get_template_value "PMA_ARBITRARY")"
readonly DEFAULT_PMA_ABSOLUTE_URI="$(get_template_value "PMA_ABSOLUTE_URI")"
# Module preset names (not in template) # Module preset names (not in template)
readonly DEFAULT_PRESET_SUGGESTED="suggested-modules" readonly DEFAULT_PRESET_SUGGESTED="suggested-modules"
readonly DEFAULT_PRESET_PLAYERBOTS="playerbots-suggested-modules" readonly DEFAULT_PRESET_PLAYERBOTS="playerbots-suggested-modules"
# Internal ports # Health check configuration (loaded via loop)
readonly DEFAULT_AUTH_INTERNAL_PORT="$(get_template_value "AUTH_PORT")" readonly -a HEALTHCHECK_KEYS=(
readonly DEFAULT_WORLD_INTERNAL_PORT="$(get_template_value "WORLD_PORT")" MYSQL_HEALTHCHECK_INTERVAL
readonly DEFAULT_SOAP_INTERNAL_PORT="$(get_template_value "SOAP_PORT")" MYSQL_HEALTHCHECK_TIMEOUT
readonly DEFAULT_MYSQL_INTERNAL_PORT="$(get_template_value "MYSQL_PORT")" MYSQL_HEALTHCHECK_RETRIES
MYSQL_HEALTHCHECK_START_PERIOD
# System configuration AUTH_HEALTHCHECK_INTERVAL
readonly DEFAULT_TZ="$(get_template_value "TZ")" AUTH_HEALTHCHECK_TIMEOUT
readonly DEFAULT_MYSQL_ROOT_HOST="$(get_template_value "MYSQL_ROOT_HOST")" AUTH_HEALTHCHECK_RETRIES
readonly DEFAULT_MYSQL_USER="$(get_template_value "MYSQL_USER")" AUTH_HEALTHCHECK_START_PERIOD
WORLD_HEALTHCHECK_INTERVAL
# Eluna configuration WORLD_HEALTHCHECK_TIMEOUT
readonly DEFAULT_ELUNA_ENABLED="$(get_template_value "AC_ELUNA_ENABLED")" WORLD_HEALTHCHECK_RETRIES
readonly DEFAULT_ELUNA_TRACE_BACK="$(get_template_value "AC_ELUNA_TRACE_BACK")" WORLD_HEALTHCHECK_START_PERIOD
readonly DEFAULT_ELUNA_AUTO_RELOAD="$(get_template_value "AC_ELUNA_AUTO_RELOAD")" BACKUP_HEALTHCHECK_INTERVAL
readonly DEFAULT_ELUNA_BYTECODE_CACHE="$(get_template_value "AC_ELUNA_BYTECODE_CACHE")" BACKUP_HEALTHCHECK_TIMEOUT
readonly DEFAULT_ELUNA_AUTO_RELOAD_INTERVAL="$(get_template_value "AC_ELUNA_AUTO_RELOAD_INTERVAL")" BACKUP_HEALTHCHECK_RETRIES
readonly DEFAULT_ELUNA_REQUIRE_PATHS="$(get_template_value "AC_ELUNA_REQUIRE_PATHS")" BACKUP_HEALTHCHECK_START_PERIOD
readonly DEFAULT_ELUNA_REQUIRE_CPATHS="$(get_template_value "AC_ELUNA_REQUIRE_CPATHS")" )
readonly DEFAULT_MODULE_ELUNA="$(get_template_value "MODULE_ELUNA")" for __hc_key in "${HEALTHCHECK_KEYS[@]}"; do
__hc_value="$(get_template_value "${__hc_key}")"
# Health check configuration printf -v "DEFAULT_${__hc_key}" '%s' "$__hc_value"
readonly DEFAULT_MYSQL_HEALTHCHECK_INTERVAL="$(get_template_value "MYSQL_HEALTHCHECK_INTERVAL")" readonly "DEFAULT_${__hc_key}"
readonly DEFAULT_MYSQL_HEALTHCHECK_TIMEOUT="$(get_template_value "MYSQL_HEALTHCHECK_TIMEOUT")" done
readonly DEFAULT_MYSQL_HEALTHCHECK_RETRIES="$(get_template_value "MYSQL_HEALTHCHECK_RETRIES")" unset __hc_key __hc_value
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) # Route detection IP (not in template)
readonly ROUTE_DETECTION_IP="1.1.1.1" readonly ROUTE_DETECTION_IP="1.1.1.1"
@@ -1252,7 +1248,6 @@ fi
fi fi
DB_PLAYERBOTS_NAME=${DB_PLAYERBOTS_NAME:-$DEFAULT_DB_PLAYERBOTS_NAME} DB_PLAYERBOTS_NAME=${DB_PLAYERBOTS_NAME:-$DEFAULT_DB_PLAYERBOTS_NAME}
local CLIENT_DATA_CACHE_PATH_VALUE="${LOCAL_STORAGE_ROOT}/client-data-cache"
HOST_ZONEINFO_PATH=${HOST_ZONEINFO_PATH:-$DEFAULT_HOST_ZONEINFO_PATH} HOST_ZONEINFO_PATH=${HOST_ZONEINFO_PATH:-$DEFAULT_HOST_ZONEINFO_PATH}
MYSQL_INNODB_REDO_LOG_CAPACITY=${MYSQL_INNODB_REDO_LOG_CAPACITY:-$DEFAULT_MYSQL_INNODB_REDO_LOG_CAPACITY} 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_RUNTIME_TMPFS_SIZE=${MYSQL_RUNTIME_TMPFS_SIZE:-$DEFAULT_MYSQL_RUNTIME_TMPFS_SIZE}
@@ -1273,34 +1268,25 @@ fi
WORLD_HEALTHCHECK_TIMEOUT=${WORLD_HEALTHCHECK_TIMEOUT:-$DEFAULT_WORLD_HEALTHCHECK_TIMEOUT} WORLD_HEALTHCHECK_TIMEOUT=${WORLD_HEALTHCHECK_TIMEOUT:-$DEFAULT_WORLD_HEALTHCHECK_TIMEOUT}
WORLD_HEALTHCHECK_RETRIES=${WORLD_HEALTHCHECK_RETRIES:-$DEFAULT_WORLD_HEALTHCHECK_RETRIES} WORLD_HEALTHCHECK_RETRIES=${WORLD_HEALTHCHECK_RETRIES:-$DEFAULT_WORLD_HEALTHCHECK_RETRIES}
WORLD_HEALTHCHECK_START_PERIOD=${WORLD_HEALTHCHECK_START_PERIOD:-$DEFAULT_WORLD_HEALTHCHECK_START_PERIOD} WORLD_HEALTHCHECK_START_PERIOD=${WORLD_HEALTHCHECK_START_PERIOD:-$DEFAULT_WORLD_HEALTHCHECK_START_PERIOD}
BACKUP_HEALTHCHECK_INTERVAL=${BACKUP_HEALTHCHECK_INTERVAL:-$DEFAULT_BACKUP_HEALTHCHECK_INTERVAL} for hc_key in "${HEALTHCHECK_KEYS[@]}"; do
BACKUP_HEALTHCHECK_TIMEOUT=${BACKUP_HEALTHCHECK_TIMEOUT:-$DEFAULT_BACKUP_HEALTHCHECK_TIMEOUT} default_var="DEFAULT_${hc_key}"
BACKUP_HEALTHCHECK_RETRIES=${BACKUP_HEALTHCHECK_RETRIES:-$DEFAULT_BACKUP_HEALTHCHECK_RETRIES} printf -v "$hc_key" '%s' "${!hc_key:-${!default_var}}"
BACKUP_HEALTHCHECK_START_PERIOD=${BACKUP_HEALTHCHECK_START_PERIOD:-$DEFAULT_BACKUP_HEALTHCHECK_START_PERIOD} done
unset hc_key default_var
MODULE_ELUNA=${MODULE_ELUNA:-$DEFAULT_MODULE_ELUNA} MODULE_ELUNA=${MODULE_ELUNA:-$DEFAULT_MODULE_ELUNA}
local HOST_BACKUP_PATH_VALUE_INPUT="${HOST_BACKUP_PATH:-}" BACKUP_PATH=${BACKUP_PATH:-$DEFAULT_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 {
cat <<EOF
# Generated by ac-compose/setup.sh # Generated by ac-compose/setup.sh
COMPOSE_PROJECT_NAME=$DEFAULT_COMPOSE_PROJECT_NAME COMPOSE_PROJECT_NAME=$DEFAULT_COMPOSE_PROJECT_NAME
STORAGE_PATH=$STORAGE_PATH STORAGE_PATH=$STORAGE_PATH
STORAGE_PATH_LOCAL=$LOCAL_STORAGE_ROOT STORAGE_PATH_LOCAL=$LOCAL_STORAGE_ROOT
HOST_BACKUP_PATH=$HOST_BACKUP_PATH_VALUE BACKUP_PATH=$BACKUP_PATH
HOST_ZONEINFO_PATH=${HOST_ZONEINFO_PATH:-$DEFAULT_HOST_ZONEINFO_PATH} HOST_ZONEINFO_PATH=${HOST_ZONEINFO_PATH:-$DEFAULT_HOST_ZONEINFO_PATH}
TZ=$DEFAULT_TZ TZ=$DEFAULT_TZ
# Database # Database
MYSQL_IMAGE=$DEFAULT_MYSQL_IMAGE MYSQL_IMAGE=$DEFAULT_MYSQL_IMAGE
CONTAINER_MYSQL=$DEFAULT_CONTAINER_MYSQL CONTAINER_MYSQL=$DEFAULT_CONTAINER_MYSQL
@@ -1336,7 +1322,7 @@ AC_WORLDSERVER_IMAGE_MODULES=${AC_WORLDSERVER_IMAGE_MODULES_VALUE}
# Client data images # Client data images
AC_CLIENT_DATA_IMAGE=$DEFAULT_AC_CLIENT_DATA_IMAGE AC_CLIENT_DATA_IMAGE=$DEFAULT_AC_CLIENT_DATA_IMAGE
AC_CLIENT_DATA_IMAGE_PLAYERBOTS=$DEFAULT_CLIENT_DATA_IMAGE_PLAYERBOTS AC_CLIENT_DATA_IMAGE_PLAYERBOTS=$DEFAULT_CLIENT_DATA_IMAGE_PLAYERBOTS
CLIENT_DATA_CACHE_PATH=$CLIENT_DATA_CACHE_PATH_VALUE CLIENT_DATA_CACHE_PATH=$DEFAULT_CLIENT_DATA_CACHE_PATH
CLIENT_DATA_VOLUME=${CLIENT_DATA_VOLUME:-$DEFAULT_CLIENT_DATA_VOLUME} CLIENT_DATA_VOLUME=${CLIENT_DATA_VOLUME:-$DEFAULT_CLIENT_DATA_VOLUME}
# Containers # Containers
@@ -1364,10 +1350,6 @@ BACKUP_RETENTION_HOURS=$BACKUP_RETENTION_HOURS
BACKUP_DAILY_TIME=$BACKUP_DAILY_TIME BACKUP_DAILY_TIME=$BACKUP_DAILY_TIME
BACKUP_HEALTHCHECK_MAX_MINUTES=$BACKUP_HEALTHCHECK_MAX_MINUTES BACKUP_HEALTHCHECK_MAX_MINUTES=$BACKUP_HEALTHCHECK_MAX_MINUTES
BACKUP_HEALTHCHECK_GRACE_SECONDS=$BACKUP_HEALTHCHECK_GRACE_SECONDS 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=$CONTAINER_USER CONTAINER_USER=$CONTAINER_USER
@@ -1452,18 +1434,11 @@ KEIRA_DATABASE_HOST=$DEFAULT_CONTAINER_MYSQL
KEIRA_DATABASE_PORT=$DEFAULT_MYSQL_INTERNAL_PORT KEIRA_DATABASE_PORT=$DEFAULT_MYSQL_INTERNAL_PORT
# Health checks # Health checks
MYSQL_HEALTHCHECK_INTERVAL=$MYSQL_HEALTHCHECK_INTERVAL EOF
MYSQL_HEALTHCHECK_TIMEOUT=$MYSQL_HEALTHCHECK_TIMEOUT for hc_key in "${HEALTHCHECK_KEYS[@]}"; do
MYSQL_HEALTHCHECK_RETRIES=$MYSQL_HEALTHCHECK_RETRIES printf "%s=%s\n" "$hc_key" "${!hc_key}"
MYSQL_HEALTHCHECK_START_PERIOD=$MYSQL_HEALTHCHECK_START_PERIOD done
AUTH_HEALTHCHECK_INTERVAL=$AUTH_HEALTHCHECK_INTERVAL cat <<EOF
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 # Networking
NETWORK_NAME=$DEFAULT_NETWORK_NAME NETWORK_NAME=$DEFAULT_NETWORK_NAME
@@ -1474,11 +1449,13 @@ NETWORK_GATEWAY=$DEFAULT_NETWORK_GATEWAY
ALPINE_GIT_IMAGE=$DEFAULT_ALPINE_GIT_IMAGE ALPINE_GIT_IMAGE=$DEFAULT_ALPINE_GIT_IMAGE
ALPINE_IMAGE=$DEFAULT_ALPINE_IMAGE ALPINE_IMAGE=$DEFAULT_ALPINE_IMAGE
EOF EOF
} > "$ENV_OUT"
local storage_abs_path="$STORAGE_PATH" local storage_abs_path="${STORAGE_PATH:-$DEFAULT_LOCAL_STORAGE}"
if [[ "$storage_abs_path" != /* ]]; then if [[ "$storage_abs_path" != /* ]]; then
storage_abs_path="$(pwd)/${storage_abs_path#./}" storage_abs_path="$(pwd)/${storage_abs_path#./}"
fi fi
storage_abs_path="${storage_abs_path%/}"
local host_modules_dir="${storage_abs_path}/modules" local host_modules_dir="${storage_abs_path}/modules"
mkdir -p "$host_modules_dir" mkdir -p "$host_modules_dir"

View File

@@ -42,7 +42,7 @@ docker info >/dev/null 2>&1 || { echo "Docker daemon unavailable" >&2; exit 1; }
read_env(){ read_env(){
local key="$1" value="" local key="$1" value=""
if [ -f "$ENV_FILE" ]; then if [ -f "$ENV_FILE" ]; then
value="$(grep -E "^${key}=" "$ENV_FILE" 2>/dev/null | tail -n1 | cut -d'=' -f2- | tr -d '\r')" value="$(grep -E "^${key}=" "$ENV_FILE" 2>/dev/null | tail -n1 | cut -d'=' -f2- | tr -d '\r' | sed 's/[[:space:]]*#.*//' | sed 's/[[:space:]]*$//')"
fi fi
echo "$value" echo "$value"
} }
@@ -172,7 +172,7 @@ print_service(){
fi fi
} }
module_summary(){ module_summary_list(){
if [ ! -f "$ENV_FILE" ]; then if [ ! -f "$ENV_FILE" ]; then
echo "MODULES: (env not found)" echo "MODULES: (env not found)"
return return
@@ -180,23 +180,17 @@ module_summary(){
local module_vars local module_vars
module_vars="$(grep -E '^MODULE_[A-Z_]+=1' "$ENV_FILE" 2>/dev/null | cut -d'=' -f1)" module_vars="$(grep -E '^MODULE_[A-Z_]+=1' "$ENV_FILE" 2>/dev/null | cut -d'=' -f1)"
if [ -n "$module_vars" ]; then if [ -n "$module_vars" ]; then
local arr=() echo "MODULES:"
while IFS= read -r mod; do while IFS= read -r mod; do
[ -z "$mod" ] && continue [ -z "$mod" ] && continue
local pretty="${mod#MODULE_}" local pretty="${mod#MODULE_}"
pretty="$(echo "$pretty" | tr '[:upper:]' '[:lower:]' | tr '_' ' ')" pretty="$(echo "$pretty" | tr '[:upper:]' '[:lower:]' | tr '_' ' ' | sed 's/\b\w/\U&/g')"
arr+=("$pretty") printf " • %s\n" "$pretty"
done <<< "$module_vars" done <<< "$module_vars"
local joined=""
for item in "${arr[@]}"; do
joined+="$item, "
done
joined="${joined%, }"
echo "MODULES: $joined"
else else
echo "MODULES: none" echo "MODULES: none"
fi fi
echo ""
if container_running "ac-worldserver"; then if container_running "ac-worldserver"; then
local playerbot="disabled" local playerbot="disabled"
local module_playerbots local module_playerbots
@@ -209,7 +203,7 @@ module_summary(){
fi fi
local eluna="disabled" local eluna="disabled"
[ "$ELUNA_ENABLED" = "1" ] && eluna="running" [ "$ELUNA_ENABLED" = "1" ] && eluna="running"
echo "RUNTIME: playerbots $playerbot | eluna $eluna" # echo "RUNTIME: playerbots $playerbot | eluna $eluna"
fi fi
} }
@@ -290,8 +284,9 @@ show_realm_status_header(){
} }
render_snapshot(){ render_snapshot(){
show_realm_status_header #show_realm_status_header
printf "\nTIME %s PROJECT %s\n\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$PROJECT_NAME" printf "TIME %s PROJECT %s\n\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$PROJECT_NAME"
user_stats
printf "%-20s %-15s %-28s %s\n" "SERVICE" "CONTAINER" "STATE" "IMAGE" printf "%-20s %-15s %-28s %s\n" "SERVICE" "CONTAINER" "STATE" "IMAGE"
printf "%-20s %-15s %-28s %s\n" "--------------------" "---------------" "----------------------------" "------------------------------" printf "%-20s %-15s %-28s %s\n" "--------------------" "---------------" "----------------------------" "------------------------------"
print_service ac-mysql "MySQL" print_service ac-mysql "MySQL"
@@ -306,10 +301,10 @@ render_snapshot(){
print_service ac-phpmyadmin "phpMyAdmin" print_service ac-phpmyadmin "phpMyAdmin"
print_service ac-keira3 "Keira3" print_service ac-keira3 "Keira3"
echo "" echo ""
module_summary module_summary_list
user_stats
echo "" echo ""
echo "$(ports_summary)" echo "$(ports_summary)"
echo ""
echo "$(network_summary)" echo "$(network_summary)"
} }