This document outlines the backup strategies and procedures for the Docker server.
The server implements a comprehensive backup strategy to ensure all critical data is protected against loss. Key elements include:
Backup Type | Schedule | Script | Retention |
---|---|---|---|
WordPress Sites | Daily at 1:00 AM | dockerbackup.sh | 5 days |
Docker Configuration | Daily at 1:00 AM | dockerbackup.sh | 5 days |
Nextcloud Data | Daily at 1:00 AM | dockerbackup.sh | 5 days |
Cleanup | Daily at 3:15 AM | cleanup.sh | N/A |
Each WordPress site is backed up using the Demyx backup system:
# Automated by backup script, but can be run manually:
demyx backup <site_id>
The backup includes:
The Docker configuration backup includes:
The Nextcloud backup includes:
Backups are stored in two locations:
/var/lib/docker/volumes/demyx/_data/backup/
DockerBackups
folderLocated at /home/ali3nz/docker/scripts/dockerbackup.sh
, this script:
#!/bin/bash
# Create backup timestamp
TIMESTAMP=$(date +"%Y-%m-%d")
BACKUP_DIR="/tmp/docker-backup-$TIMESTAMP"
# Create backup directory
mkdir -p $BACKUP_DIR
# Backup all WordPress sites
echo "Backing up WordPress sites..."
for SITE in $(demyx list --format=name); do
echo "Backing up $SITE..."
demyx backup $SITE
cp -r /var/lib/docker/volumes/demyx/_data/backup/wp/$SITE $BACKUP_DIR/
done
# Backup Docker configuration
echo "Backing up Docker configuration..."
mkdir -p $BACKUP_DIR/docker-config
cp -r /home/ali3nz/docker/*/docker-compose.yml $BACKUP_DIR/docker-config/
cp -r /home/ali3nz/docker/*/.env $BACKUP_DIR/docker-config/
cp -r /home/ali3nz/docker/*/config $BACKUP_DIR/docker-config/
# Backup Nextcloud
echo "Backing up Nextcloud data..."
docker exec -t nextcloud-db mysqldump -u nextcloud -ppassword nextcloud > $BACKUP_DIR/nextcloud-db.sql
# Compress backup
echo "Compressing backup..."
tar -czf /tmp/docker-backup-$TIMESTAMP.tar.gz $BACKUP_DIR
# Upload to OneDrive
echo "Uploading to OneDrive..."
rclone copy /tmp/docker-backup-$TIMESTAMP.tar.gz onedrive:DockerBackups/
# Cleanup
echo "Cleaning up temporary files..."
rm -rf $BACKUP_DIR
rm /tmp/docker-backup-$TIMESTAMP.tar.gz
echo "Backup completed successfully!"
Located at /home/ali3nz/docker/scripts/cleanup.sh
, this script:
#!/bin/bash
# Set variables
BACKUP_DIR="onedrive:DockerBackups"
RETENTION_DAYS=5
# Calculate cutoff date (5 days ago)
CUTOFF_DATE=$(date -d "$RETENTION_DAYS days ago" +"%Y-%m-%d")
# List all backups
echo "Listing backups older than $CUTOFF_DATE..."
BACKUP_LIST=$(rclone ls $BACKUP_DIR | grep docker-backup)
# Delete old backups
for BACKUP in $BACKUP_LIST; do
BACKUP_DATE=$(echo $BACKUP | grep -o '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}')
if [[ "$BACKUP_DATE" < "$CUTOFF_DATE" ]]; then
echo "Deleting old backup: $BACKUP"
rclone delete "$BACKUP_DIR/$BACKUP"
fi
done
echo "Cleanup completed successfully!"
Backups should be verified monthly to ensure recoverability:
To restore a WordPress site:
# Extract the backup
tar -xzf docker-backup-YYYY-MM-DD.tar.gz
# Import the site
demyx import site_name /path/to/extracted/backup/site_name
To restore Docker configuration:
# Extract the backup
tar -xzf docker-backup-YYYY-MM-DD.tar.gz
# Copy configuration files back to their locations
cp -r /path/to/extracted/backup/docker-config/* /home/ali3nz/docker/
To restore Nextcloud:
# Stop Nextcloud
docker-compose -f /home/ali3nz/docker/nextcloud/docker-compose.yml down
# Extract the backup
tar -xzf docker-backup-YYYY-MM-DD.tar.gz
# Restore database
docker exec -i nextcloud-db mysql -u nextcloud -ppassword nextcloud < /path/to/extracted/backup/nextcloud-db.sql
# Start Nextcloud
docker-compose -f /home/ali3nz/docker/nextcloud/docker-compose.yml up -d
If backup issues occur:
rclone config show
rclone ls onedrive:
df -h
/var/log/dockerbackup.log
For assistance with backup issues, contact the server administrator.