How-to: Backups unter Ubuntu 16.04 mit Attic und systemd
Regelmäßige und intelligent automatisierte Backups sind beim Betrieb von Webservern unerlässlich. Daran besteht kein Zweifel. Aber für das turnusmäßige Sichern von Websites und Onlineshops gibt es eine Vielzahl möglicher Lösungen. In diesem Beitrag möchten wir eine sehr gute Möglichkeit für das Erstellen von Backups unter Ubuntu 16.04 mit systemd und Attic anhand eines anschaulichen Praxisbeispiels vorstellen.
Inhaltsverzeichnis
Schon installiert: systemd
In unserem Blog-Beitrag „Besser als Cronjobs: Timer Units mit systemd“ haben wir bereits einen kleinen Einblick in die Funktionsweise von systemd gewährt. Das Init-System systemd kann weitaus mehr als Dienste für den Systemstart zu laden. Es ist seit Ubuntu 15.04 fester Bestandteil des Betriebssystems und muss daher nicht eigens installiert werden, sondern steht sofort für den Einsatz bereit. Für das Erstellen von Backups ist systemd wichtig, da es hervorragend für die Automatisierung von Prozessen geeignet ist.
Bewährt und sicher: Attic
Für das Erstellen von Backups gibt es ausgesprochen viele mögliche Programme. Für unser Praxisbeispiel haben wir Attic (deutsch: “Dachboden”) ausgewählt, da hiermit sehr komfortabel Sicherheitskopien angelegt und dann im dafür vorgesehenen “Stauraum” auf dem Server abgelegt werden können.
Unter Ubuntu 16.04 lässt sich Attic mit diesem Befehl installieren:
$ sudo apt install attic
Ein Backup mit Attic erstellen
Wir nehmen an, dass einmal täglich alle Dateien unter /var/www/
eines Webservers, also alle sich darauf befindenden Websites und -Anwendungen, gesichert werden sollen. Um Backups mit Attic zu erstellen, wird zunächst ein sogenanntes Repository benötigt. Für unser Beispiel legen wir eines unter /root/backup/websites
an. Dazu genügt dieser Befehl:
$ sudo mkdir -p /root/backup/websites
Soll das Repository zusätzlich verschlüsselt werden, so unterstützt Attic wahlweise die Passwortabfrage beziehungsweise die Verwendung von Keyfiles. Für unser Beispiel initialisieren wir das Repository mit einer dazugehörigen Keyfile:
$ sudo attic init --encryption=keyfile /root/backup/websites
Initializing repository at "/root/backup/websites"
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Key file "/home//.attic/keys/root_backup_websites" created.
Keep this file safe. Your data will be inaccessible without it.
Die letzte Zeile der Ausgabe weist bereits darauf hin, dass ohne diese Datei keinen Zugriff auf das verschlüsselte Attic Repository mehr möglich ist. Daher sollte diese Keyfile zusätzlich unbedingt an einem weiteren sicheren Ort gespeichert werden.
Nun ist es sehr einfach, ein erstes Backup zu erstellen:
$ sudo attic create /root/backup/websites::`date +%Y-%m-%d.%H:%M:%S` /var/www
Anschließend lassen sich die enthaltenen Archive (so nennt Attic die einzelnen Sicherungspunkte) mit diesem Befehl anzeigen:
$ sudo attic list /root/backup/websites
Natürlich lässt sich Attic auch mit einer Vielzahl anderer Optionen verwenden. Mehr dazu findet sich in der Attic Dokumentation.
Shell-Skript für Attic Backups
Natürlich möchte niemand regelmäßig von Hand Backups durchführen. Aber damit dieser Prozess automatisiert werden kann, muss zunächst ein Skript im Dateisystem angelegt werden, das den entsprechenden Befehl enthält.
Datei: /root/backup.sh
(Shell-Skript für Attic Backups)
#!/bin/bash
sudo attic create /root/backup/websites::`date +%Y-%m-%d.%H:%M:%S` /var/www
Automatisierung mit systemd
Und nun kommt systemd ins Spiel. Denn es muss ja noch definiert werden, dass das gerade erzeugte Skript automatisch ausgeführt werden und in welchem Turnus das geschehen soll. Wie beim Einsatz von systemd üblich, bedarf es dazu zwei Komponenten: einer Service Unit und einer Timer Unit. In der Service Unit wird definiert, was der zu definierende Dienst tut, und in der dazugehörigen Timer Unit wird festgelegt, wann dieser Dienst jeweils gestartet werden soll. Beide Dateien werden im Verzeichnis /etc/systemd/system
angelegt.
Datei: /etc/systemd/system/backup-webserver.service
(Service Unit)
[Unit]
Description=Backup Webserver
[Service]
ExecStart=/root/backup.sh
Die Service Unit besteht also lediglich aus einer Beschreibung des Dienstes (“Backup Webserver”) im Abschnitt [Unit]
und definiert diesen unter [Service]
technisch als die Ausführung des Shell Skripts für das Backup. Die dazugehörige Timer Unit ist schon ein wenig komplexer.
Datei: /etc/systemd/system/backup-webserver.timer
(Timer Unit)
[Unit]
Description=Tägliches Backup (Webserver)
[Timer]
OnCalendar=03:00
OnUnitActiveSec=24h
Persistent=true
Unit=backup-webserver.service
[Install]
WantedBy=timers.target
Auch die Timer Unit enthält im Bereich [Unit]
zunächst eine Beschreibung (“Tägliches Backup (Webserver)”).
Der Abschnitt [Timer]
enthält in unserem Beispiel vier Zeilen, in denen definiert wird, dass der Dienst um 3:00 Uhr und dann immer 24 Stunden nach dem Start der letzten Ausführung gestartet werden soll. Die Option Persistent=true
sorgt dafür, dass der Dienst auch dann wieder gestartet werden soll, wenn er beim letzten Mal nicht wie geplant laufen konnte (zum Beispiel weil das System zum fraglichen Zeitpunkt gerade heruntergefahren war). Schließlich wird noch angegeben, unter welchem Dateinamen die entsprechende Service Unit gespeichert ist. Weitere Informationen über Konfigurationsmöglichkeiten von Timer Units finden sich in der Ubuntu Dokumentation.
Nachdem die Dateien mit den gewünschten Optionen angelegt worden sind, muss die Timer Unit noch mithilfe von systemctl
aktiviert werden:
$ sudo systemctl enable backup-webserver.timer
Um den Timer ohne Systemneustart zu starten, muss dieser Befehl ausgeführt werden:
$ sudo systemctl start backup-webserver.timer
Aktive Timer lassen sich dann mit diesem Befehl auflisten:
$ sudo systemctl list-timers
Damit ist das automatisierte Backup-System einsatzbereit. Sämtliche Unterverzeichnisse und Dateien aus dem Webroot werden künftig jede Nacht von systemd gesteuert mit Attic in dem durch eine Keyfile geschützten Verzeichnis /root/backup/websites
gesichert.
Sehr informativer Beitrag, vielen Dank