mirror of
https://github.com/uprightbass360/AzerothCore-RealmMaster.git
synced 2026-02-02 10:23:48 +00:00
documentation cleanup
This commit is contained in:
@@ -1,363 +0,0 @@
|
|||||||
# AzerothCore Automated Deployment System
|
|
||||||
|
|
||||||
## 🚀 Overview
|
|
||||||
|
|
||||||
This deployment system provides automated installation, monitoring, and management of AzerothCore World of Warcraft server on Debian systems with Docker. It features layered service deployment, comprehensive monitoring, and system service integration.
|
|
||||||
|
|
||||||
## 📋 Features
|
|
||||||
|
|
||||||
- **Layered Deployment**: Database → Services → Optional → Tools
|
|
||||||
- **Real-time Monitoring**: Health checks, alerts, and web dashboard
|
|
||||||
- **System Service**: Automatic startup on boot with systemd
|
|
||||||
- **Resource Management**: CPU, memory, and disk monitoring
|
|
||||||
- **Backup System**: Automated database backups with retention
|
|
||||||
- **Security**: User isolation, firewall rules, and secure defaults
|
|
||||||
- **Web Interface**: Real-time status at http://localhost:8080
|
|
||||||
|
|
||||||
## 🛠️ Prerequisites
|
|
||||||
|
|
||||||
### System Requirements
|
|
||||||
- **OS**: Debian 10+ (Ubuntu 18.04+ compatible)
|
|
||||||
- **RAM**: 4GB minimum, 8GB recommended
|
|
||||||
- **Disk**: 20GB free space minimum
|
|
||||||
- **Network**: Internet access for image downloads
|
|
||||||
|
|
||||||
### Software Requirements
|
|
||||||
```bash
|
|
||||||
# Install Docker
|
|
||||||
curl -fsSL https://get.docker.com | sh
|
|
||||||
sudo usermod -aG docker $USER
|
|
||||||
|
|
||||||
# Install Docker Compose
|
|
||||||
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
||||||
sudo chmod +x /usr/local/bin/docker-compose
|
|
||||||
|
|
||||||
# Reboot to apply group changes
|
|
||||||
sudo reboot
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🚀 Quick Start
|
|
||||||
|
|
||||||
### 1. Test Installation
|
|
||||||
```bash
|
|
||||||
# Clone or download the AzerothCore deployment files
|
|
||||||
cd /path/to/azerothcore-compose2
|
|
||||||
|
|
||||||
# Run comprehensive tests
|
|
||||||
./test-deployment.sh all
|
|
||||||
|
|
||||||
# Expected output: "All tests passed! 🎉"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Manual Deployment (Development)
|
|
||||||
```bash
|
|
||||||
# Start the stack manually
|
|
||||||
./azerothcore-deploy.sh start
|
|
||||||
|
|
||||||
# Monitor status
|
|
||||||
./azerothcore-deploy.sh status
|
|
||||||
|
|
||||||
# View logs
|
|
||||||
./azerothcore-deploy.sh logs ac-worldserver
|
|
||||||
|
|
||||||
# Stop the stack
|
|
||||||
./azerothcore-deploy.sh stop
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. System Service Installation (Production)
|
|
||||||
```bash
|
|
||||||
# Install as system service
|
|
||||||
sudo ./install-system-service.sh install
|
|
||||||
|
|
||||||
# Start services
|
|
||||||
sudo systemctl start azerothcore
|
|
||||||
|
|
||||||
# Check status
|
|
||||||
sudo systemctl status azerothcore
|
|
||||||
|
|
||||||
# Enable auto-start on boot (already enabled by installer)
|
|
||||||
sudo systemctl enable azerothcore
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📊 Monitoring & Management
|
|
||||||
|
|
||||||
### Web Dashboard
|
|
||||||
- **URL**: http://localhost:8080
|
|
||||||
- **Features**: Real-time service status, resource usage, recent alerts
|
|
||||||
- **Auto-refresh**: Updates every 30 seconds
|
|
||||||
|
|
||||||
### Command Line Monitoring
|
|
||||||
```bash
|
|
||||||
# Real-time monitoring
|
|
||||||
./azerothcore-monitor.sh monitor
|
|
||||||
|
|
||||||
# Generate status page
|
|
||||||
./azerothcore-monitor.sh status
|
|
||||||
|
|
||||||
# View alerts
|
|
||||||
./azerothcore-monitor.sh alerts
|
|
||||||
|
|
||||||
# View metrics
|
|
||||||
./azerothcore-monitor.sh metrics
|
|
||||||
```
|
|
||||||
|
|
||||||
### System Service Management
|
|
||||||
```bash
|
|
||||||
# Start services
|
|
||||||
sudo systemctl start azerothcore
|
|
||||||
|
|
||||||
# Stop services
|
|
||||||
sudo systemctl stop azerothcore
|
|
||||||
|
|
||||||
# Restart services
|
|
||||||
sudo systemctl restart azerothcore
|
|
||||||
|
|
||||||
# Check status
|
|
||||||
sudo systemctl status azerothcore
|
|
||||||
|
|
||||||
# View logs
|
|
||||||
sudo journalctl -u azerothcore -f
|
|
||||||
|
|
||||||
# Check monitoring service
|
|
||||||
sudo systemctl status azerothcore-monitor
|
|
||||||
|
|
||||||
# Check web service
|
|
||||||
sudo systemctl status azerothcore-web
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔧 Configuration
|
|
||||||
|
|
||||||
### Environment Files
|
|
||||||
- `.env-database-local`: Local development settings
|
|
||||||
- `.env-production`: Production optimized settings (auto-created during system install)
|
|
||||||
|
|
||||||
### Key Configuration Options
|
|
||||||
```bash
|
|
||||||
# Database settings
|
|
||||||
MYSQL_ROOT_PASSWORD=azerothcore123
|
|
||||||
DB_WAIT_RETRIES=60
|
|
||||||
DB_WAIT_SLEEP=10
|
|
||||||
|
|
||||||
# Performance settings
|
|
||||||
MYSQL_MAX_CONNECTIONS=200
|
|
||||||
MYSQL_INNODB_BUFFER_POOL_SIZE=512M
|
|
||||||
PLAYERBOT_MAX_BOTS=20
|
|
||||||
|
|
||||||
# Storage paths
|
|
||||||
STORAGE_PATH=./local-data # or /opt/azerothcore/data for system install
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🗂️ Directory Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
azerothcore-compose2/
|
|
||||||
├── azerothcore-deploy.sh # Main deployment script
|
|
||||||
├── azerothcore-monitor.sh # Monitoring script
|
|
||||||
├── install-system-service.sh # System service installer
|
|
||||||
├── test-deployment.sh # Test suite
|
|
||||||
├── docker-compose-*.yml # Service layer definitions
|
|
||||||
├── .env-* # Environment configurations
|
|
||||||
├── deployment-logs/ # Deployment logs
|
|
||||||
├── monitoring-logs/ # Monitoring logs
|
|
||||||
├── monitoring-web/ # Web dashboard files
|
|
||||||
├── local-data/ # Application data
|
|
||||||
├── backups/ # Database backups
|
|
||||||
└── backup-scripts/ # Backup scripts
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🚀 Deployment Layers
|
|
||||||
|
|
||||||
### 1. Database Layer
|
|
||||||
- **Services**: MySQL, DB Init, DB Import, Backup, Persistence
|
|
||||||
- **Purpose**: Core database infrastructure
|
|
||||||
- **Startup Time**: 2-5 minutes
|
|
||||||
|
|
||||||
### 2. Services Layer
|
|
||||||
- **Services**: Auth Server, World Server, Client Data
|
|
||||||
- **Purpose**: Core game servers
|
|
||||||
- **Startup Time**: 5-15 minutes (includes 15GB client data download)
|
|
||||||
|
|
||||||
### 3. Optional Layer
|
|
||||||
- **Services**: Eluna, Modules, Playerbots
|
|
||||||
- **Purpose**: Enhanced features and scripting
|
|
||||||
- **Startup Time**: 1-2 minutes
|
|
||||||
|
|
||||||
### 4. Tools Layer
|
|
||||||
- **Services**: PHPMyAdmin, Keira3, Grafana, InfluxDB
|
|
||||||
- **Purpose**: Management and monitoring interfaces
|
|
||||||
- **Startup Time**: 2-3 minutes
|
|
||||||
|
|
||||||
## 🔍 Troubleshooting
|
|
||||||
|
|
||||||
### Common Issues
|
|
||||||
|
|
||||||
#### Services Not Starting
|
|
||||||
```bash
|
|
||||||
# Check Docker daemon
|
|
||||||
sudo systemctl status docker
|
|
||||||
|
|
||||||
# Check logs
|
|
||||||
./azerothcore-deploy.sh logs [service-name]
|
|
||||||
|
|
||||||
# Check resource usage
|
|
||||||
docker stats
|
|
||||||
|
|
||||||
# Restart specific layer
|
|
||||||
docker-compose -f docker-compose-azerothcore-database.yml restart
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Database Connection Issues
|
|
||||||
```bash
|
|
||||||
# Test database connectivity
|
|
||||||
docker exec ac-mysql mysql -uroot -pazerothcore123 -e "SELECT 1;"
|
|
||||||
|
|
||||||
# Check database logs
|
|
||||||
docker logs ac-mysql
|
|
||||||
|
|
||||||
# Verify network
|
|
||||||
docker network ls | grep azerothcore
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Web Dashboard Not Accessible
|
|
||||||
```bash
|
|
||||||
# Check web service
|
|
||||||
sudo systemctl status azerothcore-web
|
|
||||||
|
|
||||||
# Check port availability
|
|
||||||
sudo netstat -tlnp | grep 8080
|
|
||||||
|
|
||||||
# Restart web service
|
|
||||||
sudo systemctl restart azerothcore-web
|
|
||||||
```
|
|
||||||
|
|
||||||
#### High Resource Usage
|
|
||||||
```bash
|
|
||||||
# Check container stats
|
|
||||||
docker stats
|
|
||||||
|
|
||||||
# Reduce playerbot count
|
|
||||||
# Edit .env: PLAYERBOT_MAX_BOTS=5
|
|
||||||
|
|
||||||
# Reduce MySQL buffer size
|
|
||||||
# Edit .env: MYSQL_INNODB_BUFFER_POOL_SIZE=256M
|
|
||||||
```
|
|
||||||
|
|
||||||
### Log Locations
|
|
||||||
|
|
||||||
#### Manual Deployment
|
|
||||||
- **Deployment Logs**: `./deployment-logs/`
|
|
||||||
- **Monitoring Logs**: `./monitoring-logs/`
|
|
||||||
- **Container Logs**: `docker logs [container-name]`
|
|
||||||
|
|
||||||
#### System Service
|
|
||||||
- **System Logs**: `sudo journalctl -u azerothcore`
|
|
||||||
- **Application Logs**: `/opt/azerothcore/deployment-logs/`
|
|
||||||
- **Monitoring Logs**: `/opt/azerothcore/monitoring-logs/`
|
|
||||||
|
|
||||||
## 🔐 Security Considerations
|
|
||||||
|
|
||||||
### Default Security Features
|
|
||||||
- Dedicated service user (`azerothcore`)
|
|
||||||
- Firewall rules for game ports only
|
|
||||||
- Database access restricted to localhost
|
|
||||||
- Non-root container execution where possible
|
|
||||||
- Secure systemd service configuration
|
|
||||||
|
|
||||||
### Additional Security Recommendations
|
|
||||||
```bash
|
|
||||||
# Configure UFW firewall
|
|
||||||
sudo ufw enable
|
|
||||||
sudo ufw default deny incoming
|
|
||||||
sudo ufw allow ssh
|
|
||||||
|
|
||||||
# Update system regularly
|
|
||||||
sudo apt update && sudo apt upgrade
|
|
||||||
|
|
||||||
# Monitor logs for suspicious activity
|
|
||||||
sudo journalctl -u azerothcore | grep -i error
|
|
||||||
|
|
||||||
# Change default passwords
|
|
||||||
# Edit .env: MYSQL_ROOT_PASSWORD=your-secure-password
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔄 Backup & Recovery
|
|
||||||
|
|
||||||
### Automated Backups
|
|
||||||
- **Schedule**: Daily at 3:00 AM (configurable)
|
|
||||||
- **Location**: `./backups/` or `/opt/azerothcore/backups/`
|
|
||||||
- **Retention**: 7 days (configurable)
|
|
||||||
- **Format**: SQL dumps with timestamp
|
|
||||||
|
|
||||||
### Manual Backup
|
|
||||||
```bash
|
|
||||||
# Create immediate backup
|
|
||||||
docker exec ac-mysql mysqldump -uroot -pazerothcore123 --all-databases > backup-$(date +%Y%m%d).sql
|
|
||||||
|
|
||||||
# Backup with backup script
|
|
||||||
./backup-scripts/backup.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Recovery
|
|
||||||
```bash
|
|
||||||
# Stop services
|
|
||||||
./azerothcore-deploy.sh stop
|
|
||||||
|
|
||||||
# Restore from backup
|
|
||||||
docker run --rm -v $(pwd)/backups:/backups -v azerothcore_mysql_data:/var/lib/mysql mysql:8.0 \
|
|
||||||
sh -c "mysql -uroot -pazerothcore123 < /backups/your-backup.sql"
|
|
||||||
|
|
||||||
# Restart services
|
|
||||||
./azerothcore-deploy.sh start
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🗑️ Uninstallation
|
|
||||||
|
|
||||||
### Manual Deployment
|
|
||||||
```bash
|
|
||||||
# Stop and remove containers
|
|
||||||
./azerothcore-deploy.sh stop
|
|
||||||
docker system prune -a --volumes
|
|
||||||
|
|
||||||
# Remove data (optional)
|
|
||||||
rm -rf local-data backups deployment-logs monitoring-logs
|
|
||||||
```
|
|
||||||
|
|
||||||
### System Service
|
|
||||||
```bash
|
|
||||||
# Run uninstaller
|
|
||||||
sudo /opt/azerothcore/uninstall.sh
|
|
||||||
|
|
||||||
# Follow prompts to remove data directories
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📞 Support
|
|
||||||
|
|
||||||
### Documentation
|
|
||||||
- [AzerothCore Wiki](https://www.azerothcore.org/wiki/)
|
|
||||||
- [Docker Documentation](https://docs.docker.com/)
|
|
||||||
- [Docker Compose Reference](https://docs.docker.com/compose/)
|
|
||||||
|
|
||||||
### Getting Help
|
|
||||||
1. Check logs for error messages
|
|
||||||
2. Run diagnostic tests: `./test-deployment.sh all`
|
|
||||||
3. Search [AzerothCore Discord](https://discord.gg/azerothcore)
|
|
||||||
4. Review [GitHub Issues](https://github.com/azerothcore/azerothcore-wotlk/issues)
|
|
||||||
|
|
||||||
### Performance Tuning
|
|
||||||
- Adjust `PLAYERBOT_MAX_BOTS` based on server capacity
|
|
||||||
- Tune MySQL settings for your hardware
|
|
||||||
- Monitor resource usage and scale accordingly
|
|
||||||
- Consider SSD storage for better I/O performance
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎉 Enjoy Your AzerothCore Server!
|
|
||||||
|
|
||||||
Your World of Warcraft server is now ready to accept connections:
|
|
||||||
|
|
||||||
- **Auth Server**: `localhost:3784`
|
|
||||||
- **World Server**: `localhost:8215`
|
|
||||||
- **Web Dashboard**: `http://localhost:8080`
|
|
||||||
- **Database**: `localhost:64306` (internal use)
|
|
||||||
|
|
||||||
Happy gaming! 🏰⚔️🛡️
|
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
# AzerothCore Deployment Guide
|
|
||||||
|
|
||||||
## 🚀 Quick Deployment Options
|
|
||||||
|
|
||||||
### **Option 1: Fast Deployment (Use Cached Images)**
|
|
||||||
Set this in `.env-core` for fastest deployment:
|
|
||||||
```bash
|
|
||||||
IMAGE_PULL_POLICY=if_not_present
|
|
||||||
SKIP_CLIENT_DATA_IF_EXISTS=true
|
|
||||||
ENABLE_PARALLEL_STARTUP=true
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Option 2: Always Fresh Images**
|
|
||||||
For production deployments with latest images:
|
|
||||||
```bash
|
|
||||||
IMAGE_PULL_POLICY=always
|
|
||||||
SKIP_CLIENT_DATA_IF_EXISTS=false
|
|
||||||
ENABLE_PARALLEL_STARTUP=true
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Option 3: Offline Deployment**
|
|
||||||
If images are already present locally:
|
|
||||||
```bash
|
|
||||||
IMAGE_PULL_POLICY=never
|
|
||||||
SKIP_CLIENT_DATA_IF_EXISTS=true
|
|
||||||
ENABLE_PARALLEL_STARTUP=true
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📊 Image Pull Policy Options
|
|
||||||
|
|
||||||
| Policy | Speed | Reliability | Use Case |
|
|
||||||
|--------|-------|-------------|----------|
|
|
||||||
| `if_not_present` | ⚡ Fast | ✅ Good | **Recommended** - Best balance |
|
|
||||||
| `always` | 🐌 Slow | ✅ Best | Production with latest images |
|
|
||||||
| `never` | ⚡ Fastest | ⚠️ Risk | Offline or cached deployments |
|
|
||||||
|
|
||||||
## 🛠️ Pre-deployment Steps (Optional)
|
|
||||||
|
|
||||||
To avoid Portainer timeouts, pre-pull images manually:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Core AzerothCore images (large downloads)
|
|
||||||
docker pull acore/ac-wotlk-db-import:14.0.0-dev
|
|
||||||
docker pull acore/ac-wotlk-authserver:14.0.0-dev
|
|
||||||
docker pull acore/ac-wotlk-worldserver:14.0.0-dev
|
|
||||||
docker pull acore/eluna-ts:master
|
|
||||||
|
|
||||||
# Base images (usually cached)
|
|
||||||
docker pull mysql:8.0
|
|
||||||
docker pull alpine:latest
|
|
||||||
docker pull alpine/git:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🏗️ Staged Deployment Strategy
|
|
||||||
|
|
||||||
If experiencing timeouts, deploy in stages:
|
|
||||||
|
|
||||||
### **Stage 1: Database Layer**
|
|
||||||
Deploy only MySQL and database initialization:
|
|
||||||
```yaml
|
|
||||||
services:
|
|
||||||
ac-mysql-init: ...
|
|
||||||
ac-mysql: ...
|
|
||||||
ac-db-init: ...
|
|
||||||
ac-db-import: ...
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Stage 2: Core Services**
|
|
||||||
Add authentication and world servers:
|
|
||||||
```yaml
|
|
||||||
services:
|
|
||||||
ac-authserver: ...
|
|
||||||
ac-client-data: ...
|
|
||||||
ac-worldserver: ...
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Stage 3: Optional Services**
|
|
||||||
Add monitoring and modules:
|
|
||||||
```yaml
|
|
||||||
services:
|
|
||||||
ac-eluna: ...
|
|
||||||
ac-modules: ...
|
|
||||||
ac-backup: ...
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🎯 Troubleshooting Deployment Issues
|
|
||||||
|
|
||||||
### **504 Gateway Timeout in Portainer**
|
|
||||||
- **Cause**: Large image downloads or client data download (15GB)
|
|
||||||
- **Solutions**:
|
|
||||||
1. Set `IMAGE_PULL_POLICY=if_not_present`
|
|
||||||
2. Pre-pull images manually
|
|
||||||
3. Use staged deployment
|
|
||||||
4. Increase Portainer timeout settings
|
|
||||||
|
|
||||||
### **Container "Already Exists" Errors**
|
|
||||||
- **Cause**: Previous deployment attempts left containers
|
|
||||||
- **Solution**: Remove old containers first:
|
|
||||||
```bash
|
|
||||||
docker container prune -f
|
|
||||||
docker volume prune -f
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Client Data Download Timeout**
|
|
||||||
- **Cause**: 15GB download takes time
|
|
||||||
- **Solutions**:
|
|
||||||
1. Set `SKIP_CLIENT_DATA_IF_EXISTS=true`
|
|
||||||
2. Pre-download data manually
|
|
||||||
3. Use faster internet connection
|
|
||||||
|
|
||||||
## 📋 Environment Variables for Speed Optimization
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Image handling
|
|
||||||
IMAGE_PULL_POLICY=if_not_present
|
|
||||||
|
|
||||||
# Deployment optimization
|
|
||||||
SKIP_CLIENT_DATA_IF_EXISTS=true
|
|
||||||
ENABLE_PARALLEL_STARTUP=true
|
|
||||||
|
|
||||||
# Reduce health check intervals for faster startup
|
|
||||||
MYSQL_HEALTHCHECK_INTERVAL=5s
|
|
||||||
MYSQL_HEALTHCHECK_TIMEOUT=3s
|
|
||||||
AUTH_HEALTHCHECK_INTERVAL=10s
|
|
||||||
WORLD_HEALTHCHECK_INTERVAL=15s
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🚨 Production vs Development Settings
|
|
||||||
|
|
||||||
### **Development (Fast Deployment)**
|
|
||||||
```bash
|
|
||||||
IMAGE_PULL_POLICY=if_not_present
|
|
||||||
SKIP_CLIENT_DATA_IF_EXISTS=true
|
|
||||||
MYSQL_HEALTHCHECK_INTERVAL=5s
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Production (Reliable Deployment)**
|
|
||||||
```bash
|
|
||||||
IMAGE_PULL_POLICY=always
|
|
||||||
SKIP_CLIENT_DATA_IF_EXISTS=false
|
|
||||||
MYSQL_HEALTHCHECK_INTERVAL=15s
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📊 Expected Deployment Times
|
|
||||||
|
|
||||||
| Configuration | First Deploy | Subsequent Deploys |
|
|
||||||
|---------------|--------------|-------------------|
|
|
||||||
| Fast (cached) | 5-10 minutes | 2-3 minutes |
|
|
||||||
| Standard | 15-20 minutes | 5-8 minutes |
|
|
||||||
| Always pull | 20-30 minutes | 15-20 minutes |
|
|
||||||
|
|
||||||
*Times vary based on internet speed and server performance*
|
|
||||||
203
readme.md
203
readme.md
@@ -96,17 +96,17 @@ This project provides a production-ready AzerothCore deployment using Docker/Pod
|
|||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
acore-compose/
|
acore-compose2/
|
||||||
├── docker-compose.yml # Main orchestration file
|
├── docker-compose-azerothcore-database.yml # Database layer
|
||||||
├── .env # Environment configuration
|
├── docker-compose-azerothcore-services.yml # Game services layer
|
||||||
├── data/ # Game data files (maps, vmaps, etc.)
|
├── docker-compose-azerothcore-tools.yml # Management tools layer
|
||||||
│ ├── dbc/ # Client database files
|
├── docker-compose-azerothcore-database.env # Database configuration
|
||||||
│ ├── maps/ # Map files
|
├── docker-compose-azerothcore-services.env # Services configuration
|
||||||
│ ├── vmaps/ # Visual map files
|
├── docker-compose-azerothcore-tools.env # Tools configuration
|
||||||
│ └── mmaps/ # Movement map files (optional)
|
├── docker-compose-azerothcore-optional.env # Optional services config
|
||||||
├── backups/ # Automated backup storage
|
├── backup-scripts/ # Database backup automation
|
||||||
├── backup-scripts/ # Database backup automation
|
├── local-data/ # Local storage (when not using NFS)
|
||||||
└── assets/ # Web interface assets
|
└── readme.md # This documentation
|
||||||
```
|
```
|
||||||
|
|
||||||
## Container Architecture
|
## Container Architecture
|
||||||
@@ -150,44 +150,43 @@ graph TD
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone the repository
|
# Clone the repository
|
||||||
git clone https://github.com/uprightbass360/acore-compose.git
|
git clone https://github.com/uprightbass360/acore-compose2.git
|
||||||
cd acore-compose
|
cd acore-compose2
|
||||||
|
|
||||||
# Environment file is already configured with defaults
|
# Environment files are pre-configured with defaults
|
||||||
# Modify .env file for your specific deployment:
|
# Modify the relevant .env files for your deployment:
|
||||||
# - EXTERNAL_IP: Your server's public IP
|
# - docker-compose-azerothcore-database.env: Database settings
|
||||||
# - MYSQL_ROOT_PASSWORD: Strong password (default: azerothcore123)
|
# - docker-compose-azerothcore-services.env: Game server settings
|
||||||
|
# - docker-compose-azerothcore-tools.env: Management tools settings
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 2: Prepare Game Data Files
|
### Step 2: Prepare Game Data Files
|
||||||
|
|
||||||
The server requires extracted game data from the WoW 3.3.5a client:
|
The server automatically downloads and extracts game data on first run. The `ac-client-data` service will:
|
||||||
|
- Download the latest client data from wowgaming/client-data releases (~15GB)
|
||||||
|
- Extract maps, vmaps, mmaps, and DBC files
|
||||||
|
- Cache the download for future deployments
|
||||||
|
- Verify data integrity
|
||||||
|
|
||||||
```bash
|
No manual data extraction is required, but ensure you have sufficient disk space and bandwidth.
|
||||||
# Create data directory structure
|
|
||||||
mkdir -p data/{dbc,maps,vmaps,mmaps}
|
|
||||||
|
|
||||||
# Option A: Copy from existing extraction
|
|
||||||
cp -r /path/to/extracted/dbc/* data/dbc/
|
|
||||||
cp -r /path/to/extracted/maps/* data/maps/
|
|
||||||
cp -r /path/to/extracted/vmaps/* data/vmaps/
|
|
||||||
cp -r /path/to/extracted/mmaps/* data/mmaps/ # Optional
|
|
||||||
|
|
||||||
# Option B: Extract from WoW client
|
|
||||||
# Use AzerothCore extraction tools on your WoW 3.3.5a client
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 3: Deploy the Stack
|
### Step 3: Deploy the Stack
|
||||||
|
|
||||||
|
Deploy services in the correct order:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Deploy all services
|
# Step 1: Deploy database layer
|
||||||
docker-compose up -d
|
docker compose --env-file docker-compose-azerothcore-database.env -f docker-compose-azerothcore-database.yml up -d
|
||||||
|
|
||||||
# Monitor deployment
|
# Step 2: Wait for database initialization, then deploy services
|
||||||
docker-compose logs -f
|
docker compose --env-file docker-compose-azerothcore-services.env -f docker-compose-azerothcore-services.yml up -d
|
||||||
|
|
||||||
# Verify all containers are running
|
# Step 3: Deploy management tools (optional)
|
||||||
docker ps | grep ac-
|
docker compose --env-file docker-compose-azerothcore-tools.env -f docker-compose-azerothcore-tools.yml up -d
|
||||||
|
|
||||||
|
# Monitor deployment progress
|
||||||
|
docker logs ac-client-data -f # Watch data download/extraction
|
||||||
|
docker logs ac-db-init -f # Watch database initialization
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 4: Initial Database Import
|
### Step 4: Initial Database Import
|
||||||
@@ -229,38 +228,27 @@ set realmlist YOUR_SERVER_IP
|
|||||||
|
|
||||||
### Environment Variables
|
### Environment Variables
|
||||||
|
|
||||||
All configuration is managed through the `.env` file. Key variables:
|
Configuration is managed through separate `.env` files for each layer:
|
||||||
|
|
||||||
#### Database Settings
|
#### Database Layer (`docker-compose-azerothcore-database.env`)
|
||||||
- `MYSQL_ROOT_PASSWORD`: Database root password
|
- `MYSQL_ROOT_PASSWORD`: Database root password (default: azerothcore123)
|
||||||
- `MYSQL_HOST`: Database hostname (default: ac-mysql)
|
- `STORAGE_PATH`: Data storage path (default: /nfs/containers/azerothcore)
|
||||||
- `DB_AUTH_NAME`: Authentication database name
|
- `NETWORK_SUBNET`: Docker network subnet
|
||||||
- `DB_WORLD_NAME`: World database name
|
- `BACKUP_RETENTION_DAYS`: Backup retention period
|
||||||
- `DB_CHARACTERS_NAME`: Characters database name
|
|
||||||
|
|
||||||
#### Network Settings
|
#### Services Layer (`docker-compose-azerothcore-services.env`)
|
||||||
- `EXTERNAL_IP`: Public IP for realm list
|
|
||||||
- `EXTERNAL_BASE_URL`: Custom domain URL (e.g., https://acore.example.com)
|
|
||||||
- `DOCKER_AUTH_EXTERNAL_PORT`: Auth server external port (3784)
|
- `DOCKER_AUTH_EXTERNAL_PORT`: Auth server external port (3784)
|
||||||
- `DOCKER_WORLD_EXTERNAL_PORT`: World server external port (8215)
|
- `DOCKER_WORLD_EXTERNAL_PORT`: World server external port (8215)
|
||||||
- `DOCKER_SOAP_EXTERNAL_PORT`: SOAP API port (7778)
|
- `DOCKER_SOAP_EXTERNAL_PORT`: SOAP API port (7778)
|
||||||
|
- `PLAYERBOT_ENABLED`: Enable/disable playerbots (1/0)
|
||||||
|
- `PLAYERBOT_MAX_BOTS`: Maximum number of bots (default: 40)
|
||||||
|
|
||||||
#### Web Interface Settings (Collision-Free Ports)
|
#### Tools Layer (`docker-compose-azerothcore-tools.env`)
|
||||||
- `PMA_EXTERNAL_PORT`: PHPMyAdmin port (8081)
|
- `PMA_EXTERNAL_PORT`: PHPMyAdmin port (8081)
|
||||||
- `KEIRA3_EXTERNAL_PORT`: Database editor port (4201)
|
- `KEIRA3_EXTERNAL_PORT`: Database editor port (4201)
|
||||||
- `GF_EXTERNAL_PORT`: Grafana monitoring port (3001)
|
- `GF_EXTERNAL_PORT`: Grafana monitoring port (3001)
|
||||||
- `INFLUXDB_EXTERNAL_PORT`: InfluxDB metrics port (8087)
|
- `INFLUXDB_EXTERNAL_PORT`: InfluxDB metrics port (8087)
|
||||||
|
- `STORAGE_PATH_TOOLS`: Tools storage path (default: ./volumes-tools)
|
||||||
#### Performance Settings
|
|
||||||
- `MAX_PLAYERS`: Maximum concurrent players
|
|
||||||
- `PROCESS_PRIORITY`: Process priority level
|
|
||||||
- `MAX_CONNECTIONS`: MySQL max connections
|
|
||||||
|
|
||||||
#### Game Rates
|
|
||||||
- `RATE_XP_KILL`: Experience from kills multiplier
|
|
||||||
- `RATE_XP_QUEST`: Experience from quests multiplier
|
|
||||||
- `RATE_DROP_MONEY`: Money drop rate multiplier
|
|
||||||
- `RATE_DROP_ITEMS`: Item drop rate multiplier
|
|
||||||
|
|
||||||
### Realm Configuration
|
### Realm Configuration
|
||||||
|
|
||||||
@@ -389,11 +377,19 @@ docker exec ac-mysql mysqlcheck \
|
|||||||
|
|
||||||
#### Update Containers:
|
#### Update Containers:
|
||||||
```bash
|
```bash
|
||||||
# Pull latest images
|
# Pull latest images for database layer
|
||||||
docker-compose pull
|
docker-compose -f docker-compose-azerothcore-database.yml pull
|
||||||
|
|
||||||
|
# Pull latest images for services layer
|
||||||
|
docker-compose -f docker-compose-azerothcore-services.yml pull
|
||||||
|
|
||||||
|
# Pull latest images for tools layer
|
||||||
|
docker-compose -f docker-compose-azerothcore-tools.yml pull
|
||||||
|
|
||||||
# Recreate containers with new images
|
# Recreate containers with new images
|
||||||
docker-compose up -d --force-recreate
|
docker-compose -f docker-compose-azerothcore-database.yml up -d --force-recreate
|
||||||
|
docker-compose -f docker-compose-azerothcore-services.yml up -d --force-recreate
|
||||||
|
docker-compose -f docker-compose-azerothcore-tools.yml up -d --force-recreate
|
||||||
|
|
||||||
# Remove old unused images
|
# Remove old unused images
|
||||||
docker image prune -a
|
docker image prune -a
|
||||||
@@ -401,14 +397,14 @@ docker image prune -a
|
|||||||
|
|
||||||
#### Update AzerothCore:
|
#### Update AzerothCore:
|
||||||
```bash
|
```bash
|
||||||
# Stop services
|
# Stop services layer
|
||||||
docker-compose stop ac-worldserver ac-authserver
|
docker-compose -f docker-compose-azerothcore-services.yml stop
|
||||||
|
|
||||||
# Update database
|
# Update database
|
||||||
docker-compose up ac-db-import
|
docker-compose -f docker-compose-azerothcore-database.yml up ac-db-import
|
||||||
|
|
||||||
# Restart services
|
# Restart services layer
|
||||||
docker-compose start ac-worldserver ac-authserver
|
docker-compose -f docker-compose-azerothcore-services.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### Log Management
|
### Log Management
|
||||||
@@ -442,7 +438,7 @@ EOF
|
|||||||
|
|
||||||
### Automated Backups
|
### Automated Backups
|
||||||
|
|
||||||
The `ac-backup` container provides automated backups. Configure via environment:
|
The database layer includes an automated backup service. Configure via environment variables in `docker-compose-azerothcore-database.env`:
|
||||||
|
|
||||||
- `BACKUP_CRON_SCHEDULE`: Cron expression (default: "0 3 * * *" - 3 AM daily)
|
- `BACKUP_CRON_SCHEDULE`: Cron expression (default: "0 3 * * *" - 3 AM daily)
|
||||||
- `BACKUP_RETENTION_DAYS`: Days to keep backups (default: 7)
|
- `BACKUP_RETENTION_DAYS`: Days to keep backups (default: 7)
|
||||||
@@ -496,10 +492,7 @@ docker logs ac-mysql --tail 50
|
|||||||
#### 4. Permission Denied Errors
|
#### 4. Permission Denied Errors
|
||||||
**Error**: Various permission denied messages
|
**Error**: Various permission denied messages
|
||||||
|
|
||||||
**Solution**: Run containers as root (configured in .env):
|
**Solution**: Containers are configured to run as root to handle NFS permissions. Check volume mount permissions and ensure storage paths are accessible.
|
||||||
```bash
|
|
||||||
DOCKER_USER=root
|
|
||||||
```
|
|
||||||
|
|
||||||
### Debug Commands
|
### Debug Commands
|
||||||
|
|
||||||
@@ -527,25 +520,29 @@ docker exec ac-worldserver ls -la /azerothcore/data/
|
|||||||
|
|
||||||
#### Complete Reset:
|
#### Complete Reset:
|
||||||
```bash
|
```bash
|
||||||
# Stop all containers
|
# Stop all layers
|
||||||
docker-compose down
|
docker-compose -f docker-compose-azerothcore-tools.yml down
|
||||||
|
docker-compose -f docker-compose-azerothcore-services.yml down
|
||||||
|
docker-compose -f docker-compose-azerothcore-database.yml down
|
||||||
|
|
||||||
# Remove all volumes (WARNING: Deletes all data)
|
# Remove all volumes (WARNING: Deletes all data)
|
||||||
docker-compose down -v
|
docker volume prune -f
|
||||||
|
|
||||||
# Remove all containers and images
|
# Remove all containers and images
|
||||||
docker system prune -a
|
docker system prune -a
|
||||||
|
|
||||||
# Start fresh
|
# Start fresh (in order)
|
||||||
docker-compose up -d
|
docker-compose -f docker-compose-azerothcore-database.yml up -d
|
||||||
|
docker-compose -f docker-compose-azerothcore-services.yml up -d
|
||||||
|
docker-compose -f docker-compose-azerothcore-tools.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Reset Specific Service:
|
#### Reset Specific Service:
|
||||||
```bash
|
```bash
|
||||||
# Reset worldserver only
|
# Reset worldserver only
|
||||||
docker-compose stop ac-worldserver
|
docker-compose -f docker-compose-azerothcore-services.yml stop ac-worldserver
|
||||||
docker-compose rm -f ac-worldserver
|
docker-compose -f docker-compose-azerothcore-services.yml rm -f ac-worldserver
|
||||||
docker-compose up -d ac-worldserver
|
docker-compose -f docker-compose-azerothcore-services.yml up -d ac-worldserver
|
||||||
```
|
```
|
||||||
|
|
||||||
## Security Considerations
|
## Security Considerations
|
||||||
@@ -563,9 +560,9 @@ docker-compose up -d ac-worldserver
|
|||||||
- Disable SOAP if not needed
|
- Disable SOAP if not needed
|
||||||
|
|
||||||
3. **File Permissions**
|
3. **File Permissions**
|
||||||
- Restrict access to .env file: `chmod 600 .env`
|
- Restrict access to .env files: `chmod 600 *.env`
|
||||||
- Secure backup directories
|
- Secure backup directories
|
||||||
- Use non-root user when possible
|
- Containers run as root to handle NFS permissions
|
||||||
|
|
||||||
4. **Regular Updates**
|
4. **Regular Updates**
|
||||||
- Keep containers updated
|
- Keep containers updated
|
||||||
@@ -627,7 +624,7 @@ docker stats --no-stream
|
|||||||
### Database Credentials
|
### Database Credentials
|
||||||
- **Host**: `localhost:64306`
|
- **Host**: `localhost:64306`
|
||||||
- **User**: `root`
|
- **User**: `root`
|
||||||
- **Password**: `azerothcore123` (configurable in .env)
|
- **Password**: `azerothcore123` (configurable in environment files)
|
||||||
- **Databases**: `acore_auth`, `acore_world`, `acore_characters`
|
- **Databases**: `acore_auth`, `acore_world`, `acore_characters`
|
||||||
|
|
||||||
### Related Projects
|
### Related Projects
|
||||||
@@ -637,22 +634,40 @@ docker stats --no-stream
|
|||||||
### Useful Commands Reference
|
### Useful Commands Reference
|
||||||
```bash
|
```bash
|
||||||
# Quick status check
|
# Quick status check
|
||||||
docker-compose ps
|
docker ps | grep ac-
|
||||||
|
|
||||||
# Restart all services
|
# Restart database layer
|
||||||
docker-compose restart
|
docker-compose -f docker-compose-azerothcore-database.yml restart
|
||||||
|
|
||||||
# View all logs
|
# Restart services layer
|
||||||
docker-compose logs
|
docker-compose -f docker-compose-azerothcore-services.yml restart
|
||||||
|
|
||||||
# Stop everything
|
# Restart tools layer
|
||||||
docker-compose stop
|
docker-compose -f docker-compose-azerothcore-tools.yml restart
|
||||||
|
|
||||||
# Start everything
|
# View database logs
|
||||||
docker-compose start
|
docker-compose -f docker-compose-azerothcore-database.yml logs
|
||||||
|
|
||||||
# Update and restart
|
# View services logs
|
||||||
docker-compose pull && docker-compose up -d
|
docker-compose -f docker-compose-azerothcore-services.yml logs
|
||||||
|
|
||||||
|
# View tools logs
|
||||||
|
docker-compose -f docker-compose-azerothcore-tools.yml logs
|
||||||
|
|
||||||
|
# Stop everything (in reverse order)
|
||||||
|
docker-compose -f docker-compose-azerothcore-tools.yml down
|
||||||
|
docker-compose -f docker-compose-azerothcore-services.yml down
|
||||||
|
docker-compose -f docker-compose-azerothcore-database.yml down
|
||||||
|
|
||||||
|
# Start everything (in order)
|
||||||
|
docker-compose -f docker-compose-azerothcore-database.yml up -d
|
||||||
|
docker-compose -f docker-compose-azerothcore-services.yml up -d
|
||||||
|
docker-compose -f docker-compose-azerothcore-tools.yml up -d
|
||||||
|
|
||||||
|
# Update and restart all layers
|
||||||
|
docker-compose -f docker-compose-azerothcore-database.yml pull && docker-compose -f docker-compose-azerothcore-database.yml up -d
|
||||||
|
docker-compose -f docker-compose-azerothcore-services.yml pull && docker-compose -f docker-compose-azerothcore-services.yml up -d
|
||||||
|
docker-compose -f docker-compose-azerothcore-tools.yml pull && docker-compose -f docker-compose-azerothcore-tools.yml up -d
|
||||||
|
|
||||||
# Backup database
|
# Backup database
|
||||||
docker exec ac-mysql mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > backup.sql
|
docker exec ac-mysql mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > backup.sql
|
||||||
|
|||||||
Reference in New Issue
Block a user