From ea39506bcc8f33910a24975549b597c08f1d0498 Mon Sep 17 00:00:00 2001 From: uprightbass360 Date: Sat, 1 Nov 2025 05:49:37 -0400 Subject: [PATCH] cleanup/docs --- README.md | 869 +++++++++++++++++++++++++---------- modules-state.json | 1085 -------------------------------------------- modules.env | 51 --- 3 files changed, 618 insertions(+), 1387 deletions(-) delete mode 100644 modules-state.json delete mode 100644 modules.env diff --git a/README.md b/README.md index 612a510..a0fb31c 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,32 @@ # AzerothCore Docker/Compose Stack -A complete containerized deployment of AzerothCore WoW 3.3.5a (Wrath of the Lich King) private server with 20+ enhanced modules, intelligent automation, and production-ready features. +A complete containerized deployment of AzerothCore WoW 3.3.5a (Wrath of the Lich King) private server with 30+ enhanced modules and intelligent automation. ## ๐Ÿš€ Quick Start ### Prerequisites -- **Docker** or **Podman** with Docker Compose -- **4GB+ RAM** and **20GB+ storage** +- **Docker** with Docker Compose +- **16GB+ RAM** and **32GB+ storage** - **Linux/macOS/WSL2** (Windows with WSL2 recommended) -### โšก Automated Setup (Recommended) +### Three Simple Steps -**1. Get the Code** ```bash +# 1. Get the code git clone https://github.com/uprightbass360/acore-compose.git cd acore-compose -``` -**2. Run Interactive Setup** -```bash +# 2. Configure your server ./setup.sh + +# 3. Build (if using modules/playerbots) and deploy +./build.sh # Optional - only if you enabled C++ modules or playerbots +./deploy.sh # Always required ``` -**3. Deploy Your Realm** -```bash -./deploy.sh -``` +**First deployment takes 30-60 minutes** for database setup and client data download. Subsequent starts are much faster. -> โ„น๏ธ **Image Sources:** Vanilla/standard profiles run the upstream `acore/*` images. As soon as you enable playerbots or any C++ module, the toolchain compiles locally and retags the results to your compose project name (for example, `acore-compose:authserver-playerbots`, `acore-compose:worldserver-playerbots`, `acore-compose:db-import-playerbots`, `acore-compose:client-data-playerbots`, and `acore-compose:authserver-modules-latest`), keeping everything self-contained. - -**4. Create Admin Account** - -Once the worldserver is running: - -```bash -# 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**: -```bash -# 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 Realm** -- **Game Server**: `your-server-ip:8215` (or port you configured) -- **Database Admin**: http://localhost:8081 (phpMyAdmin) -- **Game Content Editor**: http://localhost:4201 (Keira3) - -โœ… **That's it!** Your realm is ready with all enabled modules installed and configured. +See [Local Deployment](#-local-deployment) for detailed walkthrough. --- @@ -91,50 +43,48 @@ set realmlist 203.0.113.100 8215 All modules are automatically downloaded, configured, and SQL scripts executed when enabled: -| Module | Description | Default Status | -|--------|-------------|----------------| -| **[mod-solo-lfg](https://github.com/azerothcore/mod-solo-lfg)** | A solo-friendly queue that lets every player run dungeons without needing a premade group. | โœ… ENABLED | -| **[mod-solocraft](https://github.com/azerothcore/mod-solocraft)** | Automatically scales dungeon and raid encounters so solo players or small teams can clear content. | โœ… ENABLED | -| **[mod-autobalance](https://github.com/azerothcore/mod-autobalance)** | Adjusts creature health and damage in real time to keep fights tuned for the current party size. | โœ… ENABLED | -| **[mod-transmog](https://github.com/azerothcore/mod-transmog)** | Adds a transmogrification vendor so players can restyle gear without changing stats. | โœ… ENABLED | -| **[mod-npc-buffer](https://github.com/azerothcore/mod-npc-buffer)** | Provides a ready-to-use buff NPC who hands out class buffs, food, and utility spells. | โœ… ENABLED | -| **[mod-learn-spells](https://github.com/azerothcore/mod-learn-spells)** | Teaches class spells automatically at the correct level to streamline leveling. | โœ… ENABLED | -| **[mod-fireworks](https://github.com/azerothcore/mod-fireworks-on-level)** | Spawns celebratory fireworks whenever a player dings a new level. | โœ… ENABLED | -| **[mod-playerbots](https://github.com/mod-playerbots/mod-playerbots)** | Adds scriptable playerbot characters that can form dungeon parties, raid, and PvP with humans. | ๐Ÿ”ง OPTIONAL | -| **[mod-aoe-loot](https://github.com/azerothcore/mod-aoe-loot)** | Lets characters loot multiple corpses with one click for faster farming. | ๐Ÿ”ง OPTIONAL | -| **[mod-individual-progression](https://github.com/ZhengPeiRu21/mod-individual-progression)** | Tracks each character through Vanilla โ†’ TBC โ†’ WotLK progression, unlocking content sequentially. | โŒ DISABLED* | -| **[mod-ahbot](https://github.com/azerothcore/mod-ahbot)** | Populates the auction house with configurable buying/selling behavior to keep markets active. | โŒ DISABLED* | -| **[mod-dynamic-xp](https://github.com/azerothcore/mod-dynamic-xp)** | Tweaks XP gain based on population or custom rules to keep leveling flexible. | ๐Ÿ”ง OPTIONAL | -| **[mod-1v1-arena](https://github.com/azerothcore/mod-1v1-arena)** | Creates a structured 1v1 ranked arena ladder for duel enthusiasts. | ๐Ÿ”ง OPTIONAL | -| **[mod-phased-duels](https://github.com/azerothcore/mod-phased-duels)** | Moves duelers into their own phase to block interference and griefing. | ๐Ÿ”ง OPTIONAL | -| **[mod-breaking-news](https://github.com/azerothcore/mod-breaking-news-override)** | Replaces the client breaking-news panel with server-managed announcements. | โŒ DISABLED* | -| **[mod-boss-announcer](https://github.com/azerothcore/mod-boss-announcer)** | Broadcasts dramatic messages when raid bosses fall to your players. | ๐Ÿ”ง OPTIONAL | -| **[mod-account-achievements](https://github.com/azerothcore/mod-account-achievements)** | Shares achievements across characters on the same account for persistent milestones. | ๐Ÿ”ง OPTIONAL | -| **[mod-auto-revive](https://github.com/azerothcore/mod-auto-revive)** | Automatically resurrects characters on deathโ€”handy for casual PvE or testing realms. | ๐Ÿ”ง OPTIONAL | -| **[mod-gain-honor-guard](https://github.com/azerothcore/mod-gain-honor-guard)** | Awards honor when players kill city guards, spicing up world PvP raids. | ๐Ÿ”ง OPTIONAL | -| **[mod-arac](https://github.com/heyitsbench/mod-arac)** | Unlocks every race/class pairing so players can roll any combination they want (needs client patch). | ๐Ÿ”ง OPTIONAL | -| **[mod-time-is-time](https://github.com/dunjeon/mod-TimeIsTime)** | Adds experimental time-twisting mechanics suited for custom events (requires extra tuning). | โŒ DISABLED* | -| **[mod-pocket-portal](https://github.com/azerothcore/mod-pocket-portal)** | Gives players a portal gadget for quick travel to configured destinations. | โŒ DISABLED* | -| **[mod-random-enchants](https://github.com/azerothcore/mod-random-enchants)** | Rolls randomised stat bonuses on loot to add Diablo-style gear chasing. | ๐Ÿ”ง OPTIONAL | -| **[mod-pvp-titles](https://github.com/azerothcore/mod-pvp-titles)** | Restores classic honor titles with a configurable ranking ladder. | ๐Ÿ”ง OPTIONAL | -| **[mod-npc-beastmaster](https://github.com/azerothcore/mod-npc-beastmaster)** | Adds an NPC who can teach, reset, and manage hunter pets for convenience. | โŒ DISABLED* | -| **[mod-npc-enchanter](https://github.com/azerothcore/mod-npc-enchanter)** | Introduces an enchanting vendor who applies enchants directly for a fee. | โŒ DISABLED* | -| **[mod-assistant](https://github.com/noisiver/mod-assistant)** | Spawns an all-purpose assistant NPC with heirlooms, professions, and convenience commands. | ๐Ÿ”ง OPTIONAL | -| **[mod-reagent-bank](https://github.com/ZhengPeiRu21/mod-reagent-bank)** | Lets players stash crafting reagents with a dedicated banker NPC. | ๐Ÿ”ง OPTIONAL | -| **[mod-black-market](https://github.com/Youpeoples/Black-Market-Auction-House)** | Backports the Mists-era Black Market Auction House via Eluna scripts. | ๐Ÿ”ง OPTIONAL | -| **[mod-instance-reset](https://github.com/azerothcore/mod-instance-reset)** | Adds commands to reset instances quicklyโ€”useful for testing or events. | โŒ DISABLED* | -| **[mod-challenge-modes](https://github.com/ZhengPeiRu21/mod-challenge-modes)** | Implements keystone-style timed runs with leaderboards and scaling modifiers. | ๐Ÿ”ง OPTIONAL | -| **[mod-ollama-chat](https://github.com/DustinHendrickson/mod-ollama-chat)** | Connects playerbots to an Ollama LLM so they can chat with humans organically. | โŒ DISABLED* | -| **[mod-player-bot-level-brackets](https://github.com/DustinHendrickson/mod-player-bot-level-brackets)** | Keeps bot levels spread evenly across configured brackets to match your player base. | ๐Ÿ”ง OPTIONAL | -| **[mod-bg-slaveryvalley](https://github.com/Helias/mod-bg-slaveryvalley)** | Adds the Slavery Valley battleground complete with objectives and queue hooks. | โŒ DISABLED* | -| **[mod-azerothshard](https://github.com/azerothcore/mod-azerothshard)** | Bundles AzerothShard tweaks: utility NPCs, scripted events, and gameplay improvements. | ๐Ÿ”ง OPTIONAL | -| **[mod-worgoblin](https://github.com/heyitsbench/mod-worgoblin)** | Enables Worgen and Goblin characters, including necessary DB/DBC adjustments (client patch required). | โŒ DISABLED* | -| **[StatBooster](https://github.com/AnchyDev/StatBooster)** | Lets players refine gear stats by rerolling random enchantments with special materials. | ๐Ÿ”ง OPTIONAL | -| **[DungeonRespawn](https://github.com/AnchyDev/DungeonRespawn)** | Teleports dead players back to the dungeon entrance instead of a distant graveyard. | ๐Ÿ”ง OPTIONAL | -| **[skeleton-module](https://github.com/azerothcore/skeleton-module)** | Provides a minimal AzerothCore module scaffold so you can build new features quickly. | ๐Ÿ”ง OPTIONAL | -| **[eluna-ts](https://github.com/azerothcore/eluna-ts)** | Adds a TS-to-Lua workflow so Eluna scripts can be authored with modern tooling. | ๐Ÿ”ง OPTIONAL | - -*\* Disabled modules require additional configuration or have compatibility issues* +| Module | Description | +|--------|-------------| +| **[mod-solo-lfg](https://github.com/azerothcore/mod-solo-lfg)** | A solo-friendly queue that lets every player run dungeons without needing a premade group. | +| **[mod-solocraft](https://github.com/azerothcore/mod-solocraft)** | Automatically scales dungeon and raid encounters so solo players or small teams can clear content. | +| **[mod-autobalance](https://github.com/azerothcore/mod-autobalance)** | Adjusts creature health and damage in real time to keep fights tuned for the current party size. | +| **[mod-transmog](https://github.com/azerothcore/mod-transmog)** | Adds a transmogrification vendor so players can restyle gear without changing stats. | +| **[mod-npc-buffer](https://github.com/azerothcore/mod-npc-buffer)** | Provides a ready-to-use buff NPC who hands out class buffs, food, and utility spells. | +| **[mod-learn-spells](https://github.com/azerothcore/mod-learn-spells)** | Teaches class spells automatically at the correct level to streamline leveling. | +| **[mod-fireworks](https://github.com/azerothcore/mod-fireworks-on-level)** | Spawns celebratory fireworks whenever a player dings a new level. | +| **[mod-playerbots](https://github.com/mod-playerbots/mod-playerbots)** | Adds scriptable playerbot characters that can form dungeon parties, raid, and PvP with humans. | +| **[mod-aoe-loot](https://github.com/azerothcore/mod-aoe-loot)** | Lets characters loot multiple corpses with one click for faster farming. | +| **[mod-individual-progression](https://github.com/ZhengPeiRu21/mod-individual-progression)** | Tracks each character through Vanilla โ†’ TBC โ†’ WotLK progression, unlocking content sequentially. | +| **[mod-ahbot](https://github.com/azerothcore/mod-ahbot)** | Populates the auction house with configurable buying/selling behavior to keep markets active. | +| **[mod-dynamic-xp](https://github.com/azerothcore/mod-dynamic-xp)** | Tweaks XP gain based on population or custom rules to keep leveling flexible. | +| **[mod-1v1-arena](https://github.com/azerothcore/mod-1v1-arena)** | Creates a structured 1v1 ranked arena ladder for duel enthusiasts. | +| **[mod-phased-duels](https://github.com/azerothcore/mod-phased-duels)** | Moves duelers into their own phase to block interference and griefing. | +| **[mod-breaking-news](https://github.com/azerothcore/mod-breaking-news-override)** | Replaces the client breaking-news panel with server-managed announcements. | +| **[mod-boss-announcer](https://github.com/azerothcore/mod-boss-announcer)** | Broadcasts dramatic messages when raid bosses fall to your players. | +| **[mod-account-achievements](https://github.com/azerothcore/mod-account-achievements)** | Shares achievements across characters on the same account for persistent milestones. | +| **[mod-auto-revive](https://github.com/azerothcore/mod-auto-revive)** | Automatically resurrects characters on deathโ€”handy for casual PvE or testing realms. | +| **[mod-gain-honor-guard](https://github.com/azerothcore/mod-gain-honor-guard)** | Awards honor when players kill city guards, spicing up world PvP raids. | +| **[mod-arac](https://github.com/heyitsbench/mod-arac)** | Unlocks every race/class pairing so players can roll any combination they want (needs client patch). | +| **[mod-time-is-time](https://github.com/dunjeon/mod-TimeIsTime)** | Adds experimental time-twisting mechanics suited for custom events (requires extra tuning). | +| **[mod-pocket-portal](https://github.com/azerothcore/mod-pocket-portal)** | Gives players a portal gadget for quick travel to configured destinations. | +| **[mod-random-enchants](https://github.com/azerothcore/mod-random-enchants)** | Rolls randomised stat bonuses on loot to add Diablo-style gear chasing. | +| **[mod-pvp-titles](https://github.com/azerothcore/mod-pvp-titles)** | Restores classic honor titles with a configurable ranking ladder. | +| **[mod-npc-beastmaster](https://github.com/azerothcore/mod-npc-beastmaster)** | Adds an NPC who can teach, reset, and manage hunter pets for convenience. | +| **[mod-npc-enchanter](https://github.com/azerothcore/mod-npc-enchanter)** | Introduces an enchanting vendor who applies enchants directly for a fee. | +| **[mod-assistant](https://github.com/noisiver/mod-assistant)** | Spawns an all-purpose assistant NPC with heirlooms, professions, and convenience commands. | +| **[mod-reagent-bank](https://github.com/ZhengPeiRu21/mod-reagent-bank)** | Lets players stash crafting reagents with a dedicated banker NPC. | +| **[mod-black-market](https://github.com/Youpeoples/Black-Market-Auction-House)** | Backports the Mists-era Black Market Auction House via Eluna scripts. | +| **[mod-instance-reset](https://github.com/azerothcore/mod-instance-reset)** | Adds commands to reset instances quicklyโ€”useful for testing or events. | +| **[mod-challenge-modes](https://github.com/ZhengPeiRu21/mod-challenge-modes)** | Implements keystone-style timed runs with leaderboards and scaling modifiers. | +| **[mod-ollama-chat](https://github.com/DustinHendrickson/mod-ollama-chat)** | Connects playerbots to an Ollama LLM so they can chat with humans organically. | +| **[mod-player-bot-level-brackets](https://github.com/DustinHendrickson/mod-player-bot-level-brackets)** | Keeps bot levels spread evenly across configured brackets to match your player base. | +| **[mod-bg-slaveryvalley](https://github.com/Helias/mod-bg-slaveryvalley)** | Adds the Slavery Valley battleground complete with objectives and queue hooks. | +| **[mod-azerothshard](https://github.com/azerothcore/mod-azerothshard)** | Bundles AzerothShard tweaks: utility NPCs, scripted events, and gameplay improvements. | +| **[mod-worgoblin](https://github.com/heyitsbench/mod-worgoblin)** | Enables Worgen and Goblin characters, including necessary DB/DBC adjustments (client patch required). | +| **[StatBooster](https://github.com/AnchyDev/StatBooster)** | Lets players refine gear stats by rerolling random enchantments with special materials. | +| **[DungeonRespawn](https://github.com/AnchyDev/DungeonRespawn)** | Teleports dead players back to the dungeon entrance instead of a distant graveyard. | +| **[skeleton-module](https://github.com/azerothcore/skeleton-module)** | Provides a minimal AzerothCore module scaffold so you can build new features quickly. | +| **[eluna-ts](https://github.com/azerothcore/eluna-ts)** | Adds a TS-to-Lua workflow so Eluna scripts can be authored with modern tooling. | ### Module Summaries - **mod-solo-lfg** โ€“ Enables the Dungeon Finder for solo players so every character can queue without a full party. @@ -192,67 +142,180 @@ All modules are automatically downloaded, configured, and SQL scripts executed w - **Development Tools** - Script reloading with `.reload eluna` command - **Volume Mounting** - Hot-reload development environment -## ๐Ÿš€ Deploying to a Remote Server +--- -Use this workflow to build locally, then push the same stack to a remote host: +## ๐Ÿ—๏ธ Local Deployment -1. **Configure & Rebuild Locally** - ```bash - ./setup.sh - ./scripts/rebuild-with-modules.sh --yes - ``` - (Answer โ€œyโ€ to the rebuild prompt in `setup.sh`, or run the rebuild manually.) +Complete walkthrough for deploying on your local machine. -2. **Package & Push for Remote Deploy** *(also available via the interactive `./deploy.sh` prompt by choosing โ€œRemote hostโ€)* - ```bash - ./deploy.sh --yes \ - --remote-host docker-server \ - --remote-user sam \ - --remote-project-dir /home/sam/src/acore-compose - ``` - Add `--remote-identity ~/.ssh/id_ed25519` if you need a non-default SSH key, or `--remote-skip-storage` to avoid syncing the `storage/` directory. +### Step 1: Initial Setup -3. **Deploy Remotely** - ```bash -ssh docker-server ' - cd /home/sam/src/acore-compose && - ./deploy.sh --yes --no-watch -' - ``` - Because the `.env` now points the modules profile at your project-local tags (for example `acore-compose:authserver-modules-latest`), the remote compose run uses the build you just migratedโ€”no additional rebuild required. +**1.1 Clone the Repository** +```bash +git clone https://github.com/uprightbass360/acore-compose.git +cd acore-compose +``` -4. **Verify** - ```bash - ./status.sh --once - docker compose --profile services-playerbots logs --tail 100 ac-worldserver - ``` +**1.2 Run Interactive Setup** +```bash +./setup.sh +``` -### Remote Deploy Workflow -1. **Configure & Build Locally** - ```bash - ./setup.sh --module-config sam --playerbot-max-bots 3000 - ./scripts/rebuild-with-modules.sh --yes - ``` -2. **Migrate Stack to Remote** *(select โ€œRemote hostโ€ when running `./deploy.sh` interactively, or call it non-interactively as shown below)* - ```bash - ./deploy.sh --yes \ - --remote-host docker-server \ - --remote-user sam \ - --remote-project-dir /home/sam/src/acore-compose - ``` - (Under the hood this wraps `scripts/migrate-stack.sh`, exporting module images to `local-storage/images/acore-modules-images.tar` and syncing `storage/` unless `--remote-skip-storage` is provided.) -3. **Deploy on Remote Host** - ```bash -ssh docker-server ' - cd /home/sam/src/acore-compose && - ./deploy.sh --yes --no-watch -' - ``` -4. **Verify Services** - ```bash - ./status.sh --once - docker compose --profile services-playerbots logs --tail 100 ac-worldserver - ``` +The setup wizard will guide you through: +- **Server Configuration**: IP address, ports, timezone +- **Module Selection**: Choose from 30+ available modules or use presets +- **Storage Paths**: Configure NFS/local storage locations +- **Playerbot Settings**: Max bots, account limits (if enabled) +- **Backup Settings**: Retention policies for automated backups +- **Permissions**: User/group IDs for file ownership + +**Setup Output:** Creates `.env` file with your configuration + +### Step 2: Build Images (if using C++ modules or playerbots) + +```bash +./build.sh +``` + +**Skip this step if:** +- You're using only Lua/data modules +- You want vanilla AzerothCore without playerbots + +**Required when:** +- Playerbots enabled (`MODULE_PLAYERBOTS=1`) +- Any C++ module enabled (check `needs_build: true` in `config/modules.json`) + +**Build process:** +1. Clones AzerothCore source to `local-storage/source/` +2. Downloads and stages enabled modules +3. Compiles server binaries with modules +4. Creates Docker images tagged as `:authserver-modules-latest`, etc. +5. Takes 20-60 minutes depending on hardware + +### Step 3: Deploy Services + +```bash +./deploy.sh +``` + +**Deployment flow:** +1. Validates environment configuration +2. Auto-selects Docker Compose profile: + - `services-standard` - Vanilla AzerothCore + - `services-playerbots` - Playerbot build + - `services-modules` - Custom C++ modules build +3. Starts services in dependency order: + - Database layer (`ac-mysql`, `ac-db-init`, `ac-db-import`, `ac-backup`) + - Module management (`ac-modules`, `ac-post-install`) + - Client data (`ac-client-data`) + - Game servers (`ac-authserver`, `ac-worldserver`) +4. Tails worldserver logs (Ctrl+C to detach safely) + +**First deployment takes longer** due to: +- Database schema import (~5-10 minutes) +- Client data download (~15GB, ~10-30 minutes) +- Module SQL execution + +**Subsequent deployments** restore from backups and skip imports. + +### Step 4: Create Admin Account + +```bash +# Attach to worldserver console +docker attach ac-worldserver + +# Create admin account +account create admin yourpassword +account set gmlevel admin 3 -1 + +# Detach: Ctrl+P, Ctrl+Q (NOT Ctrl+C - that stops the server!) +``` + +### Step 5: Connect Game Client + +Edit `realmlist.wtf` in your WoW 3.3.5a client folder: +``` +set realmlist 127.0.0.1 +``` + +For custom ports: +``` +set realmlist 127.0.0.1 8215 +``` + +### Step 6: Access Management Tools + +- **phpMyAdmin**: http://localhost:8081 - Database administration +- **Keira3**: http://localhost:4201 - World database editor + +**Credentials:** +- Username: `root` +- Password: From `MYSQL_ROOT_PASSWORD` in `.env` + +--- + +## ๐Ÿš€ Remote Deployment + +Deploy your configured realm to a remote server while building images locally. + +### Remote Deployment Workflow + +**Step 1: Configure & Build Locally** +```bash +# Interactive configuration with module selection +./setup.sh + +# Build custom images (if using C++ modules or playerbots) +./build.sh --yes +``` + +**Step 2: Package & Transfer to Remote Host** + +You can deploy remotely in two ways: + +**Option A: Interactive (Recommended)** +```bash +./deploy.sh +# When prompted, select "2) Remote host (package for SSH deployment)" +# Follow prompts for hostname, username, and paths +``` + +**Option B: Non-Interactive** +```bash +./deploy.sh --yes \ + --remote-host your-server.com \ + --remote-user youruser \ + --remote-project-dir /home/youruser/acore-compose +``` + +Optional flags: +- `--remote-port 2222` - Custom SSH port +- `--remote-identity ~/.ssh/custom_key` - Specific SSH key +- `--remote-skip-storage` - Don't sync storage directory (fresh install on remote) + +**Step 3: Deploy on Remote Host** +```bash +ssh your-server.com +cd /home/youruser/acore-compose +./deploy.sh --yes --no-watch +``` + +The remote deployment uses the images you built locally (no rebuild needed). + +**Step 4: Verify Deployment** +```bash +./status.sh +# Check service logs +docker logs ac-worldserver -f +``` + +### What Gets Transferred + +The remote deployment process transfers: +- โœ… Docker images (exported to `local-storage/images/`) +- โœ… Project files (scripts, configs, docker-compose.yml, .env) +- โœ… Storage directory (unless `--remote-skip-storage` is used) +- โŒ Build artifacts (source code, compilation files stay local) ### Module Presets - Drop comma-separated module lists into `configurations/*.conf` (for example `configurations/playerbot-modules.conf`). @@ -269,37 +332,83 @@ ssh docker-server ' ## ๐Ÿ—๏ธ Architecture Overview ### Container Profiles + +```mermaid +flowchart TB + subgraph init["๐Ÿ”ง Initialization"] + direction LR + volinit["ac-volume-init
Docker Volume Permissions"] + storinit["ac-storage-init
Storage Directory Permissions"] + end + + subgraph database["๐Ÿ’พ Database Layer"] + direction LR + mysql["ac-mysql
MySQL 8.0
:64306"] + dbinit["ac-db-init
Database Creation"] + dbimport["ac-db-import
Schema Import"] + backup["ac-backup
Automated Backups"] + end + + subgraph clientdata["๐Ÿ“ฆ Client Data"] + client["ac-client-data
WoW Assets (~15GB)"] + end + + subgraph modmgmt["โš™๏ธ Module Management"] + direction LR + modmgr["ac-modules
Downloader & SQL"] + postinst["ac-post-install
Configuration"] + end + + subgraph services["๐ŸŽฎ Game Services"] + direction TB + subgraph standard["services-standard"] + direction LR + auth1["ac-authserver
:3784"] + world1["ac-worldserver
:8215, :7778"] + end + subgraph playerbots["services-playerbots"] + direction LR + auth2["ac-authserver-playerbots
:3784"] + world2["ac-worldserver-playerbots
:8215, :7778"] + end + subgraph mods["services-modules"] + direction LR + auth3["ac-authserver-modules
:3784"] + world3["ac-worldserver-modules
:8215, :7778"] + end + end + + subgraph tools["๐Ÿ› ๏ธ Management Tools"] + direction LR + pma["ac-phpmyadmin
:8081"] + keira["ac-keira3
:4201"] + end + + init -.-> database + database -.-> modmgmt + database -.-> clientdata + modmgmt -.-> services + clientdata -.-> services + database -.-> tools + + style init fill:#f5f5f5,stroke:#999,color:#000 + style database fill:#e1ffe1,stroke:#4caf50,color:#000 + style clientdata fill:#f0e1ff,stroke:#9c27b0,color:#000 + style modmgmt fill:#ffe1e1,stroke:#f44336,color:#000 + style services fill:#fff4e1,stroke:#ff9800,color:#000 + style tools fill:#e1f5ff,stroke:#2196f3,color:#000 + style standard fill:#fff9e1,color:#000 + style playerbots fill:#fff9e1,color:#000 + style mods fill:#fff9e1,color:#000 ``` -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ Tools Profile โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ phpMyAdmin โ”‚ โ”‚ Keira3 โ”‚ โ”‚ -โ”‚ โ”‚ :8081 โ”‚ โ”‚ :4201 โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ Services Profiles โ”‚ -โ”‚ Standard | Playerbots | Modules โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ Auth โ”‚ โ”‚ World โ”‚ โ”‚ Client โ”‚ โ”‚ -โ”‚ โ”‚ :3784 โ”‚ โ”‚ :8215 โ”‚ โ”‚ Data โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ Post-Install Config โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ Database & Module System โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ MySQL โ”‚ โ”‚ Module โ”‚ โ”‚ DB-Init โ”‚ โ”‚ -โ”‚ โ”‚ :64306 โ”‚ โ”‚ Manager โ”‚ โ”‚ Setup โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ DB-Importโ”‚ โ”‚ Backup System โ”‚ โ”‚ -โ”‚ โ”‚ Schema โ”‚ โ”‚ (Automated Tasks) โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -``` + +**Profile Notes:** +- **Initialization**: Auto-runs, no profile needed +- **Database Layer**: `profile: db` +- **Client Data**: `profile: client-data` or `client-data-bots` +- **Module Management**: `profile: modules` +- **Game Services**: ONE of `services-standard`, `services-playerbots`, or `services-modules` +- **Management Tools**: `profile: tools` ### Service Inventory & Ports @@ -322,16 +431,37 @@ ssh docker-server ' | `ac-keira3` | Game content editor | `4201 โ†’ 8080` | `tools` | ### Storage Structure + +The project uses a dual-storage approach for optimal performance: + +**Primary Storage** (`STORAGE_PATH` - default: NFS mount or shared storage) ``` storage/ -โ”œโ”€โ”€ config/ # Server configuration files +โ”œโ”€โ”€ config/ # Server configuration files (.conf) โ”œโ”€โ”€ logs/ # Server log files -โ”œโ”€โ”€ modules/ # Module source code and configs -โ”œโ”€โ”€ mysql-data/ # Database files (now under ./local-storage) +โ”œโ”€โ”€ modules/ # Downloaded module source code +โ”œโ”€โ”€ lua_scripts/ # Eluna Lua scripts (auto-loaded) +โ”œโ”€โ”€ install-markers/ # Module installation state tracking โ””โ”€โ”€ backups/ # Automated database backups + โ”œโ”€โ”€ daily/ # Daily backups (retained per BACKUP_RETENTION_DAYS) + โ””โ”€โ”€ hourly/ # Hourly backups (retained per BACKUP_RETENTION_HOURS) ``` -`ac-client-data` keeps unpacked game assets in the `${CLIENT_DATA_VOLUME:-ac-client-data}` Docker volume so reads stay on the local host, while download archives are cached under `${CLIENT_DATA_CACHE_PATH}` on fast local storage even when `${STORAGE_PATH}` points to remote or NFS storage. +**Local Storage** (`STORAGE_PATH_LOCAL` - default: `./local-storage`) +``` +local-storage/ +โ”œโ”€โ”€ mysql-data/ # MySQL persistent data (tmpfs runtime + persistent snapshot) +โ”œโ”€โ”€ client-data-cache/ # Downloaded WoW client data archives +โ”œโ”€โ”€ source/ # AzerothCore source repository (created during builds) +โ”‚ โ””โ”€โ”€ azerothcore-playerbots/ # Playerbot fork (when playerbots enabled) +โ””โ”€โ”€ images/ # Exported Docker images for remote deployment +``` + +**Docker Volumes** +- `ac-client-data` - Unpacked game client data (DBC, maps, vmaps, mmaps) +- `client-data-cache` - Temporary storage for client data downloads + +This separation ensures database and build artifacts stay on fast local storage while configuration, modules, and backups can be shared across hosts via NFS. --- @@ -371,26 +501,30 @@ http://YOUR_SERVER_IP:4201 **Note**: Initial Keira3 startup may show database connection errors until the world database import completes. This is expected behavior. ### Module Management + ```bash # Reconfigure modules via interactive setup ./setup.sh -# Deploy with specific profile -./deploy.sh --profile standard # Standard AzerothCore -./deploy.sh --profile playerbots # Playerbots branch -./deploy.sh --profile modules # Custom modules build +# Build custom images with enabled modules +./build.sh # Interactive build (prompts for confirmation) +./build.sh --yes # Auto-confirm build +./build.sh --force # Force rebuild regardless of state -# Module staging and compilation -./scripts/stage-modules.sh # Download and stage enabled modules (preps upright playerbot builds) -./scripts/rebuild-with-modules.sh --yes # Rebuild mod-playerbots images with your modules -./scripts/setup-source.sh # Initialize/update source repositories (auto-switches to playerbot fork for modules) +# Deploy with automatic profile selection +./deploy.sh # Auto-detects and deploys correct profile +./deploy.sh --profile standard # Force standard AzerothCore +./deploy.sh --profile playerbots # Force playerbots branch +./deploy.sh --profile modules # Force custom modules build -# Module configuration management +# Lower-level module operations +./scripts/stage-modules.sh # Download enabled modules +./scripts/setup-source.sh # Initialize AzerothCore source ./scripts/copy-module-configs.sh # Create module .conf files ./scripts/manage-modules-sql.sh # Execute module SQL scripts -# Launch management tooling (phpMyAdmin + Keira3) -./scripts/deploy-tools.sh +# Management tools +./scripts/deploy-tools.sh # Launch phpMyAdmin + Keira3 ``` ### Database Operations @@ -451,18 +585,57 @@ Interactive `.env` generator with module selection, server configuration, and de ./setup.sh --playerbot-max-bots 3000 # Set playerbot limits ``` -#### `deploy.sh` - High-Level Deployment Orchestrator -Module-aware deployment with automatic source builds and profile selection. +**Features:** +- Server address and port configuration +- Module selection with presets +- Storage path configuration (NFS/local) +- Playerbot configuration +- Backup retention settings +- User/group permission settings + +#### `build.sh` - Custom Image Builder +Compiles AzerothCore with enabled C++ modules and creates deployment-ready Docker images. ```bash -./deploy.sh # Auto-deploy with optimal profile +./build.sh # Interactive build +./build.sh --yes # Auto-confirm all prompts +./build.sh --force # Force rebuild regardless of state +./build.sh --source-path /custom/path # Use custom source path +./build.sh --skip-source-setup # Skip source repo setup +``` + +**What it does:** +- Clones/updates AzerothCore source repository +- Stages enabled modules into source tree +- Compiles server binaries with modules +- Builds and tags Docker images (`:authserver-modules-latest`, etc.) +- Updates build state markers + +#### `deploy.sh` - Deployment Orchestrator +Module-aware deployment with automatic profile selection and optional remote deployment. + +```bash +./deploy.sh # Interactive deployment +./deploy.sh --yes # Auto-confirm deployment ./deploy.sh --profile standard # Force standard AzerothCore ./deploy.sh --profile playerbots # Force playerbots branch ./deploy.sh --profile modules # Force custom modules build -./deploy.sh --skip-rebuild --no-watch # Deploy without rebuild/logs -./deploy.sh --keep-running # Deploy and exit (no log tailing) +./deploy.sh --no-watch # Don't tail worldserver logs +./deploy.sh --keep-running # Deploy and exit immediately + +# Remote deployment +./deploy.sh --remote-host server.com \ + --remote-user username \ + --remote-project-dir /path/to/project ``` +**Automated workflow:** +1. Loads environment configuration +2. Detects required profile based on enabled modules +3. Triggers build if C++ modules or playerbots enabled +4. Launches Docker Compose with appropriate profiles +5. Optionally migrates stack to remote host + #### `cleanup.sh` - Project Cleanup Utility Comprehensive cleanup with multiple destruction levels and safety checks. @@ -530,13 +703,7 @@ Downloads and stages enabled modules for source integration. ./scripts/stage-modules.sh # Stage all enabled modules ``` -#### `scripts/rebuild-with-modules.sh` - Source Compilation -Rebuilds AzerothCore with enabled C++ modules compiled into the binaries. - -```bash -./scripts/rebuild-with-modules.sh --yes # Rebuild with confirmation bypass -./scripts/rebuild-with-modules.sh --source ./custom/path # Custom source path -``` +Called automatically by `build.sh`. Downloads enabled modules from GitHub and prepares them for compilation. #### `scripts/setup-source.sh` - Source Repository Setup Initializes or updates AzerothCore source repositories for compilation. @@ -545,13 +712,29 @@ Initializes or updates AzerothCore source repositories for compilation. ./scripts/setup-source.sh # Setup source for current configuration ``` +Automatically clones the appropriate AzerothCore fork (main or playerbot) based on configuration. + #### `scripts/manage-modules.sh` - Module Management Container -Internal script that manages module lifecycle within the ac-modules container. +Internal script that runs inside the `ac-modules` container to handle module lifecycle: +- Downloads module source code +- Executes module SQL scripts +- Manages module configuration files +- Tracks installation state #### `config/modules.json` & `scripts/modules.py` -- Declarative manifest describing every supported module (repo, type, hooks, dependencies). -- `scripts/modules.py` reads the manifest and `.env`, generating `modules.env`, rebuild metadata, and shell-ready module maps. -- Build and deploy scripts source `modules.env`, while `manage-modules.sh` consumes the manifest at runtimeโ€”no more duplicated module lists. +Central module registry and management system: +- **`config/modules.json`** - Declarative manifest defining all 30+ supported modules with metadata: + - Repository URLs + - Module type (cpp, data, lua) + - Build requirements + - SQL scripts and config files + - Dependencies +- **`scripts/modules.py`** - Python helper that reads the manifest and `.env` to: + - Generate `modules.env` with enabled module lists + - Determine if rebuild is required + - Provide module metadata to shell scripts + +This centralized approach eliminates duplicate module definitions across scripts. #### `scripts/manage-modules-sql.sh` - Module Database Integration Executes module-specific SQL scripts for database schema updates. @@ -581,21 +764,30 @@ Automated post-deployment tasks including module configuration, service verifica ### Advanced Deployment Tools #### `scripts/migrate-stack.sh` - Remote Deployment Migration -Migrates locally built images and configuration to remote hosts. -You can call this directly, or use `./deploy.sh --remote-host --remote-user ` which wraps the same workflow. +Exports and transfers locally built images to remote hosts via SSH. ```bash ./scripts/migrate-stack.sh \ --host docker-server \ --user sam \ - --project-dir /home/sam/acore-compose # Migrate to remote host + --project-dir /home/sam/acore-compose ./scripts/migrate-stack.sh \ --host remote.example.com \ + --user deploy \ + --port 2222 \ --identity ~/.ssh/deploy_key \ - --skip-storage # Migrate without storage sync + --skip-storage ``` +**What it does:** +1. Exports module images to `local-storage/images/acore-modules-images.tar` +2. Syncs project files (.env, docker-compose.yml, scripts) via rsync/scp +3. Syncs storage directory (unless `--skip-storage`) +4. Imports images on remote host + +**Note:** Typically called via `./deploy.sh --remote-host` rather than directly. + #### `scripts/deploy-tools.sh` - Management Tools Deployment Deploys web-based management tools (phpMyAdmin, Keira3) independently. @@ -625,6 +817,86 @@ Runs inside the backup container to provide scheduled database backups. --- +--- + +## ๐Ÿ”„ Common Workflows + +### Changing Module Configuration + +```bash +# 1. Reconfigure modules +./setup.sh + +# 2. Rebuild if you changed C++ modules +./build.sh --yes + +# 3. Redeploy with new configuration +./deploy.sh +``` + +### Updating to Latest Code + +```bash +# Pull latest changes +git pull origin main + +# Rebuild images (if using modules/playerbots) +./build.sh --force + +# Restart services +docker compose down +./deploy.sh +``` + +### Managing Services + +```bash +# Check service status +./status.sh + +# View logs +docker logs ac-worldserver -f +docker logs ac-authserver -f +docker logs ac-mysql -f + +# Restart specific service +docker compose restart ac-worldserver + +# Stop all services +./stop-containers.sh + +# Start services +./start-containers.sh +``` + +### Database Management + +```bash +# Backup user data +./backup-export.sh + +# Restore user data +./backup-import.sh /path/to/backup + +# Access database directly +docker exec -it ac-mysql mysql -u root -p +``` + +### Cleaning Up + +```bash +# Soft cleanup (stop containers only) +./cleanup.sh --soft + +# Hard cleanup (remove containers and networks) +./cleanup.sh --hard + +# Nuclear cleanup (everything including images and data) +./cleanup.sh --nuclear --preserve-backups +``` + +--- + ## ๐Ÿ”ง Advanced Configuration ### Module-Specific Requirements @@ -655,19 +927,35 @@ Some modules require additional manual configuration after deployment: ### Profile Selection -The deployment system automatically selects profiles based on enabled modules: +The deployment system uses Docker Compose profiles to manage different configurations: -- **services-standard**: No special modules enabled -- **services-playerbots**: `MODULE_PLAYERBOTS=1` enabled -- **services-modules**: Any C++ modules enabled (requires source rebuild) +| Profile | When Used | Image Source | +|---------|-----------|--------------| +| `services-standard` | No C++ modules, no playerbots | Upstream `acore/*` images | +| `services-playerbots` | `MODULE_PLAYERBOTS=1` + no other C++ modules | Project-built `:*-playerbots` | +| `services-modules` | Any C++ module enabled (incl. playerbots + others) | Project-built `:*-modules-latest` | -### Custom Builds +**Profile selection is automatic** - `deploy.sh` analyzes your `.env` and selects the appropriate profile. -When C++ modules are enabled, the system automatically: -1. Clones/updates AzerothCore source -2. Syncs enabled modules into source tree -3. Rebuilds server images with modules compiled in -4. Tags custom images for deployment +### Build System + +**When builds are required:** +- Playerbots enabled (`MODULE_PLAYERBOTS=1`) +- Any C++ module enabled (see `needs_build: true` in `config/modules.json`) + +**Build workflow (`./build.sh`):** +1. Clones AzerothCore source to `local-storage/source/` + - Uses [mod-playerbots fork](https://github.com/mod-playerbots/azerothcore-wotlk) when playerbots enabled + - Uses [main AzerothCore](https://github.com/azerothcore/azerothcore-wotlk) otherwise +2. Stages enabled C++ modules into `modules/` directory within source +3. Compiles binaries using Dockerized build environment +4. Creates and tags images: + - `:authserver-playerbots` / `authserver-modules-latest` + - `:worldserver-playerbots` / `worldserver-modules-latest` + - `:client-data-playerbots` (playerbots only) + - `:db-import-playerbots` (playerbots only) + +**Build time:** 20-60 minutes depending on hardware and module count ### MySQL Runtime Storage & Timezone Data @@ -786,32 +1074,50 @@ ImportBackup/ # Used by backup-import.sh ### Custom Environment Configuration ```bash -# Generate environment with custom settings -./setup.sh +# Setup with specific module preset +./setup.sh --module-config sam --playerbot-max-bots 3000 + +# Build with custom source path +./build.sh --source-path /path/to/custom/azerothcore --force # Deploy with specific options ./deploy.sh --profile modules --no-watch --keep-running ``` -### Source Management +### Manual Source Management ```bash -# Setup/update AzerothCore source +# Initialize/update AzerothCore source repository ./scripts/setup-source.sh -# Rebuild with modules (manual) -./scripts/rebuild-with-modules.sh --yes --source ./custom/path +# Stage modules into source tree (called by build.sh) +./scripts/stage-modules.sh + +# Build images from prepared source +./build.sh --skip-source-setup ``` -### Cleanup Operations +### Manual Service Control ```bash # Stop all services docker compose --profile db --profile services-standard \ --profile services-playerbots --profile services-modules \ --profile client-data --profile modules --profile tools down -# Clean rebuild (modules changed) -rm -f storage/modules/.requires_rebuild -./deploy.sh --profile modules +# Start specific profile +docker compose --profile db --profile services-playerbots --profile tools up -d + +# Restart after configuration changes +docker compose restart ac-worldserver ac-authserver +``` + +### Force Rebuild +```bash +# Force complete rebuild (ignores build state markers) +./build.sh --force + +# Clean build artifacts and rebuild +rm -rf local-storage/source local-storage/images +./build.sh ``` --- @@ -824,11 +1130,72 @@ rm -f storage/modules/.requires_rebuild ## ๐ŸŽฏ Next Steps After Installation -1. **Test Client Connection** - Connect with WoW 3.3.5a client using configured realmlist -2. **Create Characters** - Test account creation and character creation -3. **Verify Modules** - Test enabled module functionality in-game -4. **Configure Optional Features** - Enable additional modules as needed -5. **Set Up Backups** - Configure automated backup retention policies +### In-Game Setup + +1. **Create GM Account** + ```bash + docker attach ac-worldserver + account create + account set gmlevel 3 -1 + ``` + +2. **Test Modules** - Verify enabled modules are working: + - Solo LFG: Queue for a dungeon solo + - Transmog: Use `.npc add 190010` to spawn transmog NPC + - Playerbots: Use `.bot add` command (if enabled) + +3. **Configure Realmlist** - Update server address in database: + ```sql + UPDATE acore_auth.realmlist + SET address = 'your-public-ip', port = 8215 + WHERE id = 1; + ``` + +### Server Administration + +1. **Set Up Monitoring** + ```bash + # Watch server status continuously + ./status.sh --watch + + # Monitor logs + docker logs ac-worldserver -f + ``` + +2. **Configure Backups** + - Review retention settings in `.env`: + - `BACKUP_RETENTION_DAYS=3` + - `BACKUP_RETENTION_HOURS=6` + - Test backup/restore: + ```bash + ./backup-export.sh + ./backup-import.sh /path/to/backup + ``` + +3. **Customize Modules** + - Edit module configs in `storage/config/mod_*.conf` + - Restart worldserver: `docker compose restart ac-worldserver` + +4. **Add Lua Scripts** + - Place scripts in `storage/lua_scripts/` + - Auto-loaded on worldserver start + - Reload with `.reload eluna` in-game + +### Performance Tuning + +1. **Database Optimization** + - Adjust `MYSQL_INNODB_BUFFER_POOL_SIZE` in `.env` + - Increase `MYSQL_RUNTIME_TMPFS_SIZE` for larger datasets + +2. **Playerbot Scaling** (if enabled) + - Tune `PLAYERBOT_MAX_BOTS` in `.env` + - Monitor memory usage: `docker stats ac-worldserver` + +3. **Network Configuration** + - Open firewall ports: + - `3784` (authserver) + - `8215` (worldserver) + - Configure NAT/port forwarding for public access --- @@ -841,6 +1208,6 @@ This project builds upon: ### Key Features - โœ… **Fully Automated Setup** - Interactive configuration and deployment - โœ… **Intelligent Module System** - Automatic source builds and profile selection -- โœ… **Production Ready** - Health checks, backups, monitoring -- โœ… **Cross-Platform** - Docker and Podman support +- โœ… **Automated Backups** - Health checks, scheduled backups, and monitoring +- โœ… **Docker-Based** - Containerized deployment for easy setup and portability - โœ… **Comprehensive Documentation** - Clear setup and troubleshooting guides diff --git a/modules-state.json b/modules-state.json deleted file mode 100644 index e500295..0000000 --- a/modules-state.json +++ /dev/null @@ -1,1085 +0,0 @@ -{ - "compile_modules": [ - "mod-aoe-loot", - "mod-learn-spells", - "mod-fireworks-on-level", - "mod-individual-progression", - "mod-ahbot", - "mod-autobalance", - "mod-transmog", - "mod-npc-buffer", - "mod-dynamic-xp", - "mod-solo-lfg", - "mod-1v1-arena", - "mod-phased-duels", - "mod-breaking-news-override", - "mod-boss-announcer", - "mod-account-achievements", - "mod-auto-revive", - "mod-gain-honor-guard", - "mod-ale", - "mod-TimeIsTime", - "mod-random-enchants", - "mod-solocraft", - "mod-pvp-titles", - "mod-npc-beastmaster", - "mod-npc-enchanter", - "mod-instance-reset", - "mod-quest-count-level", - "mod-arac", - "mod-assistant", - "mod-reagent-bank", - "mod-challenge-modes", - "mod-ollama-chat", - "mod-player-bot-level-brackets", - "StatBooster", - "skeleton-module", - "mod-bg-slaveryvalley", - "mod-azerothshard", - "mod-worgoblin" - ], - "enabled_modules": [ - "mod-playerbots", - "mod-aoe-loot", - "mod-learn-spells", - "mod-fireworks-on-level", - "mod-individual-progression", - "mod-ahbot", - "mod-autobalance", - "mod-transmog", - "mod-npc-buffer", - "mod-dynamic-xp", - "mod-solo-lfg", - "mod-1v1-arena", - "mod-phased-duels", - "mod-breaking-news-override", - "mod-boss-announcer", - "mod-account-achievements", - "mod-auto-revive", - "mod-gain-honor-guard", - "mod-ale", - "mod-TimeIsTime", - "mod-random-enchants", - "mod-solocraft", - "mod-pvp-titles", - "mod-npc-beastmaster", - "mod-npc-enchanter", - "mod-instance-reset", - "mod-quest-count-level", - "mod-arac", - "mod-assistant", - "mod-reagent-bank", - "mod-black-market", - "mod-challenge-modes", - "mod-ollama-chat", - "mod-player-bot-level-brackets", - "StatBooster", - "skeleton-module", - "mod-bg-slaveryvalley", - "mod-azerothshard", - "mod-worgoblin", - "eluna-ts" - ], - "env_path": "/home/upb/src/acore-compose/.env", - "errors": [], - "generated_at": "2025-10-31T20:30:32.837900+00:00", - "manifest_path": "/home/upb/src/acore-compose/config/modules.json", - "modules": [ - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "playerbots.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_PLAYERBOTS", - "module_type": "data", - "name": "mod-playerbots", - "needs_build": false, - "notes": "Installs SQL/config assets; core functionality is built into playerbot images", - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/mod-playerbots/mod-playerbots.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "mod_aoe_loot.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_AOE_LOOT", - "module_type": "cpp", - "name": "mod-aoe-loot", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-aoe-loot.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "mod_learnspells.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_LEARN_SPELLS", - "module_type": "cpp", - "name": "mod-learn-spells", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-learn-spells.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "mod_fireworks.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_FIREWORKS", - "module_type": "cpp", - "name": "mod-fireworks-on-level", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-fireworks-on-level.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "individual_progression.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_INDIVIDUAL_PROGRESSION", - "module_type": "cpp", - "name": "mod-individual-progression", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/ZhengPeiRu21/mod-individual-progression.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "mod_ahbot.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_AHBOT", - "module_type": "cpp", - "name": "mod-ahbot", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-ahbot.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "AutoBalance.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_AUTOBALANCE", - "module_type": "cpp", - "name": "mod-autobalance", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-autobalance.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "transmog.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_TRANSMOG", - "module_type": "cpp", - "name": "mod-transmog", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-transmog.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "npc_buffer.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_NPC_BUFFER", - "module_type": "cpp", - "name": "mod-npc-buffer", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-npc-buffer.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "Individual-XP.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_DYNAMIC_XP", - "module_type": "cpp", - "name": "mod-dynamic-xp", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-dynamic-xp.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "SoloLfg.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_SOLO_LFG", - "module_type": "cpp", - "name": "mod-solo-lfg", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-solo-lfg.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "1v1arena.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_1V1_ARENA", - "module_type": "cpp", - "name": "mod-1v1-arena", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-1v1-arena.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "phasedduels.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_PHASED_DUELS", - "module_type": "cpp", - "name": "mod-phased-duels", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-phased-duels.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "breaking_news.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_BREAKING_NEWS", - "module_type": "cpp", - "name": "mod-breaking-news-override", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-breaking-news-override.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "boss_announcer.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_BOSS_ANNOUNCER", - "module_type": "cpp", - "name": "mod-boss-announcer", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-boss-announcer.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "account_achievements.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_ACCOUNT_ACHIEVEMENTS", - "module_type": "cpp", - "name": "mod-account-achievements", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-account-achievements.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "AutoRevive.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_AUTO_REVIVE", - "module_type": "cpp", - "name": "mod-auto-revive", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-auto-revive.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "GainHonorGuard.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_GAIN_HONOR_GUARD", - "module_type": "cpp", - "name": "mod-gain-honor-guard", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-gain-honor-guard.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "mod_eluna.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_ELUNA", - "module_type": "cpp", - "name": "mod-ale", - "needs_build": true, - "notes": null, - "post_install_hooks": [ - "mod_ale_move_path_patch" - ], - "ref": null, - "repo": "https://github.com/azerothcore/mod-ale.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "mod-time_is_time.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_TIME_IS_TIME", - "module_type": "cpp", - "name": "mod-TimeIsTime", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/dunjeon/mod-TimeIsTime.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": "Requires C++20 std::format support patch before enabling", - "blocked": true, - "config_cleanup": [ - "pocketportal.conf*" - ], - "dependency_issues": [], - "enabled_effective": false, - "enabled_raw": false, - "errors": [], - "key": "MODULE_POCKET_PORTAL", - "module_type": "cpp", - "name": "mod-pocket-portal", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-pocket-portal.git", - "requires": [], - "sql": null, - "status": "blocked", - "value": "0", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "RandomEnchants.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_RANDOM_ENCHANTS", - "module_type": "cpp", - "name": "mod-random-enchants", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-random-enchants.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "Solocraft.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_SOLOCRAFT", - "module_type": "cpp", - "name": "mod-solocraft", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-solocraft.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "mod_pvptitles.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_PVP_TITLES", - "module_type": "cpp", - "name": "mod-pvp-titles", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-pvp-titles.git", - "requires": [ - "MODULE_ELUNA" - ], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "npc_beastmaster.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_NPC_BEASTMASTER", - "module_type": "cpp", - "name": "mod-npc-beastmaster", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-npc-beastmaster.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "npc_enchanter.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_NPC_ENCHANTER", - "module_type": "cpp", - "name": "mod-npc-enchanter", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-npc-enchanter.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "instance-reset.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_INSTANCE_RESET", - "module_type": "cpp", - "name": "mod-instance-reset", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-instance-reset.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "levelGrant.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_LEVEL_GRANT", - "module_type": "cpp", - "name": "mod-quest-count-level", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/michaeldelago/mod-quest-count-level.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [ - "arac.conf*" - ], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_ARAC", - "module_type": "cpp", - "name": "mod-arac", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/heyitsbench/mod-arac.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_ASSISTANT", - "module_type": "cpp", - "name": "mod-assistant", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/noisiver/mod-assistant.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_REAGENT_BANK", - "module_type": "cpp", - "name": "mod-reagent-bank", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/ZhengPeiRu21/mod-reagent-bank.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_BLACK_MARKET_AUCTION_HOUSE", - "module_type": "lua", - "name": "mod-black-market", - "needs_build": false, - "notes": null, - "post_install_hooks": [ - "black_market_copy_lua" - ], - "ref": null, - "repo": "https://github.com/Youpeoples/Black-Market-Auction-House.git", - "requires": [ - "MODULE_ELUNA" - ], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_CHALLENGE_MODES", - "module_type": "cpp", - "name": "mod-challenge-modes", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/ZhengPeiRu21/mod-challenge-modes.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_OLLAMA_CHAT", - "module_type": "cpp", - "name": "mod-ollama-chat", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/DustinHendrickson/mod-ollama-chat.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_PLAYER_BOT_LEVEL_BRACKETS", - "module_type": "cpp", - "name": "mod-player-bot-level-brackets", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/DustinHendrickson/mod-player-bot-level-brackets.git", - "requires": [ - "MODULE_PLAYERBOTS" - ], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_STATBOOSTER", - "module_type": "cpp", - "name": "StatBooster", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/AnchyDev/StatBooster.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": "Upstream override signature mismatch (OnBeforeTeleport); awaiting fix", - "blocked": true, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": false, - "enabled_raw": false, - "errors": [], - "key": "MODULE_DUNGEON_RESPAWN", - "module_type": "cpp", - "name": "DungeonRespawn", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/AnchyDev/DungeonRespawn.git", - "requires": [], - "sql": null, - "status": "blocked", - "value": "0", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_SKELETON_MODULE", - "module_type": "cpp", - "name": "skeleton-module", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/skeleton-module.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_BG_SLAVERYVALLEY", - "module_type": "cpp", - "name": "mod-bg-slaveryvalley", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/Helias/mod-bg-slaveryvalley.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_AZEROTHSHARD", - "module_type": "cpp", - "name": "mod-azerothshard", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/mod-azerothshard.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_WORGOBLIN", - "module_type": "cpp", - "name": "mod-worgoblin", - "needs_build": true, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/heyitsbench/mod-worgoblin.git", - "requires": [], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - }, - { - "block_reason": null, - "blocked": false, - "config_cleanup": [], - "dependency_issues": [], - "enabled_effective": true, - "enabled_raw": true, - "errors": [], - "key": "MODULE_ELUNA_TS", - "module_type": "tool", - "name": "eluna-ts", - "needs_build": false, - "notes": null, - "post_install_hooks": [], - "ref": null, - "repo": "https://github.com/azerothcore/eluna-ts.git", - "requires": [ - "MODULE_ELUNA" - ], - "sql": null, - "status": "active", - "value": "1", - "warnings": [] - } - ], - "requires_playerbot_source": true, - "warnings": [] -} diff --git a/modules.env b/modules.env deleted file mode 100644 index 085bb21..0000000 --- a/modules.env +++ /dev/null @@ -1,51 +0,0 @@ -# Autogenerated by scripts/modules.py -# Generated at 2025-10-31T20:30:32.837900+00:00 -export MODULES_MANIFEST="/home/upb/src/acore-compose/config/modules.json" -export MODULES_ENV_PATH="/home/upb/src/acore-compose/.env" -export MODULE_PLAYERBOTS=1 -export MODULE_AOE_LOOT=1 -export MODULE_LEARN_SPELLS=1 -export MODULE_FIREWORKS=1 -export MODULE_INDIVIDUAL_PROGRESSION=1 -export MODULE_AHBOT=1 -export MODULE_AUTOBALANCE=1 -export MODULE_TRANSMOG=1 -export MODULE_NPC_BUFFER=1 -export MODULE_DYNAMIC_XP=1 -export MODULE_SOLO_LFG=1 -export MODULE_1V1_ARENA=1 -export MODULE_PHASED_DUELS=1 -export MODULE_BREAKING_NEWS=1 -export MODULE_BOSS_ANNOUNCER=1 -export MODULE_ACCOUNT_ACHIEVEMENTS=1 -export MODULE_AUTO_REVIVE=1 -export MODULE_GAIN_HONOR_GUARD=1 -export MODULE_ELUNA=1 -export MODULE_TIME_IS_TIME=1 -export MODULE_POCKET_PORTAL=0 -export MODULE_RANDOM_ENCHANTS=1 -export MODULE_SOLOCRAFT=1 -export MODULE_PVP_TITLES=1 -export MODULE_NPC_BEASTMASTER=1 -export MODULE_NPC_ENCHANTER=1 -export MODULE_INSTANCE_RESET=1 -export MODULE_LEVEL_GRANT=1 -export MODULE_ARAC=1 -export MODULE_ASSISTANT=1 -export MODULE_REAGENT_BANK=1 -export MODULE_BLACK_MARKET_AUCTION_HOUSE=1 -export MODULE_CHALLENGE_MODES=1 -export MODULE_OLLAMA_CHAT=1 -export MODULE_PLAYER_BOT_LEVEL_BRACKETS=1 -export MODULE_STATBOOSTER=1 -export MODULE_DUNGEON_RESPAWN=0 -export MODULE_SKELETON_MODULE=1 -export MODULE_BG_SLAVERYVALLEY=1 -export MODULE_AZEROTHSHARD=1 -export MODULE_WORGOBLIN=1 -export MODULE_ELUNA_TS=1 -export MODULES_ENABLED="mod-playerbots mod-aoe-loot mod-learn-spells mod-fireworks-on-level mod-individual-progression mod-ahbot mod-autobalance mod-transmog mod-npc-buffer mod-dynamic-xp mod-solo-lfg mod-1v1-arena mod-phased-duels mod-breaking-news-override mod-boss-announcer mod-account-achievements mod-auto-revive mod-gain-honor-guard mod-ale mod-TimeIsTime mod-random-enchants mod-solocraft mod-pvp-titles mod-npc-beastmaster mod-npc-enchanter mod-instance-reset mod-quest-count-level mod-arac mod-assistant mod-reagent-bank mod-black-market mod-challenge-modes mod-ollama-chat mod-player-bot-level-brackets StatBooster skeleton-module mod-bg-slaveryvalley mod-azerothshard mod-worgoblin eluna-ts" -export MODULES_COMPILE="mod-aoe-loot mod-learn-spells mod-fireworks-on-level mod-individual-progression mod-ahbot mod-autobalance mod-transmog mod-npc-buffer mod-dynamic-xp mod-solo-lfg mod-1v1-arena mod-phased-duels mod-breaking-news-override mod-boss-announcer mod-account-achievements mod-auto-revive mod-gain-honor-guard mod-ale mod-TimeIsTime mod-random-enchants mod-solocraft mod-pvp-titles mod-npc-beastmaster mod-npc-enchanter mod-instance-reset mod-quest-count-level mod-arac mod-assistant mod-reagent-bank mod-challenge-modes mod-ollama-chat mod-player-bot-level-brackets StatBooster skeleton-module mod-bg-slaveryvalley mod-azerothshard mod-worgoblin" -export MODULES_REQUIRES_PLAYERBOT_SOURCE=1 -export MODULES_WARNING_COUNT=0 -export MODULES_ERROR_COUNT=0