🛡️ Complete Server Backup & Restoration Guide

Comprehensive guide for backing up and restoring your entire Ubuntu server

📦 Complete Server Backup

1 Create Backup Script

sudo nano /server-backup/create-complete-backup.sh

2 Backup Script Content

#!/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"

3 Make Executable and Run

# 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

4 Download to Your PC

# 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/

✅ Services Included in Backup

🌐 Web Services

Apache2 + All websites

WordPress installations

PHP configurations

📧 Email Services

Postfix + Dovecot

Roundcube webmail

User email data

🗄️ Database Services

MySQL databases

Redis cache

All data files

🔧 System Services

Webmin control panel

Bind9 DNS

System configurations

🔄 Complete Server Restoration

1 Upload Backup to New Server

# From your LOCAL PC to new server: scp ~/Downloads/complete-server-backup-*.tar.gz root@new-server-ip:/tmp/

2 Extract Backup

# On new server, extract backup: sudo mkdir /restore sudo tar -xzf /tmp/complete-server-backup-*.tar.gz -C /restore/

3 Restore Packages

# Restore installed packages: sudo dpkg --set-selections < /restore/installed-packages.txt sudo apt-get update sudo apt-get dselect-upgrade

4 Restore All Data

# 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/

5 Fix Permissions

# 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

6 Restart Services

# Restart all services: sudo systemctl daemon-reload sudo systemctl restart apache2 mysql redis postfix dovecot bind9 webmin

7 Verify Restoration

# 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

⚠️ Important Notes

🔒 Security

• Backup files contain sensitive data - store securely

• Use strong passwords for database restoration

• Verify file permissions after restoration

✅ Best Practices

• 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