Website-Suche

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-Speicher zu speichern. Durch die Verwendung der restic REST Backend API ist es auch möglich, Backups über das HTTP- oder HTTPS-Protokoll auf einen Remote-Server zu pushen, der die restic REST API implementiert.

In diesem Tutorial lernen wir, wie Sie Docker verwenden, um eine restic REST-Serverinstanz unter Linux bereitzustellen und zu konfigurieren.

In diesem Tutorial lernen Sie:

  • So stellen Sie einen Restic-REST-Server mit Docker unter Linux bereit
  • Konfigurieren der Authentifizierung und Verwenden der 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 die Sicherungsdaten gehostet werden. Für dieses Tutorial werde ich ein "data"-Verzeichnis in meinem HOME erstellen. Dieses Verzeichnis wird innerhalb des Containers gebunden:

mkdir ~/data

Auf dem restic-REST-Server, der im Docker-Container ausgeführt wird, ist die Authentifizierung standardmäßig aktiviert. Dies ist wichtig, um unbefugte Zugriffe auf unsere Daten zu vermeiden. Die Authentifizierung des restic REST-Servers erfolgt über eine .htpasswd-Datei; Der REST-Server sucht nach dieser Datei im selben Verzeichnis, in dem die 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 .htpasswd-Datei zu füllen, führen wir Folgendes aus:

htpasswd -B -c ~/data/.htpasswd resticuser

Mit dem obigen Befehl erstellen wir die Konfiguration, die für den Zugriff auf den Server mit dem Benutzernamen "resticuser" erforderlich ist. Wenn wir kein Passwort direkt als Argument für den Befehl 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 mit dem bcrypt-Algorithmus gehasht, der als sehr sicher gilt.

Ausführen des REST-Server-Containers restic

Der restic REST Server ist eine 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 spawnen, 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 innerhalb des Containers auf Port 8000, daher haben wir die Option -p verwendet, um Port 8000 auf dem Host demselben Port innerhalb des Containers zuzuordnen (wir hätten jeden Host-Port verwenden können, z. B. Port 80, aber mit einem unprivilegierten 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 Backups persistent zu machen, binden wir, wie bereits erwähnt, das Verzeichnis ~/data auf dem Host an das gleiche Verzeichnis innerhalb des Containers, in dem die Snapshots gespeichert werden. Im Beispiel haben wir die Option :z für den Bind-Mount verwendet: Dies ist nur erforderlich, wenn SELinux aktiv ist, und bewirkt eine Änderung des Kontexts für das gemountete Verzeichnis, so dass es vom Container aus zugänglich ist.

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 das Übergeben von Anmeldeinformationen über eine Klartext-HTTP-Verbindung wirklich vermeiden. Um den restic REST-Server über HTTPS zu verwenden, müssen wir ein SSL/TLS-Zertifikat verwenden. Mal sehen, wie es geht.

Verwenden einer sicheren HTTPS-Verbindung

Es gibt viele Möglichkeiten, wie wir ein SSL/TLS-Zertifikat erhalten können. Wenn wir beabsichtigen, unseren restic REST-Server dem Internet zur Verfügung zu stellen, müssen wir ein gültiges Zertifikat eines Drittanbieters für unsere Domain verwenden. Wir können eine ganz einfach von Let's Encrypt mit certbot 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 generieren.

Hier gehe ich davon aus, dass wir bereits sowohl das Zertifikat (das den öffentlichen Schlüssel enthält) als auch den privaten Schlüssel, der als public_key bzw. private_key gespeichert ist, haben. Der einfachste Weg, sie mit dem REST-Server zu verwenden, der in einem Docker-Container ausgeführt wird, besteht darin, beide in dem Datenverzeichnis zu platzieren, das wir in den Container eingebunden haben (das gleiche Verzeichnis, in dem sich die .htpasswd-Datei befindet), und den Server mit der Option --tls auszuführen. Da wir den Server jedoch nicht direkt ausführen, 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 Überprüfung des TLS-Zertifikats überspringt, wenn eine Verbindung zu einem Repository hergestellt wird:

restic -r rest:https://resticuser:resticpassword@localhost:8000 --insecure-tls init

Schlüsse

In diesem Tutorial haben wir gelernt, wie Sie einen restic REST-Server mit Docker unter Linux bereitstellen. Mit restic können wir Backups lokal oder remote erstellen, über SFTP-Verbindungen, einen der unterstützten Speicherdienste von Drittanbietern oder auf einen restic REST-Server. Letzteres bietet im Vergleich zu SFTP eine bessere Leistung und gibt uns die Möglichkeit, Verbindungen nur durch Anfügen auszuführen. Um mehr über restic und die Durchführung effizienter Backups zu erfahren, können Sie einen Blick auf unsere Schritt-für-Schritt-Anleitung werfen.

Verwandte Artikel: