What to Back Up
Server configuration is often overlooked in backup plans. Rebuilding from scratch without config backups is painful and error-prone.
Essential Config Files
#!/bin/bash
# /root/scripts/config-backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/configs/$DATE"
mkdir -p "$BACKUP_DIR"
# Web server
cp -r /etc/nginx "$BACKUP_DIR/"
# or /etc/apache2
# PHP
cp -r /etc/php "$BACKUP_DIR/"
# Database
cp -r /etc/mysql "$BACKUP_DIR/"
# SSH
cp -r /etc/ssh "$BACKUP_DIR/"
# Firewall
ufw status verbose > "$BACKUP_DIR/ufw-rules.txt"
iptables-save > "$BACKUP_DIR/iptables-rules.txt"
# Crontabs
crontab -l > "$BACKUP_DIR/root-crontab.txt"
for user in $(cut -d: -f1 /etc/passwd); do
crontab -u "$user" -l 2>/dev/null > "$BACKUP_DIR/${user}-crontab.txt"
done
# Systemd custom services
cp /etc/systemd/system/*.service "$BACKUP_DIR/" 2>/dev/null
# Package list
dpkg --get-selections > "$BACKUP_DIR/packages.list"
# Compress
tar -czf "/backup/config-${DATE}.tar.gz" -C "/backup/configs" "$DATE"
rm -rf "$BACKUP_DIR"
# Keep only last 30 days
find /backup -name "config-*.tar.gz" -mtime +30 -delete
echo "Config backup completed: $(date)"Schedule
0 1 * * * /root/scripts/config-backup.sh >> /var/log/config-backup.log 2>&1