This project provides a single Docker container running AzerothCore with the Playerbots module, including a built-in MySQL server. It uses Ubuntu 24.04 as the base image.
- Docker
- Docker Compose
This method uses the pre-built image from GitHub Container Registry.
-
Start the Server:
docker compose up -d
Note: The first run will be significantly longer as it compiles the server binaries and downloads client data. Subsequent runs will be faster.
-
Monitor Progress: You can check the logs to see the compilation and startup progress:
docker compose logs -f
If you want to build the image yourself (e.g., to modify the code):
- Uncomment the
build: .line indocker-compose.yml. - Build and Start:
docker compose up -d --build
The servers run inside tmux sessions within the container. To access them:
docker exec -it azerothcore bash -c "tmux attach -t world-session"Or use the alias inside the container:
docker exec -it azerothcore bash
# Then inside the shell:
wow(Press Ctrl+B then D to detach without stopping the server)
docker exec -it azerothcore bash -c "tmux attach -t auth-session"Or use the alias inside the container:
docker exec -it azerothcore bash
# Then inside the shell:
authThe following convenient aliases are available when you access the container shell (docker exec -it azerothcore bash):
wow: Attach to the World Server console (tmux session).auth: Attach to the Auth Server console (tmux session).stop: Stop the servers (kills tmux server).pb: Editplayerbots.confwith nano.world: Editworldserver.confwith nano.compile: Run the AzerothCore compilation (./acore.sh compiler all).build: Run the AzerothCore build (./acore.sh compiler build).update: Git pull the main repo and playerbots module.updatemods: Update all modules in themodulesdirectory.ah: Editmod_ahbot.confwith nano.
The setup persists data in the ./acore-data directory on your host machine:
./acore-data/mysql: Database files../acore-data/build: Compilation build files (speeds up recompilation)../acore-data/env: Contains binaries (bin), configuration (etc), and data (data).
You can edit configuration files in ./acore-data/env/dist/etc on your host machine and restart the container to apply changes.
The MySQL server is exposed on port 3306.
- User:
acore - Password:
acore - Database:
acore_world,acore_characters,acore_auth
To allow a remote user (e.g., from your host machine or another container) to access the database, you can configure it using a .env file.
- Copy
.env.exampleto.env:cp .env.example .env
- Edit
.envand uncomment/set the variables:MYSQL_REMOTE_USER=myuser MYSQL_REMOTE_PASSWORD=mypassword MYSQL_REMOTE_IP=192.168.1.5 # IP address allowed to connect # Use '%' for any IP (not recommended for production)
- Restart the container:
docker compose up -d
You can easily add extra modules (like Transmog, Autobalance, etc.) to your server.
Method 1: Using .env (Recommended)
- Add the
AC_MODSvariable to your.envfile with a space-separated list of Git URLs:AC_MODS=https://github.com/azerothcore/mod-transmog.git https://github.com/azerothcore/mod-autobalance.git - Restart the container. The startup script will clone the mods and automatically trigger a recompilation of the core.
docker compose up -d
Method 2: Using Volume Mount
- Place your mod directories inside
./acore-data/moduleson your host machine. - Restart the container. The script will detect the new files and recompile the core.
You can use Velld, a self-hosted database backup tool, to automate backups of your AzerothCore database. The "Remote MySQL Access" feature allows Velld to connect to the database container.
-
Update
.env: Add the following configuration for Velld to your.envfile:# Velld Configuration NEXT_PUBLIC_API_URL=http://localhost:8080 JWT_SECRET=your_jwt_secret_here_32_chars # Run: openssl rand -hex 32 ENCRYPTION_KEY=your_enc_key_here_64_chars # Run: openssl rand -hex 32 ADMIN_USERNAME_CREDENTIAL=admin ADMIN_PASSWORD_CREDENTIAL=password ALLOW_REGISTER=false
-
Update
docker-compose.yml: Add the Velld services to yourdocker-compose.ymlfile so they share the same network:services: # ... existing acore service ... velld-api: image: ghcr.io/dendianugerah/velld/api:latest ports: - "8080:8080" env_file: - .env volumes: - ./acore-data/velld-data:/app/data - ./acore-data/backups:/app/backups restart: unless-stopped velld-web: image: ghcr.io/dendianugerah/velld/web:latest ports: - "3000:3000" environment: NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL} ALLOW_REGISTER: ${ALLOW_REGISTER} depends_on: - velld-api restart: unless-stopped
-
Restart: Run
docker compose up -d. -
Configure Backup:
- Open Velld at
http://localhost:3000. - Login with the credentials defined in
.env. - Create a new Connection:
- Type: MySQL
- Host:
azerothcore(The container name) - Port:
3306 - User: The value of
MYSQL_REMOTE_USER - Password: The value of
MYSQL_REMOTE_PASSWORD - Database:
acore_world(oracore_characters,acore_auth)
- Open Velld at
- OS: Ubuntu 24.04
- Ports:
3724: Auth Server8085: World Server3306: MySQL
- Environment:
acoreuser is automatically created for the database.rootuser is used inside the container shell.