backup functionality and documentation

This commit is contained in:
Deckard
2025-10-03 16:34:18 -04:00
parent 1dbf406217
commit e34cea0a2b
8 changed files with 33 additions and 19 deletions

View File

@@ -102,7 +102,6 @@ HOST_BACKUP_PATH=${STORAGE_PATH}/backups
# ============================================== # ==============================================
# Backup settings # Backup settings
# ============================================== # ==============================================
BACKUP_CRON_SCHEDULE="0 9 * * *"
BACKUP_RETENTION_DAYS=3 BACKUP_RETENTION_DAYS=3
BACKUP_RETENTION_HOURS=6 BACKUP_RETENTION_HOURS=6
BACKUP_DIR=/backups BACKUP_DAILY_TIME=09

View File

@@ -150,8 +150,7 @@ services:
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD}
BACKUP_RETENTION_DAYS: ${BACKUP_RETENTION_DAYS} BACKUP_RETENTION_DAYS: ${BACKUP_RETENTION_DAYS}
BACKUP_RETENTION_HOURS: ${BACKUP_RETENTION_HOURS} BACKUP_RETENTION_HOURS: ${BACKUP_RETENTION_HOURS}
BACKUP_CRON_SCHEDULE: ${BACKUP_CRON_SCHEDULE} BACKUP_DAILY_TIME: ${BACKUP_DAILY_TIME}
BACKUP_DIR: ${BACKUP_DIR}
DB_AUTH_NAME: ${DB_AUTH_NAME} DB_AUTH_NAME: ${DB_AUTH_NAME}
DB_WORLD_NAME: ${DB_WORLD_NAME} DB_WORLD_NAME: ${DB_WORLD_NAME}
DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME} DB_CHARACTERS_NAME: ${DB_CHARACTERS_NAME}
@@ -185,7 +184,7 @@ services:
# Enhanced scheduler with hourly and daily backups # Enhanced scheduler with hourly and daily backups
echo "⏰ Starting enhanced backup scheduler:" echo "⏰ Starting enhanced backup scheduler:"
echo " 📅 Daily backups: ${BACKUP_CRON_SCHEDULE} (retention: ${BACKUP_RETENTION_DAYS} days)" echo " 📅 Daily backups: ${BACKUP_DAILY_TIME}:00 UTC (retention: ${BACKUP_RETENTION_DAYS} days)"
echo " ⏰ Hourly backups: every hour (retention: ${BACKUP_RETENTION_HOURS} hours)" echo " ⏰ Hourly backups: every hour (retention: ${BACKUP_RETENTION_HOURS} hours)"
# Track last backup times to avoid duplicates # Track last backup times to avoid duplicates
@@ -197,15 +196,15 @@ services:
current_minute=$(date +%M) current_minute=$(date +%M)
current_time="$current_hour:$current_minute" current_time="$current_hour:$current_minute"
# Daily backup check (9:00 AM) # Daily backup check (configurable time)
if [ "$$current_hour" = "09" ] && [ "$$current_minute" = "00" ] && [ "$$last_daily_hour" != "$$current_hour" ]; then if [ "$$current_hour" = "${BACKUP_DAILY_TIME}" ] && [ "$$current_minute" = "00" ] && [ "$$last_daily_hour" != "$$current_hour" ]; then
echo "📅 [$(date)] Daily backup time reached, running daily backup..." echo "📅 [$(date)] Daily backup time reached, running daily backup..."
/tmp/backup-daily.sh /tmp/backup-daily.sh
last_daily_hour="$$current_hour" last_daily_hour="$$current_hour"
# Sleep for 2 minutes to avoid running multiple times # Sleep for 2 minutes to avoid running multiple times
sleep 120 sleep 120
# Hourly backup check (every hour at minute 0, except during daily backup) # Hourly backup check (every hour at minute 0, except during daily backup)
elif [ "$$current_minute" = "00" ] && [ "$$current_hour" != "09" ] && [ "$$last_hourly_minute" != "$$current_minute" ]; then elif [ "$$current_minute" = "00" ] && [ "$$current_hour" != "${BACKUP_DAILY_TIME}" ] && [ "$$last_hourly_minute" != "$$current_minute" ]; then
echo "⏰ [$(date)] Hourly backup time reached, running hourly backup..." echo "⏰ [$(date)] Hourly backup time reached, running hourly backup..."
/tmp/backup-hourly.sh /tmp/backup-hourly.sh
last_hourly_minute="$$current_minute" last_hourly_minute="$$current_minute"

View File

@@ -1072,7 +1072,25 @@ services:
echo "✅ No C++ modules enabled - pre-built containers can be used" echo "✅ No C++ modules enabled - pre-built containers can be used"
fi fi
echo 'Module management complete. Keeping container alive...' echo 'Module management complete.'
# Download rebuild script from GitHub for local access
echo '📥 Downloading rebuild-with-modules.sh from GitHub...'
apk add --no-cache curl
if curl -fsSL https://raw.githubusercontent.com/uprightbass360/acore-compose/main/scripts/rebuild-with-modules.sh -o /tmp/rebuild-with-modules.sh 2>/dev/null; then
echo '✅ Downloaded rebuild-with-modules.sh from GitHub'
chmod +x /tmp/rebuild-with-modules.sh
echo '📍 Script available at: /tmp/rebuild-with-modules.sh'
elif [ -f "/project/scripts/rebuild-with-modules.sh" ]; then
echo '📁 Using local rebuild-with-modules.sh for testing'
cp /project/scripts/rebuild-with-modules.sh /tmp/rebuild-with-modules.sh
chmod +x /tmp/rebuild-with-modules.sh
echo '✅ Copied to /tmp/rebuild-with-modules.sh'
else
echo '⚠️ Warning: rebuild-with-modules.sh not found in GitHub or locally'
fi
echo 'Keeping container alive...'
tail -f /dev/null tail -f /dev/null
restart: "no" restart: "no"
networks: networks:

View File

@@ -130,8 +130,7 @@ acore-compose/
| `ac-authserver` | acore/ac-wotlk-authserver:14.0.0-dev | Authentication server | 3784:3724 | | `ac-authserver` | acore/ac-wotlk-authserver:14.0.0-dev | Authentication server | 3784:3724 |
| `ac-worldserver` | acore/ac-wotlk-worldserver:14.0.0-dev | Game world server | 8215:8085, 7778:7878 | | `ac-worldserver` | acore/ac-wotlk-worldserver:14.0.0-dev | Game world server | 8215:8085, 7778:7878 |
| `ac-eluna` | acore/eluna-ts:master | Lua scripting engine | - | | `ac-eluna` | acore/eluna-ts:master | Lua scripting engine | - |
| `ac-phpmyadmin` | phpmyadmin/phpmyadmin:latest | Database management web UI | 8081:80| | `ac-phpmyadmin` | phpmyadmin/phpmyadmin:latest | Database management web UI | 8081:80 |
| `ac-keira3` | uprightbass360/keira3:latest | Production database editor with API | 4201:8080 | | `ac-keira3` | uprightbass360/keira3:latest | Production database editor with API | 4201:8080 |
| `ac-backup` | mysql:8.0 | Automated backup service | - | | `ac-backup` | mysql:8.0 | Automated backup service | - |
| `ac-modules` | alpine/git:latest | Module management | - | | `ac-modules` | alpine/git:latest | Module management | - |
@@ -336,7 +335,7 @@ The deployment uses a unified storage approach controlled by the `STORAGE_ROOT`
| **Game Data** | `./storage/azerothcore/data` | `${STORAGE_ROOT}/azerothcore/data` | Maps, vmaps, mmaps, DBC files | | **Game Data** | `./storage/azerothcore/data` | `${STORAGE_ROOT}/azerothcore/data` | Maps, vmaps, mmaps, DBC files |
| **Configuration** | `./storage/azerothcore/config` | `${STORAGE_ROOT}/azerothcore/config` | Server configuration files | | **Configuration** | `./storage/azerothcore/config` | `${STORAGE_ROOT}/azerothcore/config` | Server configuration files |
| **Application Logs** | `./storage/azerothcore/logs` | `${STORAGE_ROOT}/azerothcore/logs` | Server and service logs | | **Application Logs** | `./storage/azerothcore/logs` | `${STORAGE_ROOT}/azerothcore/logs` | Server and service logs |
| **Backups** | `./backups` | `./backups` | Database backup files | | **Backups** | `./storage/azerothcore/backups` | `${STORAGE_ROOT}/azerothcore/backups` | Database backup files |
### Storage Configuration Examples ### Storage Configuration Examples
@@ -537,10 +536,9 @@ The system provides **dual backup schedules** for comprehensive data protection:
Configure via environment variables in `docker-compose-azerothcore-database.env`: Configure via environment variables in `docker-compose-azerothcore-database.env`:
- `STORAGE_ROOT`: Root storage path (default: ./storage) - `STORAGE_ROOT`: Root storage path (default: ./storage)
- `BACKUP_CRON_SCHEDULE`: Daily backup time (default: "0 9 * * *" - 9 AM UTC)
- `BACKUP_RETENTION_DAYS`: Days to keep daily backups (default: 3) - `BACKUP_RETENTION_DAYS`: Days to keep daily backups (default: 3)
- `BACKUP_RETENTION_HOURS`: Hours to keep hourly backups (default: 6) - `BACKUP_RETENTION_HOURS`: Hours to keep hourly backups (default: 6)
- `BACKUP_DIR`: Container backup directory (default: /backups) - `BACKUP_DAILY_TIME`: Hour for daily backup in 24h format (default: 09)
- `HOST_BACKUP_PATH`: Host backup storage path (default: ${STORAGE_PATH}/backups) - `HOST_BACKUP_PATH`: Host backup storage path (default: ${STORAGE_PATH}/backups)
- `DB_AUTH_NAME`, `DB_WORLD_NAME`, `DB_CHARACTERS_NAME`: Database names (configurable) - `DB_AUTH_NAME`, `DB_WORLD_NAME`, `DB_CHARACTERS_NAME`: Database names (configurable)
@@ -569,7 +567,7 @@ The `ac-backup` container runs continuously with dual scheduling:
- **Purpose**: Recent recovery and frequent data protection - **Purpose**: Recent recovery and frequent data protection
**Daily Backups**: **Daily Backups**:
- **Schedule**: Daily at 9:00 AM UTC (configurable via `BACKUP_CRON_SCHEDULE`) - **Schedule**: Daily at configurable time (default: 9:00 AM UTC)
- **Retention**: 3 days (keeps last 3 daily backups) - **Retention**: 3 days (keeps last 3 daily backups)
- **Location**: `${HOST_BACKUP_PATH}/daily/` - **Location**: `${HOST_BACKUP_PATH}/daily/`
- **Features**: Enhanced with database statistics and comprehensive metadata - **Features**: Enhanced with database statistics and comprehensive metadata

View File

@@ -6,7 +6,7 @@ MYSQL_HOST=${MYSQL_HOST:-ac-mysql}
MYSQL_PORT=${MYSQL_PORT:-3306} MYSQL_PORT=${MYSQL_PORT:-3306}
MYSQL_USER=${MYSQL_USER:-root} MYSQL_USER=${MYSQL_USER:-root}
MYSQL_PASSWORD=${MYSQL_PASSWORD:-password} MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
BACKUP_DIR=${BACKUP_DIR:-/backups} BACKUP_DIR="/backups"
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-3} RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-3}
DATE_FORMAT="%Y%m%d_%H%M%S" DATE_FORMAT="%Y%m%d_%H%M%S"

View File

@@ -6,7 +6,7 @@ MYSQL_HOST=${MYSQL_HOST:-ac-mysql}
MYSQL_PORT=${MYSQL_PORT:-3306} MYSQL_PORT=${MYSQL_PORT:-3306}
MYSQL_USER=${MYSQL_USER:-root} MYSQL_USER=${MYSQL_USER:-root}
MYSQL_PASSWORD=${MYSQL_PASSWORD:-password} MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
BACKUP_DIR=${BACKUP_DIR:-/backups} BACKUP_DIR="/backups"
RETENTION_HOURS=${BACKUP_RETENTION_HOURS:-6} RETENTION_HOURS=${BACKUP_RETENTION_HOURS:-6}
DATE_FORMAT="%Y%m%d_%H%M%S" DATE_FORMAT="%Y%m%d_%H%M%S"

View File

@@ -6,7 +6,7 @@ MYSQL_HOST=${MYSQL_HOST:-ac-mysql}
MYSQL_PORT=${MYSQL_PORT:-3306} MYSQL_PORT=${MYSQL_PORT:-3306}
MYSQL_USER=${MYSQL_USER:-root} MYSQL_USER=${MYSQL_USER:-root}
MYSQL_PASSWORD=${MYSQL_PASSWORD:-password} MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
BACKUP_DIR=${BACKUP_DIR:-/backups} BACKUP_DIR="/backups"
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7} RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7}
DATE_FORMAT="%Y%m%d_%H%M%S" DATE_FORMAT="%Y%m%d_%H%M%S"

View File

@@ -5,7 +5,7 @@ MYSQL_HOST=${MYSQL_HOST:-ac-mysql}
MYSQL_PORT=${MYSQL_PORT:-3306} MYSQL_PORT=${MYSQL_PORT:-3306}
MYSQL_USER=${MYSQL_USER:-root} MYSQL_USER=${MYSQL_USER:-root}
MYSQL_PASSWORD=${MYSQL_PASSWORD:-password} MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
BACKUP_DIR=${BACKUP_DIR:-/backups} BACKUP_DIR="/backups"
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "Usage: restore.sh <backup_timestamp>" echo "Usage: restore.sh <backup_timestamp>"