So installieren und konfigurieren Sie einen Restic-REST-Server unter Linux
Restic ist ein effizientes und modernes Deduplizierungs-Backup-System, das Verschlüsselung unterstützt; Es ist in der Lage, Backups lokal und remote, über eine SFTP-Verbindung oder auf einer der vielen unterstützten Speicherplattformen wie Amazon S3 Buckets und Google Cloud Storage zu speichern. Durch die Verwendung der Restic-REST-Backend-API ist es auch möglich, Backups mithilfe der HTTP- oder HTTPS-Protokolle an einen Remote-Server zu übertragen, der die Restic-REST-API implementiert.
In diesem Tutorial erfahren wir, wie Sie mit Docker eine Restic-REST-Serverinstanz unter Linux bereitstellen und konfigurieren.
In diesem Tutorial lernen Sie:
- So stellen Sie einen Restic-REST-Server mit Docker unter Linux bereit
- So konfigurieren Sie die Authentifizierung und verwenden die SSL/TLS-Verschlüsselung
Erstellen des Repository-Verzeichnisses und Generieren von Anmeldeinformationen
Bevor wir unseren Restic-REST-Server mit Docker bereitstellen können, müssen wir das Verzeichnis auswählen, in dem unser Repository und unsere Sicherungsdaten gehostet werden. Für dieses Tutorial werde ich in meinem HOME ein „Daten“-Verzeichnis erstellen. Dieses Verzeichnis wird im Container per Bind-Mount bereitgestellt:
$ mkdir ~/data
Der Restic-REST-Server, der im Docker-Container ausgeführt wird, verfügt standardmäßig über eine aktivierte Authentifizierung. Dies ist wichtig, um einen unberechtigten Zugriff auf unsere Daten zu verhindern. Die Restic-REST-Serverauthentifizierung wird über eine .htpasswd-Datei implementiert; Der REST-Server sucht nach dieser Datei im selben Verzeichnis, in dem Snapshots gespeichert sind.
Um unsere Authentifizierungsdaten zu generieren, müssen wir das Dienstprogramm htpasswd verwenden. Bei Fedora und Fedora-basierten Distributionen ist das Dienstprogramm im Paket httpd-tools enthalten. Wir können es mit dnf installieren:
$ sudo dnf install httpd-tools
Auf Debian und Debian-basierten Distributionen heißt das Paket stattdessen apache2-utils:
$ sudo apt-get update && sudo apt-get install apache2-utils
Um die Datei .htpasswd zu füllen, führen wir Folgendes aus:
$ htpasswd -B -c ~/data/.htpasswd resticuser
Mit dem obigen Befehl erstellen wir die erforderliche Konfiguration, um mit dem Benutzernamen „resticuser“ auf den Server zuzugreifen. Wenn wir dem Befehl kein Passwort direkt als Argument angeben, werden wir aufgefordert, es interaktiv einzugeben:
New password:
Re-type new password:
Adding password for user restserver
Da wir die Option -B
verwendet haben, wird das Passwort mithilfe des bcrypt-Algorithmus gehasht, der als sehr sicher gilt.
Ausführen des Restic-REST-Servercontainers
Der restic REST-Server ist kostenlose Open-Source-Software; Wie die Restic-Anwendung ist sie in Go geschrieben und auf GitHub entwickelt. Der schnellste und einfachste Weg, einen Restic-REST-Server bereitzustellen, besteht darin, Docker (oder Podman) zu verwenden, um einen Container basierend auf dem vom Projekt bereitgestellten Server-Image auszuführen, das auf DockerHub verfügbar ist. Um einen Restic-REST-Server-Container zu erstellen und zu erzeugen, müssen wir lediglich den folgenden Befehl verwenden:
$ docker run -p 8000:8000 -v ~/data:/data:z --name restic_rest_server docker.io/restic/rest-server
Werfen wir einen Blick auf die Optionen, die wir mit dem Befehl verwendet haben. Standardmäßig lauscht der REST-Server im Container auf Port 8000, daher haben wir die Option -p
verwendet, um Port 8000 auf dem Host demselben Port im Container zuzuordnen (wir hätten jeden Host-Port verwenden können). B. Port 80, aber mit einem nicht privilegierten Port können wir den Container problemlos als Nicht-Root-Benutzer erzeugen. Schauen Sie sich dieses Tutorial an (wenn Sie einen höheren Port verwenden möchten, wenn Sie Docker oder Podman ohne Root-Rechte ausführen).
Um Sicherungen dauerhaft zu machen, haben wir, wie bereits erwähnt, das Verzeichnis ~/data
auf dem Host an dasselbe Verzeichnis im Container gebunden, in dem Snapshots gespeichert werden. Im Beispiel haben wir die Option :z für den Bind-Mount verwendet: Diese ist nur erforderlich, wenn SELinux aktiv ist und bewirkt eine Kontextänderung für das gemountete Verzeichnis, sodass vom Container aus darauf zugegriffen werden kann.
Initialisieren eines Repositorys
Zu diesem Zeitpunkt sollten wir bereits in der Lage sein, ein Restic-Repository mit dem Restic-Client zu initialisieren, indem wir die URL rest:http://resticuser:resticpassword@localhost:8000 verwenden:
restic -r rest:http://resticuser:resticpassword@localhost:8000 init
Wenn alles wie erwartet verläuft, wird das Repository korrekt generiert und initialisiert:
created restic repository 0216975ff5 at rest:http://resticuser:***@localhost:8000/
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Obwohl das Repository korrekt generiert wurde, sollten wir die Weitergabe von Anmeldeinformationen über eine Klartext-HTTP-Verbindung unbedingt vermeiden. Um den restic REST-Server über HTTPS nutzen zu können, müssen wir ein SSL/TLS-Zertifikat verwenden. Mal sehen, wie es geht.
Verwendung einer sicheren HTTPS-Verbindung
Es gibt viele Möglichkeiten, ein SSL/TLS-Zertifikat zu erhalten. Wenn wir beabsichtigen, unseren Restic-REST-Server dem Internet zugänglich zu machen, müssen wir ein gültiges Drittanbieterzertifikat für unsere Domain verwenden. Mit certbot können wir ganz einfach eines von Let’s Encrypt erhalten. Wenn wir jedoch nur einige Tests durchführen möchten oder planen, unseren Server ausschließlich in unserem eigenen Netzwerk zu verwenden, reicht es aus, ein selbstsigniertes Zertifikat zu erstellen.
Hier gehe ich davon aus, dass wir bereits sowohl das Zertifikat (das den öffentlichen Schlüssel enthält) als auch den privaten Schlüssel haben, der als public_key bzw. private_key gespeichert ist. Der einfachste Weg, sie mit dem REST-Server zu verwenden, der in einem Docker-Container läuft, besteht darin, beide in dem Datenverzeichnis zu platzieren, das wir innerhalb des Containers gebunden haben (dasselbe Verzeichnis, in dem sich die Datei .htpasswd befindet). ) und führen Sie den Server mit der Option --tls
aus. Da wir den Server jedoch nicht direkt betreiben, müssen wir diese Option über die Umgebungsvariable OPTIONS
übergeben, wenn wir den Container ausführen:
$ docker run -p 8000:8000 -v ~/data:/data:z -e OPTIONS="--tls" --name restic_rest_server docker.io/restic/rest-server
Wir können jetzt über HTTPS mit dem Server kommunizieren. Da wir in diesem Fall ein ungültiges selbstsigniertes Zertifikat verwendet haben, müssen wir den Restic-Client mit der Option --insecure-tls
ausführen, die die TLS-Zertifikatsüberprüfung beim Herstellen einer Verbindung zu einem Repository überspringt:
$ restic -r rest:https://resticuser:resticpassword@localhost:8000 --insecure-tls init
Schlussfolgerungen
In diesem Tutorial haben wir gelernt, wie man einen Restic-REST-Server mit Docker unter Linux bereitstellt. Mit Restic können wir Backups lokal oder remote über SFTP-Verbindungen, einen der unterstützten Speicherdienste von Drittanbietern oder auf einen Restic-REST-Server erstellen. Letzteres bietet im Vergleich zu SFTP eine bessere Leistung und gibt uns die Möglichkeit, reine Anhängeverbindungen auszuführen. Um mehr über Restic und die Durchführung effizienter Backups zu erfahren, können Sie sich unser Schritt-für-Schritt-Tutorial ansehen.