Lesson 3.3: Data Persistence and Backups
Completion requirements
Data Persistence Strategies
Ensuring your data survives container restarts, updates, and system failures is crucial for a reliable personal cloud.
Docker Volume Types
Named Volumes
Docker-managed storage with automatic lifecycle management:
volumes:
nextcloud_data:
driver: local
mariadb_data:
driver: local
Bind Mounts
Direct mapping to host filesystem paths:
volumes:
- ./nextcloud/data:/var/www/html/data
- ./nextcloud/config:/var/www/html/config
tmpfs Mounts
In-memory storage for temporary data:
tmpfs:
- /tmp
- /var/cache
MCT Services Data Strategy
Our approach to data persistence:
# Critical data - bind mounts for easy backup
./nextcloud/data:/var/www/html/data
./stash/config:/root/.stash
# Database data - named volumes with backup scripts
mariadb_data:/var/lib/mysql
postgres_data:/var/lib/postgresql/data
# Cache data - tmpfs or local volumes
./redis/data:/data
./stash/cache:/cache
Backup Architecture
3-2-1 Backup Rule
- 3 copies: Original + 2 backups
- 2 different media: Local + cloud/external
- 1 offsite: Geographic separation
Backup Types
- Full Backup: Complete system snapshot
- Incremental: Changes since last backup
- Differential: Changes since last full backup
- Continuous: Real-time replication
Automated Backup Scripts
Comprehensive backup automation:
#!/bin/bash
# MCT Services Backup Script
BACKUP_ROOT="/backups/mct-services"
DATE=20251106_085258
RETENTION_DAYS=30
# Create backup directory
mkdir -p "/"
# Database backups
echo "Backing up databases..."
docker exec mariadb mysqldump --all-databases -u root -p > "//all_databases.sql"
# Application data backups
echo "Backing up application data..."
tar -czf "//nextcloud_data.tar.gz" ./nextcloud/data
tar -czf "//stash_config.tar.gz" ./stash/config
# Configuration backups
echo "Backing up configurations..."
tar -czf "//docker_configs.tar.gz" ./*.yml ./*/docker-compose.yml
# Docker volumes backup
echo "Backing up Docker volumes..."
docker run --rm -v nextcloud_data:/data -v /:/backup alpine tar czf /backup/nextcloud_volume.tar.gz -C /data .
# Cleanup old backups
echo "Cleaning up old backups..."
find "" -type d -mtime + -exec rm -rf {} +
echo "Backup completed: /"
Restore Procedures
Document and test restore procedures:
#!/bin/bash
# MCT Services Restore Script
BACKUP_DATE=
BACKUP_ROOT="/backups/mct-services"
if [ -z "" ]; then
echo "Usage: /bin/sh "
echo "Available backups:"
ls -1 ""
exit 1
fi
# Stop services
echo "Stopping services..."
docker-compose down
# Restore database
echo "Restoring database..."
docker-compose up -d mariadb
sleep 10
docker exec mariadb mysql -u root -p < "//all_databases.sql"
# Restore application data
echo "Restoring application data..."
tar -xzf "//nextcloud_data.tar.gz" -C ./
tar -xzf "//stash_config.tar.gz" -C ./
# Restart services
echo "Starting services..."
docker-compose up -d
echo "Restore completed from backup: "
Monitoring and Alerting
Set up monitoring for backup health:
- Backup Success: Monitor backup script exit codes
- Storage Space: Alert on low disk space
- Data Integrity: Regular restore testing
- Offsite Sync: Verify cloud backup synchronization
Practical Exercise
Task: Implement backup and restore system
- Create automated backup scripts
- Set up scheduled backups with cron
- Test restore procedures
- Configure offsite backup storage
- Document recovery procedures
Last modified: Thursday, 6 November 2025, 8:52 AM