Synology, Docker und Speicher 11 Min. Lesezeit

S3-kompatibler Speicher auf einem Synology-NAS mit RustFS

RustFS im Container Manager bereitstellen, die S3-API und die Konsole hinter einem Reverse Proxy veröffentlichen und einen ersten Bucket anlegen.

Mit RustFS wird ein Synology-NAS zum Objektspeicher, der mit der S3-API kompatibel ist. Diese Anleitung installiert den Dienst im Container Manager, trennt die API sauber von der Web-Konsole und veröffentlicht beide hinter dem Reverse Proxy von DSM.

Was ist RustFS?

RustFS ist ein quelloffener Objektspeicher-Server, in Rust geschrieben und unter der Apache-2.0-Lizenz veröffentlicht. Dank der S3-Kompatibilität lässt er sich mit den zahlreichen Sicherungswerkzeugen, Anwendungen und Bibliotheken nutzen, die für diese API entwickelt wurden.

Auf einem NAS kann er dazu dienen, Anwendungssicherungen, statische Dateien oder Archive zu bündeln. Er ersetzt jedoch keine Sicherungsstrategie: Die Daten von RustFS müssen selbst auf einen anderen Datenträger oder an einen anderen Standort kopiert werden.

Bevor Sie beginnen

  • Installieren Sie Container Manager aus dem Paket-Zentrum von DSM.
  • Bereiten Sie zwei DNS-Namen vor, zum Beispiel s3.beispiel.be für die API und console-s3.beispiel.be für die Verwaltung.
  • Verbinden Sie in DSM ein gültiges TLS-Zertifikat mit beiden Namen.
  • Wählen Sie lange, eindeutige Zugangsdaten und bewahren Sie sie in einem Passwortspeicher auf.
  • Planen Sie eine unabhängige Sicherung des Datenordners, bevor Sie dem Dienst wichtige Dateien anvertrauen.

Die Ordner vorbereiten

Legen Sie in der File Station docker/rustfs an und darin zwei Unterordner: data für die Objekte und logs für die Protokolle. Passen Sie den Namen des Volumes an, falls Ihre Installation nicht volume1 verwendet.

Die Ordner data und logs des RustFS-Projekts in der File Station, auf Französisch
Das Projekt hält Daten und Protokolle von RustFS getrennt.

Das offizielle Abbild führt den Dienst mit UID/GID 10001 aus. Am restriktivsten ist es, nur diesem Benutzer Schreibrechte auf beiden Ordnern zu geben:

sudo chown -R 10001:10001 /volume1/docker/rustfs/data /volume1/docker/rustfs/logs
sudo chmod -R u+rwX,go-rwx /volume1/docker/rustfs/data /volume1/docker/rustfs/logs

Arbeiten Sie ausschließlich über die Oberfläche von DSM, machen Sie zuerst die geerbten Berechtigungen explizit und gewähren Sie danach dem Konto oder der Gruppe, die der Container Manager verwendet, Lese- und Schreibrechte. Die folgenden Bildschirmfotos zeigen den Weg in DSM. Vermeiden Sie im Produktivbetrieb Lese- und Schreibrechte für Everyone; ist diese Einstellung für einen Test nötig, beschränken Sie sie streng auf den Ordner rustfs.

Geerbte Berechtigungen in DSM explizit machen, auf Französisch
Machen Sie die geerbten Berechtigungen explizit, bevor Sie sie anpassen.
Der Berechtigungseditor von DSM, auf Französisch
Ziehen Sie im Produktivbetrieb ein eigenes Konto oder eine eigene Gruppe Everyone vor.

Das Projekt im Container Manager anlegen

Wählen Sie in Container Manager → Projekt die Schaltfläche Erstellen, benennen Sie das Projekt rustfs und wählen Sie den Ordner /docker/rustfs. Fügen Sie danach diese Datei docker-compose.yml ein:

services:
  rustfs:
    image: rustfs/rustfs:latest
    container_name: rustfs-server
    security_opt:
      - no-new-privileges:true
    ports:
      - "9000:9000" # S3-API
      - "9001:9001" # Web-Konsole
    environment:
      RUSTFS_VOLUMES: /data/rustfs0
      RUSTFS_ADDRESS: 0.0.0.0:9000
      RUSTFS_CONSOLE_ADDRESS: 0.0.0.0:9001
      RUSTFS_CONSOLE_ENABLE: "true"
      RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS: https://console-s3.beispiel.be
      RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
      RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
    volumes:
      - ./data:/data/rustfs0
      - ./logs:/var/log/rustfs
    restart: unless-stopped

Legen Sie daneben eine Datei .env an. Die folgenden Werte sind bewusst Platzhalter: Ersetzen Sie sie, bevor Sie das Projekt starten, und veröffentlichen Sie diese Datei niemals.

RUSTFS_ACCESS_KEY=BITTE_AENDERN
RUSTFS_SECRET_KEY=ERZEUGEN_SIE_EIN_LANGES_EINDEUTIGES_GEHEIMNIS
Das Anlegen des RustFS-Projekts im Container Manager, auf Französisch
Legen Sie das Projekt in /docker/rustfs an und verwenden Sie die obige Konfiguration.
Das Terminal des Container Managers meldet den Start von RustFS
Ein Rückgabewert von 0 bestätigt, dass der Container angelegt wurde.

Den Reverse Proxy einrichten

Legen Sie in Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy zwei getrennte Regeln an. Das ist der Punkt, den man nicht vertauschen darf:

  • https://s3.beispiel.be:443 auf http://localhost:9000 für die S3-API.
  • https://console-s3.beispiel.be:443 auf http://localhost:9001 für die Web-Konsole.

Ergänzen Sie für die Konsole die WebSocket-Header $http_upgrade und $connection_upgrade. Zeitlimits von 600 Sekunden passen zu langen Übertragungen, sind aber an Ihre Umgebung anzupassen. Weisen Sie danach beiden Hostnamen das richtige TLS-Zertifikat zu.

Die Reverse-Proxy-Regel für die RustFS-Konsole, auf Französisch
Diese Regel zeigt die Konsole auf Port 9001. Legen Sie eine zweite Regel für die API auf Port 9000 an.

Die Firewall von DSM anpassen

Öffnen Sie die Ports 9000 und 9001 nicht direkt zum Internet. Erlauben Sie zunächst HTTPS zum Reverse Proxy und beschränken Sie die internen Ports danach auf das NAS, das Verwaltungsnetz oder das tatsächlich genutzte Docker-Subnetz.

Öffnen Sie Container Manager → Netzwerk und klappen Sie das Netzwerk des Projekts auf, um dieses Netz zu ermitteln. Im Beispiel entspricht 172.18.0.0/16 der Maske 255.255.0.0. Ihr Wert kann abweichen: Übernehmen Sie ihn genau und setzen Sie die Erlaubnisregel vor die Ablehnungsregeln.

Das im Container Manager angezeigte Docker-Subnetz, auf Französisch
Notieren Sie das tatsächliche Subnetz des Projekts, bevor Sie die Firewall ändern.

Den ersten Bucket anlegen

Öffnen Sie https://console-s3.beispiel.be und melden Sie sich mit dem Zugangsschlüssel und dem geheimen Schlüssel aus .env an. Legen Sie im Browser Ihren ersten Bucket an, zum Beispiel bucket01.

Die Anmeldeseite von RustFS, vollständig ins Französische übersetzt
Melden Sie sich mit den in .env hinterlegten Zugangsdaten an.
Die Bucket-Liste in der RustFS-Konsole, auf Französisch
Der erste Bucket erscheint im Objektbrowser.

Legen Sie danach einen Zugangsschlüssel an, der eigens für die Anwendung gilt, die diesen Bucket nutzt. Der geheime Schlüssel wird nur im Moment der Erstellung angezeigt: Übertragen Sie ihn in Ihren Passwortspeicher und schließen Sie danach das Fenster. Die Werte im Bildschirmfoto wurden bewusst unkenntlich gemacht.

Das Anlegen eines RustFS-Zugangsschlüssels mit unkenntlich gemachten Geheimnissen
Sichern Sie den geheimen Schlüssel sofort; die gezeigten Werte sind unkenntlich gemacht.
Die Wahl der Richtlinie eines RustFS-Buckets, auf Französisch
Behalten Sie die Richtlinie Privat bei, sofern kein öffentlicher Bedarf ausdrücklich freigegeben wurde.

Den Dienst prüfen

RustFS bietet für jede Schnittstelle eine Zustandsprüfung. Beide Befehle müssen fehlerfrei antworten:

curl -fsS https://s3.beispiel.be/health
curl -fsS https://console-s3.beispiel.be/rustfs/console/health

Testen Sie danach einen Upload und einen Download mit dem S3-Client, den Sie tatsächlich einsetzen wollen, und starten Sie den Container neu, um zu bestätigen, dass die Daten in docker/rustfs/data erhalten bleiben.

Kurz gefasst

Die Bereitstellung passt in ein einziges Projekt des Container Managers, doch drei Details machen den Unterschied: eingeschränkte Rechte auf den Volumes, Geheimnisse außerhalb der Compose-Datei und zwei sauber getrennte Proxy-Regeln. Die S3-API nutzt Port 9000, die Konsole Port 9001.

Quellen

Über den Autor

Jeremy Kraft betreut die Infrastruktur und die selbst gehosteten Dienste des IBCSC. Diese Anleitungen beschreiben Konfigurationen, die tatsächlich im Einsatz waren und vor der Veröffentlichung erneut geprüft wurden.

Diskussion

Kommentare

0

Noch kein Kommentar. Eröffnen Sie die Diskussion gern mit einer Frage oder Ihrem eigenen Erfahrungsbericht.