Comprehensive guide for backing up and restoring your entire Ubuntu server
sudo nano /server-backup/create-complete-backup.sh
#!/bin/bash
BACKUP_DIR="/server-backup/complete-server-$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
echo "=== CREATING COMPLETE SERVER BACKUP ==="
# 1. WEBMIN - ALL CONFIG FILES
sudo cp -r /etc/webmin $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /usr/share/webmin $BACKUP_DIR/ 2>/dev/null || true
# 2. BIND/NAMED - ALL CONFIG FILES
sudo cp -r /etc/bind $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/lib/bind $BACKUP_DIR/ 2>/dev/null || true
# 3. APACHE2 - ALL SETTINGS AND CONFIGS
sudo cp -r /etc/apache2 $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/log/apache2 $BACKUP_DIR/ 2>/dev/null || true
# 4. POSTFIX - ALL SETTINGS AND CONFIGS
sudo cp -r /etc/postfix $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/spool/postfix $BACKUP_DIR/ 2>/dev/null || true
# 5. DOVECOT - ALL SETTINGS AND CONFIGS
sudo cp -r /etc/dovecot $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/lib/dovecot $BACKUP_DIR/ 2>/dev/null || true
# 6. ROUNDCUBE - ALL SETTINGS AND CONFIGS
sudo cp -r /var/lib/roundcube $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /etc/roundcube $BACKUP_DIR/ 2>/dev/null || true
# 7. PHP - ALL MODS AND CONFIGS
sudo cp -r /etc/php $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/lib/php $BACKUP_DIR/ 2>/dev/null || true
# 8. REDIS - ALL CONFIGS AND FILES
sudo cp -r /etc/redis $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/lib/redis $BACKUP_DIR/ 2>/dev/null || true
# 9. USER EMAILS DATA AND FILES
sudo cp -r /var/mail $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/vmail $BACKUP_DIR/ 2>/dev/null || true
# 10. MYSQL - ALL DATABASES AND FILES
sudo cp -r /etc/mysql $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/lib/mysql $BACKUP_DIR/ 2>/dev/null || true
sudo mysqldump --all-databases --single-transaction --routines --triggers > $BACKUP_DIR/all-mysql-databases-complete.sql
# 11. WORDPRESS & ALL WEBSITES
sudo cp -r /home $BACKUP_DIR/ 2>/dev/null || true
sudo cp -r /var/www $BACKUP_DIR/ 2>/dev/null || true
# 12. SYSTEM INFORMATION
dpkg --get-selections > $BACKUP_DIR/installed-packages.txt
sudo systemctl list-unit-files --type=service > $BACKUP_DIR/all-services.txt
cp /etc/passwd $BACKUP_DIR/
cp /etc/group $BACKUP_DIR/
# 13. COMPRESS EVERYTHING
sudo tar -czf /server-backup/complete-server-backup-$(date +%Y%m%d).tar.gz -C $BACKUP_DIR .
# 14. CLEANUP
sudo rm -rf $BACKUP_DIR
echo "✅ BACKUP COMPLETE!"
echo "📦 File: /server-backup/complete-server-backup-$(date +%Y%m%d).tar.gz"
# Make script executable
sudo chmod +x /server-backup/create-complete-backup.sh
# Run the backup (takes 30-90 minutes)
sudo /server-backup/create-complete-backup.sh
# From your LOCAL PC terminal (not server):
scp root@your-server-ip:/server-backup/complete-server-backup-*.tar.gz ~/Downloads/
# Or with progress display:
rsync -av --progress root@your-server-ip:/server-backup/complete-server-backup-*.tar.gz ~/Downloads/
Apache2 + All websites
WordPress installations
PHP configurations
Postfix + Dovecot
Roundcube webmail
User email data
MySQL databases
Redis cache
All data files
Webmin control panel
Bind9 DNS
System configurations
# From your LOCAL PC to new server:
scp ~/Downloads/complete-server-backup-*.tar.gz root@new-server-ip:/tmp/
# On new server, extract backup:
sudo mkdir /restore
sudo tar -xzf /tmp/complete-server-backup-*.tar.gz -C /restore/
# Restore installed packages:
sudo dpkg --set-selections < /restore/installed-packages.txt
sudo apt-get update
sudo apt-get dselect-upgrade
# Restore configurations:
sudo cp -r /restore/etc/* /etc/
# Restore website data:
sudo cp -r /restore/home/* /home/
sudo cp -r /restore/var/www/* /var/www/
# Restore service data:
sudo cp -r /restore/var/lib/mysql/* /var/lib/mysql/
sudo cp -r /restore/var/lib/redis/* /var/lib/redis/
sudo cp -r /restore/var/vmail/* /var/vmail/
# Fix service permissions:
sudo chown -R www-data:www-data /var/www
sudo chown -R mysql:mysql /var/lib/mysql
sudo chown -R redis:redis /var/lib/redis
sudo chown -R vmail:vmail /var/vmail
sudo chown -R bind:bind /var/lib/bind
# Restart all services:
sudo systemctl daemon-reload
sudo systemctl restart apache2 mysql redis postfix dovecot bind9 webmin
# Check service status:
sudo systemctl status apache2 mysql postfix dovecot
# Test websites:
curl -I http://localhost
curl -I https://your-domain.com
# Test email:
telnet localhost 25
• Backup files contain sensitive data - store securely
• Use strong passwords for database restoration
• Verify file permissions after restoration
• Test restoration process regularly
• Keep multiple backup versions
• Store backups in multiple locations
• Document any custom configurations
# Schedule automatic backups with cron:
# Add to crontab (crontab -e):
0 2 * * 0 /server-backup/create-complete-backup.sh # Weekly backup at 2 AM Sunday