Deckard 9fe4a2b00a Fix container permissions and update timezone default
Container fixes:
- Remove complex su user switching that fails due to missing user
- Run scripts as root but ensure file ownership matches NFS mapping
- Simplifies deployment and allows package installation to succeed

Setup script:
- Change default timezone from UTC to America/New_York
2025-10-13 01:07:25 -04:00
2025-10-04 20:44:07 -04:00
2025-10-05 23:38:33 -04:00
2025-10-04 20:44:07 -04:00
2025-10-12 14:55:08 -04:00
2025-10-12 14:55:08 -04:00

AzerothCore Docker/Podman Stack

A complete containerized deployment of AzerothCore WoW 3.3.5a (Wrath of the Lich King) private server with 13 enhanced modules, automated management, and production-ready features.

🚀 Quick Start

Prerequisites

  • Docker or Podman with Docker Compose
  • 4GB+ RAM and 20GB+ storage
  • Linux/macOS/WSL2 (Windows with WSL2 recommended)

1. Get the Code

git clone https://github.com/uprightbass360/acore-compose.git
cd acore-compose

2. Run Interactive Setup

./scripts/setup-server.sh

3. Deploy Server

# Use the generated custom environment files
docker compose --env-file docker-compose-azerothcore-database-custom.env -f docker-compose-azerothcore-database.yml up -d
docker compose --env-file docker-compose-azerothcore-services-custom.env -f docker-compose-azerothcore-services.yml up -d
docker compose --env-file docker-compose-azerothcore-tools-custom.env -f docker-compose-azerothcore-tools.yml up -d

4. Create Admin Account

Once the worldserver is running:

# Attach to worldserver console
docker attach ac-worldserver

# In the worldserver console, create admin account:
account create admin yourpassword
account set gmlevel admin 3 -1
server info

# Detach from console without stopping: Ctrl+P, Ctrl+Q

5. Configure Game Client

Client Connection Instructions:

  1. Locate your WoW 3.3.5a client directory
  2. Edit realmlist.wtf file (in your WoW client folder):
    set realmlist SERVER_ADDRESS
    

Examples based on your server configuration:

# Local development
set realmlist 127.0.0.1

# LAN server
set realmlist 192.168.1.100

# Public server with custom port
set realmlist your-domain.com 8215
# or for IP with custom port
set realmlist 203.0.113.100 8215

6. Access Your Server

That's it! Your server is ready with all 13 modules installed and configured.


🔧 Manual Setup (Advanced Users)

Step 1: Clone Repository

git clone https://github.com/uprightbass360/acore-compose.git
cd acore-compose

Step 2: Configure Environment Files

Edit these files to match your setup:

  • docker-compose-azerothcore-database.env
  • docker-compose-azerothcore-services.env
  • docker-compose-azerothcore-tools.env

Key settings to modify:

# Server network configuration
SERVER_ADDRESS=your-server-ip
REALM_PORT=8215
AUTH_EXTERNAL_PORT=3784

# Storage location
STORAGE_ROOT=./storage  # Local setup
# STORAGE_ROOT=/nfs/containers  # NFS/network storage

# Database settings
MYSQL_ROOT_PASSWORD=your-secure-password

Step 3: Deploy Layers in Order

# 1. Database layer (MySQL + backup system)
docker compose --env-file docker-compose-azerothcore-database.env -f docker-compose-azerothcore-database.yml up -d

# 2. Services layer (auth/world servers + modules)
docker compose --env-file docker-compose-azerothcore-services.env -f docker-compose-azerothcore-services.yml up -d

# 3. Tools layer (phpMyAdmin + Keira3)
docker compose --env-file docker-compose-azerothcore-tools.env -f docker-compose-azerothcore-tools.yml up -d

Step 4: Monitor Deployment

# Watch post-install configuration
docker logs ac-post-install -f

# Check all services are healthy
docker ps

📋 What Gets Installed Automatically

Core Server Components

  • AzerothCore 3.3.5a - WotLK server application
  • MySQL 8.0 - Database with intelligent initialization and restoration
  • Smart Backup System - Automated hourly/daily backups with intelligent restoration
  • phpMyAdmin - Web-based database administration
  • Keira3 - Game content editor and developer tools

13 Enhanced Modules ( VERIFIED INTEGRATED)

All modules are automatically downloaded, configured, and SQL scripts executed:

Module Description Status
mod-playerbots AI companions for solo play INTEGRATED
mod-aoe-loot Streamlined loot collection INTEGRATED
mod-learn-spells Automatic spell learning INTEGRATED
mod-fireworks Level-up celebrations INTEGRATED
mod-individual-progression Personal advancement system INTEGRATED
mod-transmog Appearance customization INTEGRATED
mod-solo-lfg Solo dungeon access INTEGRATED
mod-eluna Lua scripting engine INTEGRATED
mod-arac All races/classes unlocked INTEGRATED
mod-npc-enchanter Enchanting services INTEGRATED
mod-assistant AI automation features INTEGRATED
mod-reagent-bank Reagent storage system INTEGRATED
mod-black-market Rare item auctions INTEGRATED

Automated Configuration

  • Intelligent Database Setup - Smart backup detection, restoration, and conditional schema import
  • Backup Management - Automated scheduling, retention policies, and integrity validation
  • Realmlist Configuration - Server address and port setup
  • Module Integration - SQL scripts execution and config deployment
  • Service Restart - Automatic restart to apply configurations
  • Health Monitoring - Container health checks and restart policies

Lua Scripting Environment

  • Example Scripts - Welcome messages, level rewards, server info commands
  • Volume Mounting - Scripts automatically loaded from storage/lua_scripts/
  • Development Tools - Script reloading with .reload eluna command

⚠️ Manual Configuration Required

While most setup is automated, some modules require manual configuration:

Module Integration Verification

mod-playerbots Integration Status

  • RESOLVED: Now using compatible Docker images
  • Images: uprightbass360/azerothcore-wotlk-playerbots:*-Playerbot
  • Branch: AzerothCore Playerbot branch (confirmed in logs)
  • Database: Playerbot tables created (playerbots_rpg_races)
  • Status: Fully integrated and operational

Module System Verification (All 13 modules)

  • Binary Integration: Compiled into WorldServer (Playerbot branch)
  • File System: All modules present in /azerothcore/modules/
  • Database: Module tables and SQL scripts executed
  • Configuration: Module framework active in worldserver.conf
  • Process: WorldServer running with 1.9GB RAM (normal for module build)

Technical Verification Details

  • Server Version: AzerothCore rev. 509eb73e0115+ (Playerbot branch)
  • Docker Images: All using uprightbass360/azerothcore-wotlk-playerbots:*-Playerbot
  • VMap Errors: Non-critical cosmetic 3D model loading (safe to ignore)
  • Module Tables: module_string, module_string_locale, playerbots_rpg_races
  • Lua Scripting: Active with TypeScript compilation via ac-eluna container

📦 Client-Side Patches Required

mod-individual-progression

  • Required: patch-V.mpq (Vanilla crafting/recipes)
  • Optional: patch-J.mpq, patch-U.mpq
  • Location: storage/azerothcore/modules/mod-individual-progression/optional/
  • Install: Copy patches to client WoW/Data/ directory

mod-arac (All Races All Classes)

  • Required: Patch-A.MPQ
  • Location: storage/azerothcore/modules/mod-arac/patch-contents/
  • Install: Copy to client WoW/Data/ directory

⚙️ Server Configuration Changes

mod-individual-progression requires worldserver.conf updates:

# Required settings in storage/azerothcore/config/worldserver.conf
EnablePlayerSettings = 1
DBC.EnforceItemAttributes = 0

mod-aoe-loot optimization:

# Prevent corpse cleanup issues
Rate.Corpse.Decay.Looted = 0.01

🤖 NPC Spawning Required

Several modules need NPCs spawned with GM commands:

# Transmog NPC
.npc add 190010

# Reagent Bank NPC
.npc add 290011

# NPC Enchanter (check module docs for ID)
.npc add [enchanter_id]

📋 Configuration Analysis Tool

Check your setup for missing configurations:

./scripts/configure-modules.sh

This script analyzes your enabled modules and provides specific guidance for resolving configuration issues.


🏗️ Architecture Overview

Container Layers

┌─────────────────────────────────────────┐
│              Tools Layer                │
│  ┌─────────────┐  ┌─────────────┐      │
│  │ phpMyAdmin  │  │   Keira3    │      │
│  │   :8081     │  │   :4201     │      │
│  └─────────────┘  └─────────────┘      │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│             Services Layer              │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│  │   Auth   │ │  World   │ │ Modules  │ │
│  │  :3784   │ │  :8215   │ │ Manager  │ │
│  └──────────┘ └──────────┘ └──────────┘ │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│  │ Client   │ │  Eluna   │ │Post-Inst │ │
│  │   Data   │ │TypeScript│ │  Config  │ │
│  └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│            Database Layer               │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│  │  MySQL   │ │ DB-Init  │ │ Backup   │ │
│  │  :64306  │ │ (setup)  │ │ System   │ │
│  └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────┘

Storage Structure

storage/azerothcore/
├── config/           # Server configuration files
├── data/             # Game client data (maps, DBC files)
├── logs/             # Server log files
├── modules/          # Module source code and configs
├── lua_scripts/      # Eluna Lua scripts
├── mysql-data/       # Database files
└── backups/          # Automated database backups

🛠️ Management Commands

Health Monitoring

# Check all containers
docker ps

# View service logs
docker logs ac-worldserver -f
docker logs ac-authserver -f
docker logs ac-post-install -f

# Check module installation
docker logs ac-modules --tail 50

Module Management

# Analyze module configuration
./scripts/configure-modules.sh

# Setup Lua scripting environment
./scripts/setup-eluna.sh

# Test Eluna scripts
docker exec ac-worldserver /bin/bash -c 'echo "reload eluna"'

Database Operations

# Access database via phpMyAdmin
open http://localhost:8081

# Direct MySQL access
docker exec -it ac-mysql mysql -u root -p

# Manual backup
./scripts/backup.sh

# View backup status and restore options
ls -la storage/azerothcore/backups/

Backup and Restoration System

The stack includes an intelligent backup and restoration system that automatically:

Automated Backup Schedule

  • Hourly backups: Retained for 6 hours (configurable via BACKUP_RETENTION_HOURS)
  • Daily backups: Retained for 3 days (configurable via BACKUP_RETENTION_DAYS)
  • Automatic cleanup: Old backups removed based on retention policies

Smart Backup Detection

  • Multiple format support: Detects daily, hourly, and legacy timestamped backups
  • Priority-based selection: Automatically selects the most recent available backup
  • Integrity validation: Verifies backup files before attempting restoration

Intelligent Startup Process

  • Automatic restoration: Detects and restores from existing backups on startup
  • Conditional import: Skips database import when backup restoration succeeds
  • Data protection: Prevents overwriting restored data with fresh schema
  • Status tracking: Creates markers to communicate restoration status between services

Backup Structure

storage/azerothcore/backups/
├── daily/
│   └── YYYYMMDD_HHMMSS/          # Daily backup directories
│       ├── acore_auth.sql.gz
│       ├── acore_characters.sql.gz
│       ├── acore_world.sql.gz
│       └── manifest.json
└── hourly/
    └── YYYYMMDD_HHMMSS/          # Hourly backup directories
        ├── acore_auth.sql.gz
        ├── acore_characters.sql.gz
        └── acore_world.sql.gz

Manual Backup Operations

# Create immediate backup
./scripts/backup.sh

# Restore from specific backup (interactive)
./scripts/restore.sh YYYYMMDD_HHMMSS

# View backup contents
zcat storage/azerothcore/backups/daily/20241004_090000/acore_world.sql.gz | head

# Check restoration status
cat storage/azerothcore/mysql-data/.restore-completed

🔧 Troubleshooting

Common Issues

Containers failing to start

# Check container logs
docker logs <container_name>

# Verify network connectivity
docker network ls | grep azerothcore

# Check port conflicts
ss -tulpn | grep -E "(3784|8215|8081|4201)"

Module not working

# Check if module is enabled
grep MODULE_NAME docker-compose-azerothcore-services.env

# Verify module installation
ls storage/azerothcore/modules/

# Check configuration files
ls storage/azerothcore/config/mod_*.conf*

Database connection issues

# Verify MySQL is running
docker exec ac-mysql mysql -u root -p -e "SELECT 1;"

# Check database initialization and backup detection
docker logs ac-db-init

# Check conditional import status
docker logs ac-db-import

Backup and restoration issues

# Check backup detection and restoration status
docker logs ac-db-init | grep -E "(backup|restore)"

# Verify backup directory contents
ls -la storage/azerothcore/backups/

# Check restoration status markers
ls -la storage/azerothcore/mysql-data/.restore-*
cat storage/azerothcore/mysql-data/.restore-completed

# Force fresh database import (if needed)
rm -f storage/azerothcore/mysql-data/.restore-*
docker compose -f docker-compose-azerothcore-database.yml restart ac-db-init

Getting Help

Run the configuration analysis tool for specific guidance:

./scripts/configure-modules.sh

📚 Additional Documentation


🎯 Next Steps After Installation

  1. Test Client Connection - Connect with WoW 3.3.5a client
  2. Spawn Required NPCs - Use GM commands for service modules
  3. Apply Client Patches - For mod-arac and mod-individual-progression
  4. Test Module Functionality - Verify each module works as expected

📄 Implementation Credits

This project builds upon:

Key Improvements

  • Fully Automated Setup - Interactive configuration script
  • 13 Enhanced Modules - Complete gameplay enhancement suite
  • Production Ready - Health checks, backups, monitoring
  • Cross-Platform - Docker and Podman support
  • Comprehensive Documentation - Clear setup and troubleshooting guides
Languages
Shell 85.8%
Python 11.6%
Go 2.6%