Setup, operation, and automation of a Linux-based multiplayer server, including network troubleshooting, monitoring, and CI-like automation - built as a personal learning project.
Detailed documentation:
- Tunneling & Networking - network diagnosis, database fixes, evaluated approaches, final configuration
- Automation set up - automation scripts, monitoring
- Discord Integration - relay server data to text channels
- Changelog - history of this project's features
This is a somewhat in-order list for the documentation based on when you will probably be needing each part.
azerothcore-infra/
├── config/
│ └── discord-webhooks.conf.example
├── docs/
│ ├── AUTOMATION.md
│ ├── NOTIFICATION-SYSTEM.md
│ └── TUNNELING.md
├── scripts/
│ ├── hourly-reports.sh
│ ├── memlogs.sh
│ ├── notify.sh
│ ├── scheduled-restart.sh
│ ├── server-start.sh
│ ├── server-stop.sh
│ └── watchdog.sh
├── README.md
├── bashrc-functions.sh
└── changelog.md
This project covers my journey of setting up a persistent application server on a Linux machine, which could be your main machine, a VM on your main machine, a cloud VM, a Raspberry Pi or any other device with enough memory and an internet connection. You could find any one piece of information in here useful for your own projects. It is meant more as a documentation of all the interesting facts I learned throughout and less as a comprehensive, all-encompassing guide. It includes:
- Network diagnosis and resolution aka. my friends can't connect to my server, what do I do?
- Fully automated monitoring and maintenance via Cron-Jobs. This includes server-data logging, scheduled controlled restart and a watchdog process for detecting crashed services and automatically restarting them
- External Discord notifications via REST API integration for relaying analytics data gained from monitoring processes. Make relevant information such as server status, performance and scheduled restarts easily accesible.
The focus of this repo is not the server application itself (which is open source, see AzerothCore), but the independently developed infrastructure and automation layer built on top of it. I will not be going into the server installation itself and instead point you to the official wiki and this video guide that I myself followed.
AzerothCore is a modular server solution, meaning it was developed as a solid core to which auxilary modules can be attached with relative ease. The server this documentation is based has the following modules installed:
- Playerbots
- AHBot
- MultiBot Bridge serverside + MultiBot Chatless client side
- Dungeon Clear serverside + Dungeon Clear Addon client side
These are just listed for the sake of completeness, as the scripts talked about here don't rely on any other software other than the base core.
Player Client
│
├─────────────────────────────┐
│ │
▼ │
Tunnel Service │
(optional, see docs/TUNNELING.md) │
│ │
│ │
├─────────────────────────────┘
│
▼
Your server
│
├── AzerothCore applications and databases
├── systemd services -> tunnel clients, auto-start
├── Cron jobs -> scheduled restarts, watchdog, memory logging
└── Bash automation -> status checks, deployment scripts
│
▼
Discord Webhooks (status, monitoring, and warning alerts)
- CGNAT/DS-Lite diagnosis: systematically narrowed down a network issue across multiple layers (router configuration → ISP connection type → cloud firewall →
tcpdumppacket analysis) - Database root-cause analysis: traced a schema constraint error that was silently breaking player logins, from application logs down to the exact cause
- Long-term monitoring: logged and analyzed memory usage across multiple test runs (up to 48h) to distinguish normal caching behavior from genuine resource growth
- Fully automated operations: scheduled restarts with staggered player warnings, automatic crash detection and recovery, real-time Discord notifications
- Scripting: Bash
- Database: MySQL
- OS/Infrastructure: Linux (Debian13), systemd, cron, ufw/iptables
- Networking: NAT traversal, TCP tunneling, DDNS
- Integration: REST APIs (curl, JSON), Discord Webhooks
This is a personal learning project. The underlying application server is based on AzerothCore (open source, AGPL-3.0).