S3-Speicher nach dem MinIO-Aus: SeaweedFS mit Docker selbst hosten
MinIO Community wird nicht mehr gepflegt. Diese Anleitung zeigt SeaweedFS 4.48 als S3-kompatiblen Objektspeicher mit Docker Compose: weed mini, Zugangsdaten, Port nur lokal, Reverse Proxy mit TLS, Migration und Backup.
Geprüft am 30.09.2026
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

MinIO war lange die Standardwahl für selbst gehosteten S3-Speicher. Das ist vorbei: Das GitHub-Repository minio/minio ist archiviert, das README beginnt mit „THIS REPOSITORY IS NO LONGER MAINTAINED“ und verweist nur noch auf die proprietären Produkte AIStor Free und AIStor Enterprise. Das SeaweedFS-Projekt nennt in seinem README den 25. April 2026 als Datum, an dem die Entwicklung von MinIO endete. Wer heute neu aufsetzt, braucht eine gepflegte Alternative. Diese Anleitung zeigt SeaweedFS 4.48 (Apache-2.0) als S3-kompatiblen Objektspeicher auf einem einzelnen Server mit Docker Compose, abgesichert hinter einem Reverse Proxy.
Voraussetzungen
- Linux-Server oder VPS mit x86_64 oder ARM64 (das Image gibt es zusätzlich für 386 und arm), 2 CPU-Kerne, 4 GB RAM.
- Speicher für das Image (rund 190 MB komprimiert für amd64) plus die Datenmenge, die Sie ablegen wollen, auf einem eigenen Datenträger oder Dateisystem mit Reserve.
- Docker Engine mit Compose-Plugin (Docker-Installation).
- Eine Domain wie
s3.example.deund ein Reverse Proxy mit TLS (Caddy als Reverse Proxy einrichten). - Ein S3-Client zum Prüfen, zum Beispiel die AWS CLI, rclone oder restic.
Eckdaten
| Punkt | Wert |
|---|---|
| Image | chrislusf/seaweedfs:4.48 |
| Version | 4.48 vom 28. September 2026, aktuelles Release am 30.09.2026 |
| Lizenz | Apache-2.0 |
| Standardbefehl im Image | mini mit Datenverzeichnis /data |
| S3-Port | 8333 |
| Weitere Ports | 9333 Master, 8888 Filer, 7333 WebDAV, 23646 Admin UI |
| Daten | /data |
| Wichtige Env | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, S3_BUCKET |
Schritt 1: MinIO-Status prüfen und Daten sichern
Betreiben Sie bereits MinIO, sichern Sie zuerst die Buckets. Die Community-Images erhalten keine Sicherheitsupdates mehr, das SeaweedFS-README rät ausdrücklich davon ab, die ungepflegte Software weiter zu nutzen. Den Status des Repositorys prüfen Sie selbst:
curl -s https://api.github.com/repos/minio/minio | grep -E '"archived"|"pushed_at"'Planen Sie den Umzug, bevor Sie neue Daten in MinIO ablegen. Eine Umstellung der Clients ist meist einfach, weil beide Systeme die S3-API sprechen: Endpunkt, Access Key und Secret Key ändern sich, Bucket-Namen können gleich bleiben.
Verifizieren: Die Ausgabe enthält "archived": true. Für jeden MinIO-Bucket liegt eine aktuelle Kopie außerhalb von MinIO vor.
Schritt 2: Projektordner und Zugangsdaten
Legen Sie Projekt- und Datenordner an und erzeugen Sie Zugangsdaten mit ausreichender Länge:
mkdir -p /opt/seaweedfs/data
cd /opt/seaweedfs
cat > .env <<EOF
AWS_ACCESS_KEY_ID=s3admin
AWS_SECRET_ACCESS_KEY=$(openssl rand -base64 30 | tr -d '/+=')
S3_BUCKET=backup
EOF
chmod 600 .envLaut Dokumentation zu weed mini legen diese Variablen beim Start die ersten S3-Zugangsdaten an, S3_BUCKET erzeugt den Bucket, mehrere Namen trennen Sie mit Komma. Fehlen die Zugangsdaten, läuft das S3-Gateway im Modus „Allow All“: Jede Anfrage wird ohne Signatur akzeptiert. Das ist nur für Entwicklungsumgebungen gedacht.
Verifizieren: cat .env zeigt drei Zeilen, der Secret Key ist rund 40 Zeichen lang, ls -l .env zeigt -rw-------.
Schritt 3: Compose-Datei
Das Image startet ohne eigenen Befehl bereits weed mini mit dem Datenverzeichnis /data. Die folgende Datei ergänzt drei Parameter: -s3.externalUrl für die Signaturprüfung hinter dem Proxy, -master.telemetry=false, weil der Master laut Quellcode sonst anonyme Clusterstatistiken an telemetry.seaweedfs.com meldet, und -webdav=false, wenn Sie WebDAV nicht brauchen.
services:
seaweedfs:
image: chrislusf/seaweedfs:4.48
container_name: seaweedfs
restart: unless-stopped
env_file: .env
command:
- mini
- -dir=/data
- -s3.externalUrl=https://s3.example.de
- -master.telemetry=false
- -webdav=false
volumes:
- ./data:/data
ports:
- "127.0.0.1:8333:8333"Nur der S3-Port ist veröffentlicht, und zwar ausschließlich an 127.0.0.1. Master, Filer und Admin-Oberfläche bleiben im Container. Die Admin-Oberfläche auf Port 23646 hat laut Dokumentation zu weed mini standardmäßig keine Anmeldung. Wenn Sie sie nutzen wollen, setzen Sie -admin.password als zusätzlichen Parameter, veröffentlichen Sie den Port nur an 127.0.0.1 und greifen Sie per SSH-Tunnel zu.
Verifizieren: docker compose config läuft ohne Fehler und zeigt als Port 127.0.0.1:8333.
Schritt 4: Starten und Bucket prüfen
docker compose up -d
docker compose logs --tail 30
docker compose exec -T seaweedfs weed shell <<< "s3.bucket.list"Mit weed shell verwalten Sie SeaweedFS direkt im Container, ohne S3-Client. Weitere Buckets legen Sie laut Dokumentation mit s3.bucket.create -name NAME an.
Verifizieren: docker compose ps zeigt den Container als Up, und s3.bucket.list nennt den Bucket backup.
Schritt 5: Zugriff mit einem S3-Client
Prüfen Sie zuerst lokal auf dem Server, dass Anfragen ohne Signatur abgewiesen werden und mit Zugangsdaten funktionieren. Die AWS CLI läuft auch als Container:
source .env
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8333/backup/
echo "Test" > /tmp/test.txt
docker run --rm --network host -v /tmp:/tmp \
-e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION=us-east-1 \
amazon/aws-cli --endpoint-url http://127.0.0.1:8333 s3 cp /tmp/test.txt s3://backup/
docker run --rm --network host \
-e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION=us-east-1 \
amazon/aws-cli --endpoint-url http://127.0.0.1:8333 s3 ls s3://backup/Für Programme gilt dasselbe Muster: Endpunkt auf Ihre Domain, Pfad-Adressierung (path style) aktivieren, Region beliebig, etwa us-east-1. Viele Werkzeuge, die bisher MinIO nutzten, brauchen nur diese drei Angaben.
Verifizieren: Der anonyme curl-Aufruf liefert nicht 200, sondern einen Fehlerstatus. Die AWS CLI listet test.txt.
Schritt 6: Reverse Proxy mit TLS
S3-Clients signieren jede Anfrage mit dem Hostnamen. Steht ein Proxy davor, sieht SeaweedFS intern einen anderen Host. Deshalb setzen Sie in Schritt 3 -s3.externalUrl auf die öffentliche Adresse. Die SeaweedFS-Dokumentation zum Nginx-Proxy verlangt außerdem proxy_request_buffering off, weil gepufferte Uploads sonst mit falscher Signatur ankommen. Mit Caddy genügt:
s3.example.de {
request_body {
max_size 5GB
}
reverse_proxy 127.0.0.1:8333
}Caddy puffert Anfragen standardmäßig nicht. Für virtuelle Bucket-Adressen wie backup.s3.example.de bräuchten Sie einen Wildcard-DNS-Eintrag und -s3.domainName. Die Pfad-Adressierung s3.example.de/backup ist einfacher und wird von gängigen Clients unterstützt.
Verifizieren: Der Befehl aus Schritt 5 mit --endpoint-url https://s3.example.de listet test.txt ohne Fehler SignatureDoesNotMatch.
Schritt 7: Migration und Backup
Für den Umzug aus MinIO eignet sich rclone mit zwei S3-Remotes, eines für die alte MinIO-Instanz, eines für SeaweedFS. rclone sync minio:bucket seaweed:bucket kopiert alle Objekte, rclone check vergleicht anschließend Größen und Prüfsummen.
SeaweedFS speichert Objekte nicht als einzelne Dateien, sondern in Volume-Dateien mit Metadaten im Filer. Sichern Sie das Datenverzeichnis deshalb nur im gestoppten Zustand und immer vollständig:
cd /opt/seaweedfs
docker compose stop
sudo tar czf /opt/backup/seaweedfs-$(date +%F).tar.gz data .env compose.yaml
docker compose startEin Objektspeicher ist ein gutes Backup-Ziel, aber kein Backup für sich. Kopieren Sie wichtige Buckets zusätzlich auf ein anderes System, etwa mit rclone auf ein zweites Ziel. Wie restic S3 als Ziel nutzt, zeigt die 3-2-1-Backup-Strategie mit restic.
Verifizieren: tar tzf auf das Archiv listet Dateien unter data/. rclone check meldet nach der Migration 0 differences found.
Typische Fehler
SignatureDoesNotMatchhinter dem Proxy:-s3.externalUrlfehlt oder weicht von der Adresse ab, die der Client nutzt. Auch Pufferung im Proxy verursacht diesen Fehler.- Bucket für alle beschreibbar: Keine Zugangsdaten gesetzt, das Gateway läuft in „Allow All“.
.envprüfen und Container neu erstellen. - Admin-Oberfläche ohne Anmeldung erreichbar: Port 23646 wurde veröffentlicht, ohne
-admin.passwordzu setzen. Passwort ergänzen und Port nur an 127.0.0.1 binden. Bind for 127.0.0.1:8333 failed: port is already allocated: Ein anderer Dienst, oft ein alter MinIO- oder S3-Container, belegt den Port. Anderen Host-Port wählen.- Client findet den Bucket nicht: Der Client nutzt virtuelle Hostnamen. Pfad-Adressierung aktivieren (
force_path_style,--s3-force-path-styleoder ähnlich). - Neuer MinIO-Tag lässt sich nicht ziehen oder bleibt alt: Die Community-Images erhalten keine Updates mehr. Nicht als Fehler behandeln, sondern migrieren.
Häufige Fragen
Ist weed mini für den Produktivbetrieb gedacht?
Laut Dokumentation ja, für Einzelknoten und kleine Cluster. Hochverfügbarkeit mit mehreren Mastern bietet es nicht. Dafür empfiehlt das Projekt getrennte Komponenten. Das Projekt weist außerdem darauf hin, dass sich Standardwerte von weed mini zwischen Versionen ändern können. Deshalb ist der Tag hier fest gesetzt.
Warum nicht Garage oder RustFS?
Beide sind gepflegte Alternativen. Garage ist auf verteilte Knoten an mehreren Standorten ausgelegt, RustFS bildet MinIO nach. Einen Vergleich bietet die Anleitung S3-Speicher nach dem MinIO-Aus: Garage und RustFS. SeaweedFS eignet sich besonders bei vielen kleinen Dateien und bringt WebDAV und einen Filer mit.
Kann ich mehrere Benutzer mit eigenen Buckets anlegen?
Ja. Laut Dokumentation sind Rechte je Bucket möglich, etwa Read:mybucket und Write:mybucket, über die Admin-Oberfläche oder eine JSON-Datei mit -s3.config.
Gibt es eine Weboberfläche wie bei MinIO?
Ja, die Admin UI auf Port 23646 für Benutzer, Zugangsschlüssel und Systemstatus, dazu die Filer-Oberfläche auf Port 8888 zum Durchsuchen der Dateien.
Testumfang
Diese Neufassung wurde am 30.09.2026 nicht praktisch getestet, weil auf dem Testsystem nicht genug freier Speicher zur Verfügung stand. Alle Angaben stammen aus dem SeaweedFS-README, dem Wiki (weed mini, S3-Zugangsdaten, Nginx-Proxy), dem Quellcode von weed mini und dem Dockerfile des Images für Version 4.48.
Fazit
MinIO Community ist eingestellt, neue Installationen sollten auf eine gepflegte Alternative setzen. SeaweedFS liefert mit weed mini einen vollständigen S3-Speicher in einem Container. Entscheidend sind gesetzte Zugangsdaten, ein Port nur an 127.0.0.1, der Proxy mit passender -s3.externalUrl, ein fester Versions-Tag und ein Backup, das nicht im selben Speicher liegt.


