Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowSave products you love by clicking the heart icon.
Produktions-Deployment-Guide für PostgreSQL mit optimierter Konfiguration und Redis mit RDB+AOF-Persistenz, inklusive automatisierter Backups und Point-in-Time-Recovery.
MinIO hat sich zum De-facto-Standard für selbstgehosteten, S3-kompatiblen Speicher entwickelt. Es bietet einen Drop-in-Ersatz für AWS S3, der überall läuft – auf Laptops, Bare Metal oder Kubernetes – und dabei dieselben API-Semantiken verwendet.
Die zentrale architektonische Entscheidung: MinIO ersetzt den lokalen Dateisystem-Speicher durch eine S3-API. Dadurch werden Ihre Anwendungsdaten von dem Server entkoppelt, auf dem die Anwendung läuft. Backups, Replikation und Disaster Recovery werden so zu S3-nativen Operationen anstatt zu Dateisystem-Skripten.
MinIO implementiert dieselbe S3-API, die auch AWS S3 verwendet. Jedes Tool, das S3 spricht, funktioniert auch mit MinIO:
import boto3
client = boto3.client(
"s3",
endpoint_url="http://minio:9000",
aws_access_key_id="minioadmin",
aws_secret_access_key="<password>",
)
client.create_bucket(Bucket="data")
client.upload_file("backup.sql", "data", "backups/daily.sql")
Diese Kompatibilität erstreckt sich auf alle von MinIO unterstützten S3-Features:
Was MinIO NICHT unterstützt (im Vergleich zu AWS S3):
Für die meisten selbstgehosteten Workloads ist der unterstützte Funktionsumfang vollständig.
MinIO benötigt einen Root-Benutzer (Access Key + Secret Key). Im Gegensatz zu AWS IAM gibt es kein separates Root-Konto – die Anmeldedaten, die Sie in .env festlegen, fungieren als Superadmin:
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=a-strong-32-character-password
Wichtige Einschränkungen:
mc admin user infoMinIO bildet einen lokalen Dateisystempfad (/data) auf die S3-API ab. Jeder Bucket wird zu einem Unterverzeichnis:
/data/
├── .minio.sys/ # MinIO internal metadata
├── data/ # S3 bucket "data"
│ ├── uploads/
│ └── archives/
├── backups/ # S3 bucket "backups"
└── logs/ # S3 bucket "logs"
Diese flache Dateistruktur bedeutet, dass Sie MinIO-Daten direkt auf der Festplatte durchsuchen können (nur lesend – schreiben Sie niemals direkt in /data außerhalb von MinIO).
Für Produktions-Deployments mit mehreren Festplatten bietet das Erasure Coding von MinIO eine RAID-ähnliche Resilienz ohne den RAID-Overhead:
# With 4 data + 2 parity drives, tolerate 2 drive failures
docker compose run --rm minio server /disk{1..6}
Erasure Coding verwendet die Reed-Solomon-Kodierung – Daten werden in N Daten-Shards und M Paritäts-Shards aufgeteilt. Der Speicher-Overhead beträgt M/N. Bei 4+2 liegt der Overhead bei 50 %, es werden jedoch zwei gleichzeitige Festplattenausfälle toleriert.
Der Nginx-Proxy in diesem Stack erfüllt drei Zwecke:
Die Standardkonfiguration von MinIO hat konservative Limits. Der Nginx-Proxy überschreibt diese für Anwendungen, die große Uploads benötigen:
client_max_body_size 5G;
client_body_buffer_size 10M;
proxy_request_buffering off;
Die Einstellung von proxy_request_buffering off ist entscheidend für Uploads über 1 GB – ohne diese Einstellung puffert Nginx den gesamten Request-Body auf die Festplatte, bevor er an MinIO gesendet wird, was dazu führt, dass Schreibvorgänge bei großen Uploads ins Stocken geraten.
Object Storage ist bandbreitenintensiv. Rate Limiting verhindert, dass ein einzelner Client die Netzwerkverbindung sättigt:
limit_req zone=minio_api burst=200 nodelay;
Die Burst-Größe von 200 erlaubt kurze Spitzen, während ein dauerhaftes Rate Limit von 100 Anfragen pro Sekunde erzwungen wird.
S3-API-Verbindungen können langlebig sein (insbesondere bei Multipart-Uploads):
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
Diese verhindern, dass Nginx inaktive S3-Verbindungen vorzeitig abbricht.
Der backup-agent-Container implementiert eine mehrschichtige Backup-Strategie:
mc mirror --overwrite --watch local/data remote/data
Das Flag --watch ermöglicht eine kontinuierliche Synchronisierung – geänderte Dateien werden sofort gespiegelt. Für geplante Backups (z. B. nächtlich) lassen Sie --watch weg und führen den Befehl über einen Cron-Zeitplan aus.
Konfigurieren Sie einen Remote-Endpunkt (Backblaze B2, AWS S3, Wasabi) und spiegeln Sie mc mirror alle Buckets auf das Remote-Ziel. Die Vorteile eines Object-to-Object-Backups gegenüber einem Backup auf Dateiebene:
mc mirror überträgt nur geänderte ObjekteLassen Sie alte Daten mithilfe von Bucket-Lifecycle-Regeln automatisch ablaufen:
{
"Rules": [
{
"ID": "expire-old-backups",
"Status": "Enabled",
"Expiration": {
"Days": 30
}
}
]
}
Dies geschieht auf MinIO-Ebene – es ist kein externer Cron-Job erforderlich.
MINIO_ROOT_PASSWORD festlegen (24+ Zeichen, alphanumerisch + Symbole)minio server /disk{1..N})/minio/v2/metrics/cluster bereitMINIO_VERSION auf ein spezifisches Release fixieren, nicht auf :latestmc mirror remote/data local/data in umgekehrter Richtungmc admin heal wöchentlich per Cron einrichten, um degradierte Laufwerke zu erkennenmc mirror ist für Object Storage zuverlässiger als Backups auf Dateisystemebene