Files
Baptiste Boulongne 2a9d9fa157 Add Docker Compose stack and GHCR publish workflow for Tortoise WoW.
Packages Shyalya/tortoise-wow with MariaDB, one-shot DB init, and nightly image builds for playerbots and no-bots tags.
2026-08-09 17:45:43 +02:00

103 lines
3.7 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
ETC="${TURTLE_HOME:-/opt/turtle}/etc"
DATA_DIR="${DATA_DIR:-/opt/turtle/data}"
LOGS_DIR="${LOGS_DIR:-/opt/turtle/logs}"
SQL_DIR="${SQL_DIR:-/opt/turtle/sql}"
DB_HOST="${DB_HOST:-db}"
DB_PORT="${DB_PORT:-3306}"
DB_USER="${DB_USER:-mangos}"
DB_PASSWORD="${DB_PASSWORD:-mangos}"
DB_LOGIN="${DB_LOGIN:-tw_logon}"
DB_WORLD="${DB_WORLD:-tw_world}"
DB_CHAR="${DB_CHAR:-tw_char}"
DB_LOGS="${DB_LOGS:-tw_logs}"
WORLD_PORT="${WORLD_PORT:-8090}"
REALM_PORT="${REALM_PORT:-3724}"
REALM_ID="${REALM_ID:-1}"
BIND_IP="${BIND_IP:-0.0.0.0}"
LOG_SQL="${LOG_SQL:-0}"
AUTO_UPDATE="${DATABASE_AUTOUPDATE_ENABLED:-1}"
LFT_BOTFILL="${LFT_BOTFILL_ENABLE:-1}"
SOLO_DUNGEON_REPOP="${SOLO_DUNGEON_REPOP_ALIVE_ENABLE:-1}"
LEECH_ENABLE="${LEECH_ENABLE:-1}"
AI_PLAYERBOT_ENABLED="${AI_PLAYERBOT_ENABLED:-1}"
AI_MIN_RANDOM_BOTS="${AI_MIN_RANDOM_BOTS:-10}"
AI_MAX_RANDOM_BOTS="${AI_MAX_RANDOM_BOTS:-10}"
DB_INFO() {
local db="$1"
printf '%s;%s;%s;%s;%s' "${DB_HOST}" "${DB_PORT}" "${DB_USER}" "${DB_PASSWORD}" "${db}"
}
set_conf() {
local file="$1" key="$2" value="$3"
if grep -qE "^[[:space:]]*${key}[[:space:]]*=" "${file}"; then
sed -i -E "s|^[[:space:]]*${key}[[:space:]]*=.*|${key} = ${value}|" "${file}"
else
printf '\n%s = %s\n' "${key}" "${value}" >> "${file}"
fi
}
ensure_conf() {
local dist="$1" conf="$2"
if [[ ! -f "${conf}" ]]; then
if [[ ! -f "${dist}" ]]; then
echo "Missing config template: ${dist}" >&2
exit 1
fi
cp "${dist}" "${conf}"
fi
}
mkdir -p "${ETC}"
ensure_conf "${ETC}/mangosd.conf.dist" "${ETC}/mangosd.conf"
ensure_conf "${ETC}/realmd.conf.dist" "${ETC}/realmd.conf"
if [[ -f "${ETC}/aiplayerbot.conf.dist" ]]; then
ensure_conf "${ETC}/aiplayerbot.conf.dist" "${ETC}/aiplayerbot.conf"
fi
if [[ -f "${ETC}/ahbot.conf.dist" ]]; then
ensure_conf "${ETC}/ahbot.conf.dist" "${ETC}/ahbot.conf"
fi
# mangosd
set_conf "${ETC}/mangosd.conf" "LoginDatabase.Info" "\"$(DB_INFO "${DB_LOGIN}")\""
set_conf "${ETC}/mangosd.conf" "WorldDatabase.Info" "\"$(DB_INFO "${DB_WORLD}")\""
set_conf "${ETC}/mangosd.conf" "CharacterDatabase.Info" "\"$(DB_INFO "${DB_CHAR}")\""
set_conf "${ETC}/mangosd.conf" "LogsDatabase.Info" "\"$(DB_INFO "${DB_LOGS}")\""
set_conf "${ETC}/mangosd.conf" "DataDir" "\"${DATA_DIR}\""
set_conf "${ETC}/mangosd.conf" "LogsDir" "\"${LOGS_DIR}\""
set_conf "${ETC}/mangosd.conf" "WorldServerPort" "${WORLD_PORT}"
set_conf "${ETC}/mangosd.conf" "BindIP" "\"${BIND_IP}\""
set_conf "${ETC}/mangosd.conf" "RealmID" "${REALM_ID}"
set_conf "${ETC}/mangosd.conf" "LogSQL" "${LOG_SQL}"
set_conf "${ETC}/mangosd.conf" "Database.AutoUpdate.Enabled" "${AUTO_UPDATE}"
set_conf "${ETC}/mangosd.conf" "Database.AutoUpdate.Path" "\"${SQL_DIR}/\""
set_conf "${ETC}/mangosd.conf" "LFT.BotFill.Enable" "${LFT_BOTFILL}"
set_conf "${ETC}/mangosd.conf" "SoloDungeonRepopAlive.Enable" "${SOLO_DUNGEON_REPOP}"
set_conf "${ETC}/mangosd.conf" "Leech.Enable" "${LEECH_ENABLE}"
# realmd (note: key name has no dots between LoginDatabase and Info)
set_conf "${ETC}/realmd.conf" "LoginDatabaseInfo" "\"$(DB_INFO "${DB_LOGIN}")\""
set_conf "${ETC}/realmd.conf" "RealmServerPort" "${REALM_PORT}"
set_conf "${ETC}/realmd.conf" "BindIP" "\"${BIND_IP}\""
if [[ -f "${ETC}/aiplayerbot.conf" ]]; then
set_conf "${ETC}/aiplayerbot.conf" "AiPlayerbot.Enabled" "${AI_PLAYERBOT_ENABLED}"
set_conf "${ETC}/aiplayerbot.conf" "AiPlayerbot.MinRandomBots" "${AI_MIN_RANDOM_BOTS}"
set_conf "${ETC}/aiplayerbot.conf" "AiPlayerbot.MaxRandomBots" "${AI_MAX_RANDOM_BOTS}"
fi
mkdir -p "${LOGS_DIR}"
# Writable for the turtle user (configs may be regenerated each start).
chown -R turtle:turtle "${ETC}" "${LOGS_DIR}" 2>/dev/null || true
echo "Configs rendered under ${ETC}"