Selbst gehosteter, S3-kompatibler Objektspeicher für Backups: MinIO hinter einem Nginx-Proxy, dazu ein rclone-basierter Backup-Agent mit versionierten Buckets. Ihre Offsite-Backups ohne Cloud-Rechnung
Ein vollständiges Muster von Lab bis Produktion: k3s in Docker mit eingebettetem etcd, Rancher für das Management, MetalLB für Layer-2-LoadBalancer-IPs, replizierter Longhorn-Speicher und Traefik-Ingr
Wenn ein Knoten nicht reicht: SeaweedFS liefert verteilten, replizierten S3-Speicher mit Master/Filer/Volume-Architektur — ideal als Backup-Ziel im größeren Maßstab auf Standard-Hardware.
Ein Deployment-Guide mit lauffähigen Beispielen — kein herunterladbares Produkt. Alles unten ist die tatsächlich eingesetzte Konfiguration, gekürzt auf das, worauf es ankommt.
services:
seaweedfs:
image: chrislusf/seaweedfs:${SEAWEEDFS_VERSION:-4.47}
container_name: seaweedfs-server
restart: unless-stopped
entrypoint:
- /bin/sh
- -c
command:
- >
# SeaweedFS S3 IAM config (users/keys) generated from env
printf
'{"identies":[{"name":"admin","credentials":[{"accessKey":"%s","secretKey":"%s"}],"actions":["Admin"]}]}'
\
"$$S3_ACCESS_KEY" "$$S3_SECRET_KEY" > /tmp/s3.json
# Single binary: master + volume + filer + S3 gateway
exec weed server \
-dir=/data \
-ip=seaweedfs \
-master.volumeSizeLimitMB=1024 \
-volume.max=0 \
-master \
-volume \
-filer \
-filer.defaultReplicaPlacement=000 \
-s3 -s3.config=/tmp/s3.json -s3.port=8333
ports:
- ${S3_API_PORT:-9000}:8333
- ${MASTER_UI_PORT:-9333}:9333
environment:
S3_ACCESS_KEY: ${S3_ACCESS_KEY:-admin}
S3_SECRET_KEY: ${S3_SECRET_KEY:-change-me}
volumes:
- weed-data:/data
healthcheck:
test:
- CMD
- wget
- -q
- --spider
- http://localhost:9333/cluster/status
interval: 15s
timeout: 5s
retries: 5
start_period: 10s
networks:
- storage
backup-agent:
image: rclone/rclone:${RCLONE_VERSION:-1.75.1}
container_name: seaweedfs-backup
restart: unless-stopped
entrypoint:
- /bin/sh
- -c
command:
- |
# Local alias via env vars; remote alias only if configured
if [ -n "$$BACKUP_ENDPOINT" ]; then
rclone config create remote s3 provider=Other \
endpoint="$$BACKUP_ENDPOINT" \
access_key_id="$$BACKUP_ACCESS_KEY" \
secret_key="$$BACKUP_SECRET_KEY" >/dev/null
fi
while true; do
echo "[$$] Running backup at $$(date)"
sh /config/backup.sh 2>&1 || echo "Backup failed"
sleep $$BACKUP_INTERVAL
done
environment:
RCLONE_CONFIG_LOCAL_TYPE: s3
RCLONE_CONFIG_LOCAL_PROVIDER: Other
RCLONE_CONFIG_LOCAL_ENDPOINT: http://seaweedfs:8333
RCLONE_CONFIG_LOCAL_ACCESS_KEY_ID: ${S3_ACCESS_KEY:-admin}
RCLONE_CONFIG_LOCAL_SECRET_ACCESS_KEY: ${S3_SECRET_KEY:-change-me}
volumes:
- ./config:/config:ro
depends_on:
seaweedfs:
condition: service_healthy
networks:
- storage
Auszug — seaweedfs, backup-agent aus der Compose-Datei. Die übrigen Services (proxies, init jobs, exporters) folgen demselben Muster und binden ihre Konfiguration aus einem config/-Verzeichnis ein.
Kopieren Sie .env.example zu .env und setzen Sie mindestens:
SEAWEEDFS_VERSION=4.47
S3_API_PORT=9000
MASTER_UI_PORT=9333
S3_ACCESS_KEY=admin
S3_SECRET_KEY=change-me
RCLONE_VERSION=1.75.1
.env setzen — niemals die Beispielwerte übernehmenEin Guide, kein Produkt. Diese Seite ist Deployment-Dokumentation mit lauffähigen Beispielen — kein Zip, kein Download, kein Supportvertrag. Sie adaptieren die Muster auf Ihre eigene Umgebung, und das Ergebnis gehört Ihnen.
Wenn Sie das produktionsreif in Ihrer Infrastruktur wollen: Storage-Skalierung dieser Art ist Teil meines Infrastruktur-Consultings — Details auf der Consulting-Seite: 1.000 €/Tag, remote oder vor Ort, Abrechnung per Rechnung.