Vorbereitung
Zuerst Miete ich mir einen neuen (VPS) Server, der für Backups genutzt wird.
Auf diesem Server erstelle mir einen eigenen Benutzer mit dem Namen serverbackup
. Wie ich das genau mache, ist in desem Artikel beschrieben.
Anschließend generiere ich auf dem Sourceserver der Server, der die zu sichernden Daten enthält, einen SSH Key.
ssh-keygen -a 100 -t ed25519
Anschließend lass ich mir den Public Key ausgeben. (Dabei gilt zu beachten, dass ich den Sourceserver als root
Nutzer betreibe, was ich in Zukunft auf jedenfalls anders machen werde.)
tail -n+1 /root/.ssh/id_ed25519.pub
Ich melde mich dann im Backup Server als Benutzer serverbackup an. Anschließend erstelle ich dort das .ssh
Verzeichnis um dort den Public Key einzutragen.
su - serverbackup mkdir .ssh && sudo nano ~/.ssh/authorized_keys
Jetzt stelle ich noch ein, dass der Source Server die SSH Verbindung nur für das Backup verwenden darf. Dazu muss ich die ~/.ssh/authorized_keys
Datei noch einmal bearbeiten, indem ich vor dem eben Eingefügen Public Key folgenden command="..."
Befehl einfüge.
sudo nano ~/.ssh/authorized_keys command="borg serve --restrict-to-path /home/serverbackup/backups/Server --append-only" <PublicKey>
Borg Installieren & Installieren
Um Borg zu installieren, nutze ich diesen Befehl:
sudo apt install borgbackup -y
Nun erstellen wir das Verzeichnis, in dem die Backups gespeichert werden.
mkdir -p /home/serverbackup/backups/Server
Dann nutzen wir den eben erstellten Ordner und Initialisieren dort ein Verschlüsseltes Borg Repository.
borg init --encryption=repokey-blake2 /home/serverbackup/backups/Server
Dann gebe ich dort meine Passphrase ein, die zur Verschlüsselung dient.
Jetzt sichere ich mir den Borg Key mit diesem Befehl:
borg key export /home/serverbackup/backups/Server ~/key-export
Diesen Schlüssel bewahre ich sicher auf und lösche ihn dann vom Server.
Backups erstellen
Auch auf dem Sourceserver Insterlire ich Borg.
sudo apt install borgbackup -y
Jetzt erstelle ich mein Backup Script.
nano ~/backup/backup.sh
#!/bin/bash ## ## Save backup to directory named after hostname ## LOG="backup.log" REPOSITORY="ssh://serverbackup@backupserver.tld:22/~/backups/Server" export BORG_PASSPHRASE="MeineSuperSicherePassphrase" ## ## Write output to logfile ## exec > >(tee -i ${LOG}) exec 2>&1 echo "###### Starting backup on $(date) ######" ## ## Create list of installed software ## dpkg --get-selections > /root/backup/software.list ## ## Sync backup data ## echo "Syncing backup files ..." borg create -v --stats \ $REPOSITORY::'{now:%Y-%m-%d_%H:%M}' \ /root/backup \ /etc \ /var/www \ /var/vmail \ /storage echo "###### Finished backup on $(date) ######"
Anschließend mach ich das Script ausführbar.
chmod u+x /root/backup/backup.sh
Nun teste ich das Script.
./root/backup/backup.sh
Wenn das Script tut, was es soll, dann erstelle ich ein cron job.
crontab -e
08 23 * * * /root/backup/backup.sh > /dev/null 2>&1
Alte Backups Löschen
Ich melde mich auf den Backup Server an und erstelle hier ein Script, das überflüssige Backups Löscht.
nano ~/prune-backup.sh
#!/bin/bash ROOTDIR="/home/serverbackup/backups/Server" LOG="prune-backup.log" export BORG_PASSPHRASE="MeineSuperSicherePassphrase" # copy all output to logfile exec > >(tee -i ${LOG}) exec 2>&1 echo "###### Pruning backup on $(date) ######" borg prune -v ${ROOTDIR} \ --keep-daily=14 \ --keep-weekly=8 \ --keep-monthly=12 echo "###### Pruning finished ######"
Anschließend mach ich das Script ausführbar.
chmod u+x ~/prune-backup.sh
Nun teste ich das Script.
~/prune-backup.sh
Wenn das Script tut, was es soll, dann erstelle ich ein cron job.
crontab -e
Dieser cron job wir alle 3 Stunden gestartet (0:27, 3:27, 6:27, …)
27 */3 * * * ~/prune-backup.sh