Borgbackup einrichten unter Ubuntu

5 min Lesezeit

Nach ein paar Tagen Verzweiflung und Kopf zerbrechen, habe ich endlich Borg Backup auf meinem Server zum Laufen gebracht. Damit werde ich zukünftig und einmal täglich meine Daten auf externen Speicher sichern.

Wie ich das gemacht habe, schreibe ich nun auf, damit auch ich Zukunft wieder darauf zurückgreifen kann, wenn ich es brauche.

Installation:

Zuerst müssen wir Borgbackup und die Abhängigkeiten installieren.

sudo apt-get install borgbackup

Anschließend brauchen wir die Zugangsdaten zu dem externen Speicher. Bei mir ist es die Storagebox von Hetzner.Nun verbinden wir uns per FTP Programm (hier kann ich Filezilla empfehlen) mit der Storagebox und per SSH mit dem Server.

SSH Schlüssel generieren

Auf dem Server geben wir als User „ssh-keygen“ ein und generieren damit einen SSH Key, den öffentlichen Schlüssel brauchen wir dann auf dem FTP Server.

Die Ausgabe von ssh-keygen sieht so aus.

sshadmin@Ubuntu-1804-bionic-64-minimal:/usr/local/bin$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sshadmin/.ssh/id_rsa): 
/home/sshadmin/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/sshadmin/.ssh/id_rsa.
Your public key has been saved in /home/sshadmin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:aeqHfq//JV6Qnpe9mg+g86X/IvhHfHjdsbeo+iXdYTM sshadmin@hostname
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|         .   . . |
|        S  .+ .E=|
|       o  ..o*o*B|
|      .. o..==O.+|
|     .. o.oo=Oo..|
|     .oo.=*BB+=+ |
+----[SHA256]-----+

FTP Server einrichten

Anschließend öffnen wir die Datei „/home/sshadmin/.ssh/id_rsa.pub“ und kopieren den Inhalt, speichern diesen auf dem FTP Server unter „.ssh/authorized_keys“ ab.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxFaYkvjO2a9fTdBbaRO[....] sshadmin@Ubuntu-1804-bionic-64-minimal

Auf dem FTP Server müssen wir dem Ordner die Rechte „0700“ geben. Der Datei „0600“. Ansonsten kann Borgbackup diese Datei nicht lesen. Diesen Schlüssel brauchen wir um übrigen damit wir den ganzen Backup Prozess automatisieren können per Script. Dazu unten im Text mehr dazu.

Da wir nun schon auf dem FTP Server sind, legen wir das Backupverzeichnis an. In diesem Beispiel „backups/servercloud“. Darin werden dann zukünftig alle Backups gespeichert. Achtet auf die Groß und Kleinschreibung, die ist wichtig.

Mit dem folgenden Befehl wird der private Schlüssel exportiert, damit Borgbackup mit dem zuvor erstellten Schlüssel etwas anfangen kann.

export BORG_RSH='ssh -i /home/sshadmin/.ssh/id_rsa'

Nun können wir den Ordner auf dem FTP Speicher initialisieren.

borg init --encryption=repokey ssh://u123456@u123456.your-storagebox.de:23/./backups/servercloud

Das erste Backup erstellen

Wenn dies erfolgreich war und keine Passwortabfrage erscheint, können wir das erste Backup manuell starten um zu testen ob alles klappt.

borg create ssh://u123456@u123456.your-storagebox.de:23/./backups/server1::2017_11_11_initial /Ordner1 /Ordner2

Ist das erste Backup durchgelaufen, erstellen wir ein Script was den Backupvorgang automatisiert.

Backupscript erstellen

vi /usr/local/bin/backup.sh

Diesen Inhalt dann einfügen und gegebenenfalls für eure Bedürfnisse anpassen.

#!/usr/bin/env bash
##
## Setzten von Umgebungsvariable
##

## falls nicht der Standard SSH Key verwendet wird können
## Sie hier den Pfad zu Ihrem private Key angeben
# export BORG_RSH="ssh -i /home/userXY/.ssh/id_ed25519"

## Damit das Passwort vom Repository nicht eingegeben werden muss
## kann es in der Umgepungsvariable gesetzt werden
# export BORG_PASSPHRASE="top_secret_passphrase"

##
## Setzten von Variablen
##

LOG="/var/log/borg/backup.log"
BACKUP_USER="u185784"
REPOSITORY_DIR="servercloud"

## Hinweis: Für die Verwendung mit einem Backup-Account muss
## 'your-storagebox.de' in 'your-backup.de' geändert werden.

REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"

##
## Ausgabe in Logdatei schreiben
##

exec > >(tee -i ${LOG})
exec 2>&1

echo "###### Backup gestartet: $(date) ######"

##
## An dieser Stelle können verschiedene Aufgaben vor der
## Übertragung der Dateien ausgeführt werden, wie z.B.
##
## - Liste der installierten Software erstellen
## - Datenbank Dump erstellen
##

##
## Create database dumps
##

echo "Creating database dumps ..."
/bin/bash /home/backup/scripte/mysqldump.sh

##
## Dateien ins Repository übertragen
## Gesichert werden hier beispielsweise die Ordner root, etc,
## var/www und home
## Ausserdem finden Sie hier gleich noch eine Liste Excludes,
## die in kein Backup sollten und somit per default ausgeschlossen
## werden.
##

echo "Übertrage Dateien ..."
borg create -v --stats \
$REPOSITORY::'{now:%Y-%m-%d_%H:%M}' \
/root \
/var/www \
/home \
/docker \
/home/backups/mysql \
--exclude /dev \
--exclude /proc \
--exclude /sys \
--exclude /var/run \
--exclude /run \
--exclude /lost+found \
--exclude /mnt \
--exclude /var/lib/lxcfs

echo "###### Backup beendet: $(date) ######"

Abschließend muss noch das Script ausführbar gemacht werden.

chmod u+x /usr/local/bin/backup.sh

Da ich in dem Script ein weiteres Script eingebunden habe, was meine Datenbanken sichert, muss dieses Script auch noch erstellt werden. Dafür muss ein MYSQL User erstellt werden, der nur für das Sichern der Datenbanken zuständig ist.

Mysql Backup einrichten

Die folgende Anleitung habe ich auf den Seiten von Thomas Leister gefunden. Danke dafür. 🙂

mysql -u root -p
create user 'backupuser'@'localhost' identified by 'backupuserpassword';
grant SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, TRIGGER on *.* to 'backup'@'localhost';
quit;

Zuletzt erstellen wir ein Script das die Datenbanken dann sichert. Darin passen wir die Daten zu unserem MySQL User an. Außerdem müssen die einzelnen Datenbanken angegeben werden.

vi /home/backup/scripte/mysqldump.sh
#!/bin/bash 
DBUSER="backupuser" 
DBPASSWD="backupuserpassword"
DBBAKPATH="/root/backup/dbdumps/"
DBS="nextcloud vmail spamassassin" #Datenbanken die gesichert werden sollen

for DBNAME in $DBS; do echo „Creating backup for database $DBNAME“ && mysqldump -u $DBUSER -p$DBPASSWD $DBNAME > $DBBAKPATH“$DBNAME.sql“; done

Alternativ kann man auch automysqlbackup nehmen, was auch ein Shellscript ist. Hier sollte man ebenfalls den weiter oben erstellten Backupuser eintragen. Das Script hat genau die gleiche Aufgabe wie das weiter oben erstellte Script und muss auch in die backup.sh eingetragen werden. (Danke an Markus für den Tipp)

Zum Schluss Cronjob einrichten

Zum guten Schluss wird das Backupscript noch als Cronjob eingetragen.

crontab -e

0 0 * * * /usr/local/bin/backup.sh > /dev/null 2>&1

Das sollte es dann gewesen sein…..

Quellen: Thomas Leister, Hetzner Borgbackup Wiki , Readthedocs

4 Kommentare

  1. Wenn du Borg nicht per pip installierst sollte das genügen und du brauchst die dev-libs nicht:

    apt-get install borgbackup

    Anstatt dem Script könnte man Borgmatic benutzen, was das selbe macht. Für mysql gibt es automysqlbackup, das gut in Debian und Ubuntu integriert ist.

    Hetzner ist etwas umständlich wegen den non-Standard Ports, die sie benutzen und es gibt keine Unterkonten, was bei mehreren Servern die zu sichern sind nicht optimal ist.

    Baue daher gerade ein spezialisiertes Hosting Service nur für Borg. Derzeit in public beta und 100GB gratis bis Mitte 2019. Link: https://www.borgbase.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.