MinIO Object Storage selbst hosten 2026 – S3-kompatibel auf dem VPS
Wer heute größere Mengen an Dateien verwaltet – seien es Backups, Log-Archive, Medieninhalte oder Daten für Machine-Learning-Pipelines – stößt früher oder später an die Grenzen von klassischem File-Storage. Die Lösung lautet in den meisten professionellen Setups: Object Storage. Und wenn du Wert auf Datensouveränität, volle API-Kompatibilität zu Amazon S3 und vor allem auf Kostenkontrolle legst, führt kaum ein Weg an MinIO vorbei. In diesem ausführlichen Guide zeigen wir dir, wie du MinIO Object Storage selbst hosten kannst – auf deinem eigenen VPS, hinter nginx, mit Docker und IAM, ganz ohne Cloud-Lock-in.
Was ist MinIO und warum selbst hosten?
MinIO ist ein in Go geschriebener, quelloffener Object-Storage-Server, der die S3-API von Amazon Web Services 1:1 nachbildet. Damit funktionieren alle gängigen SDKs (AWS CLI, boto3, aws-sdk-js etc.) ohne Anpassungen. Der Clou: Du kannst MinIO als Drop-in-Replacement für S3 betreiben – lokal, hybrid oder als Private Cloud. Das macht die Lösung extrem attraktiv für alle, die ihre Daten nicht aus der Hand geben möchten, aber gleichzeitig auf etablierte Schnittstellen setzen wollen.
Die Gründe für MinIO selbst gehostet sind vielfältig:
- Volle Datenkontrolle: Alle Objekte liegen auf deiner eigenen Hardware. Kein US-Cloud-Act, kein Vendor-Lock-in.
- S3-API-Kompatibilität: Jede App, die mit S3 spricht, funktioniert auch mit MinIO – von Nextcloud über Restic bis zu Velero.
- Skalierbarkeit: MinIO unterstützt Erasure Coding und ist ab Version RELEASE.2024-01-31T20-20-33Z offiziell AGPL-3.0 lizenziert – die ältere Apache-2.0-Lizenz gilt nur noch für ältere Versionen.
- Hohe Performance: Dank Go und asynchroner Architektur schafft MinIO problemlos mehrere GByte/s Throughput, selbst auf Consumer-Hardware.
- Kostentransparenz: Du zahlst nur für den VPS, nicht pro GB und nicht pro API-Call. Gerade bei wachsenden Datenmengen ein enormer Vorteil.
Systemvoraussetzungen
Bevor wir mit dem Setup loslegen, solltest du sicherstellen, dass dein VPS die nötigen Ressourcen mitbringt. MinIO ist zwar genügsam, performant wird es aber erst mit der richtigen Hardware-Auswahl.
- CPU: mindestens 2 vCPUs, empfohlen 4+ Kerne für produktive Workloads.
- RAM: ab 4 GB, besser 8 GB. MinIO nutzt RAM als Cache – je mehr, desto schneller.
- Storage: NVMe-SSDs mit hoher IOPS. Für Datenmengen über 1 TB lohnt sich ein separates Volume.
- Betriebssystem: Ubuntu 22.04/24.04 LTS oder Debian 12 – beides wird offiziell unterstützt.
- Docker & Docker Compose: aktuelle Version (mindestens 24.x).
- Netzwerk: Öffentliche IPv4-Adresse, eine Domain für TLS sowie freie Ports (9000 für API, 9001 für Console).
Wenn du auf der Suche nach passender Hardware bist, achte beim VPS-Vergleich auf NVMe-IOPS-Garantien. Für lokale Setups empfiehlt sich zudem ein leistungsstarke NVMe-SSD oder ein kleiner Mini-PC mit Intel N100 als Heimserver. Wer größere Datenmengen vorhalten möchte, sollte sich zusätzlich ein 4-Bay-NAS-Gehäuse anschauen.
Docker-Setup: MinIO in 5 Minuten
Der schnellste und reproduzierbarste Weg, MinIO auf einem VPS zu installieren, führt über Docker. Wir verwenden das offizielle Image minio/minio in Kombination mit Docker Compose – das erleichtert spätere Updates und Backups enorm. Eine gute Grundlage dafür bietet dir unser Docker Compose auf dem VPS-Guide.
Lege zuerst das Datenverzeichnis an und definiere das Compose-File:
1. Verzeichnisse vorbereiten
mkdir -p /opt/minio/data && mkdir -p /opt/minio/config
2. docker-compose.yml
version: '3.9'
services:
minio:
image: minio/minio:latest
container_name: minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: supersecret-password
ports:
- "9000:9000"
- "9001:9001"
volumes:
- /opt/minio/data:/data
- /opt/minio/config:/root/.minio
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
3. Starten
docker compose up -d
Anschließend ist die MinIO Console unter http://DEINE-IP:9001 erreichbar. Logge dich mit dem Root-User ein, den du oben in den Umgebungsvariablen definiert hast. Wichtig: Ändere das Passwort direkt nach dem ersten Login – MinIO akzeptiert Root-Credentials auch für jeden Bucket und das ist in Produktion ein No-Go.
Konfiguration mit nginx als Reverse-Proxy
MinIO direkt auf Port 9000/9001 ans Internet zu hängen, ist möglich, aber nicht empfehlenswert. Ein vorgelagerter nginx mit TLS-Termination bietet dir zusätzliche Sicherheit, HSTS, HTTP/2 und eine saubere URL. Falls du noch keinen nginx laufen hast, hilft dir unser Nginx Reverse Proxy Guide weiter.
vHost für die S3-API
server {
listen 443 ssl http2;
server_name s3.deinedomain.de;
client_max_body_size 0;
ssl_certificate /etc/letsencrypt/live/s3.deinedomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/s3.deinedomain.de/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
chunked_transfer_encoding off;
}
}
vHost für die Web-Console
server {
listen 443 ssl http2;
server_name minio.deinedomain.de;
ssl_certificate /etc/letsencrypt/live/minio.deinedomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/minio.deinedomain.de/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Vergiss nicht, deine Firewall (UFW oder iptables) zu härten – dabei hilft dir unser VPS absichern Guide. So bleibt die MinIO Console nur autorisierten IPs zugänglich.
Buckets & Zugriffsrechte mit IAM
MinIO kennt zwei Strukturebenen: Buckets (vergleichbar mit Ordnern auf oberster Ebene) und Objekte (deine Dateien). Die Rechtevergabe läuft über das hauseigene IAM-System, das AWS IAM nachempfunden ist – inklusive Policies im JSON-Format.
Bucket anlegen via mc
Wir nutzen den MinIO-Client mc, um das lokale MinIO zu konfigurieren:
mc alias set local https://s3.deinedomain.de admin 'supersecret-password'
mc mb local/backups
mc mb local/medien
mc anonymous set download local/medien
Read-only Policy für einen Service-User
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::backups/*"]
}
]
}
Diese Policy hängst du dann via mc admin policy add an einen dedizierten Service-User. So bekommt z. B. dein Backup-Agent nur Lese- und Schreibrechte auf den Bucket backups – nichts anderes. Das Prinzip der geringsten Privilegien (least privilege) ist gerade bei selbst gehostetem Storage ein Muss.
MinIO Client & SDK-Examples
Da MinIO 100% S3-kompatibel ist, kannst du praktisch jedes Tool direkt verwenden. Die offiziellen AWS-SDKs funktionieren out-of-the-box, lediglich der Endpoint muss umgebogen werden.
AWS CLI nutzen
aws configure --profile minio
AWS Access Key ID: <access-key>
AWS Secret Access Key: <secret-key>
Default region name: eu-central-1
Default output format: json
Anschließend exportierst du noch den Endpoint:
export AWS_ENDPOINT_URL_S3=https://s3.deinedomain.de
aws --profile minio s3 ls s3://backups/
Python mit boto3
import boto3
s3 = boto3.client(
"s3",
endpoint_url="https://s3.deinedomain.de",
aws_access_key_id="...",
aws_secret_access_key="..."
)
s3.upload_file("lokale-datei.zip", "backups", "2026/backup.zip")
print(s3.list_objects_v2(Bucket="backups"))
Node.js
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const s3 = new S3Client({
endpoint: "https://s3.deinedomain.de",
region: "eu-central-1",
credentials: { accessKeyId, secretAccessKey }
});
await s3.send(new PutObjectCommand({
Bucket: "medien",
Key: "bilder/cover.jpg",
Body: fileStream
}));
Backup-Strategie für MinIO
Auch wenn MinIO selbst hochverfügbar läuft, ist regelmäßiges Backup Pflicht. Dafür gibt es mehrere bewährte Strategien. Eine ausführliche Übersicht findest du in unserem Backup-Strategien-Guide; die drei wichtigsten Wege für MinIO im Überblick:
- mc mirror: Synchronisiert ganze Buckets auf einen zweiten MinIO-Server oder eine Hetzner Storage Box. Einfach und inkrementell.
- Snapshots des Dateisystems: LVM- oder ZFS-Snapshots der Volumes – ideal in Kombination mit Erasure Coding.
- Restic / Borgbackup nach S3: Speichern ihre Repos direkt in einem MinIO-Bucket. Restic nutzt die S3-API nativ und profitiert von Deduplizierung und Verschlüsselung.
Für die 3-2-1-Regel solltest du mindestens eine Kopie Off-Site vorhalten – etwa in einer Hetzner Storage Box oder einem zweiten VPS an einem anderen Standort.
Performance-Tuning
MinIO läuft zwar out-of-the-box erstaunlich flott, mit ein paar Stellschrauben holst du aber das Maximum heraus:
- Storage-Tuning: Setze das Dateisystem auf
xfsoderext4mitnoatime. Auf ZFS/Btrfs lohnt sichrecordsize=1M. - Worker-Tuning: Setze
MINIO_API_REQUESTS_MAX=2500undMINIO_API_REQUESTS_DEADLINE=10mfür hohe Concurrency. - Cache: RAM-Disk oder NVMe-Cache für Metadaten.
MINIO_CACHE_DRIVESkonfiguriert einen dedizierten Drive-Cache. - Netzwerk: Aktiviere HTTP/2 im nginx, idealerweise sogar HTTP/3. Bei Multi-Node-Setups ist 10 Gbit/s Pflicht.
- Erasure Coding: Bei Single-Node-Setups deaktiviert; ab 4 Knoten mit
EC:2(verliere 2 Knoten, Daten bleiben lesbar) starten.
In der Praxis erreicht ein einzelner VPS mit NVMe-Storage problemlos 1–2 Gbit/s sequenziellen Durchsatz, was für die meisten Use-Cases mehr als ausreichend ist.
Sicherheit: TLS, IAM & MinIO-KMS
Datensouveränität ist nur dann real, wenn die Security stimmt. MinIO bringt dafür drei zentrale Bausteine mit:
- TLS by Default: Setze
MINIO_SERVER_URLund konfiguriere TLS-Zertifikate. Mit Let's Encrypt bist du in 5 Minuten startklar – siehe unser SSL-Guide. - IAM & Policies: Vergib niemals Root-Credentials an Anwendungen. Lege pro Service einen eigenen User mit minimaler Policy an.
- MinIO-KMS: Aktiviere serverseitige Verschlüsselung mit SSE-KMS. Unterstützt werden AWS KMS, HashiCorp Vault und ein lokales Keystore-Backend. So sind alle Objekte at-rest verschlüsselt.
- Audit-Logs: Aktiviere den integrierten Audit-Log-Webhook und werte die Einträge in Loki oder Splunk aus.
- Brute-Force-Schutz: Setze ein vorgelagertes Rate-Limiting im nginx oder – besser – einen vorgeschalteten WAF/CDN.
Vergleich: MinIO vs. Hetzner Storage Box vs. Wasabi vs. Backblaze B2
Die Frage "selbst hosten oder mieten?" ist berechtigt. Hier ein kompakter Vergleich, damit du die richtige Wahl für deinen Use-Case triffst:
- MinIO selbst gehostet: Volle Kontrolle, keine API-Limits, einmaliger Hardware-Aufwand. Du bist aber auch für Uptime, Backups und Security selbst verantwortlich.
- Hetzner Storage Box: 1 €/TB Monat, rsync-fähig, in Deutschland gehostet. Ideal für klassische Backups, aber keine echte S3-API.
- Wasabi Hot Cloud Storage: 7 $/TB Monat, S3-kompatibel, kein Egress-Gebühr. Perfekt, wenn du aus der EU nicht raus willst – Rechenzentrum in Amsterdam.
- Backblaze B2: 6 $/TB Monat, günstigster S3-Storage, Egress 0,01 $/GB. Beliebt bei Indie-Entwicklern und als Glacier-Alternative.
Wer eine mittelgroße Plattform betreibt und S3-API braucht, fährt mit MinIO auf einem 100-€-VPS mittelfristig günstiger als mit Cloud-Storage ab ~3 TB. Wer nur mal ein paar Backups ablegen will, ist mit der Hetzner Storage Box besser bedient.
FAQ – Häufige Fragen zu MinIO
1. Ist MinIO wirklich S3-kompatibel?
Ja, vollständig. Alle S3-API-Operationen (PUT, GET, LIST, DELETE, Multipart-Upload etc.) werden unterstützt. Auch AWS-Signer-v4 funktioniert identisch.
2. Wie viel RAM braucht MinIO mindestens?
Offiziell werden 2 GB vorausgesetzt, produktiv solltest du 8 GB oder mehr einplanen, besonders wenn du intensiv mit Metadaten arbeitest.
3. Kann ich MinIO mit Nextcloud oder Restic nutzen?
Absolut. Restic unterstützt MinIO nativ als Backend. Nextcloud kannst du ebenfalls auf einen MinIO-Bucket als Primary Storage konfigurieren.
4. Was kostet MinIO?
Die Community-Edition ist kostenlos (AGPL-3.0). Für Enterprise-Features (z. B. KMS-Integration mit HSM, Support) gibt es eine kommerzielle Lizenz.
5. Wie skaliere ich MinIO?
Horizontal: Mehr Server hinzufügen, MinIO erkennt sie automatisch. Vertikal: Mehr RAM, schnellere NVMe, 10G-Netzwerk. Erasure Coding sorgt für Ausfallsicherheit.
6. Brauche ich zwingend Docker?
Nein, MinIO läuft auch als Binary direkt auf dem Host. Docker erleichtert aber Updates und Konfiguration deutlich.
7. Ist MinIO sicher genug für sensible Daten?
Ja, mit aktivierter TLS-Termination, IAM-Policies, SSE-KMS und gehärtetem Server erreichst du ein Sicherheitsniveau, das mit AWS S3 vergleichbar ist.
8. Wie vergleicht sich MinIO mit Ceph?
Ceph ist mächtiger, aber komplexer in Setup und Betrieb. Für die meisten mittelständischen Setups ist MinIO die deutlich pragmatischere Wahl.
Fazit
MinIO selbst gehostet ist 2026 die wohl beste Wahl, wenn du einen performanten, S3-kompatiblen Object Storage auf deinem eigenen VPS betreiben willst. Du behältst die volle Datenkontrolle, zahlst keine API-Gebühren und kannst jede S3-kompatible Anwendung ohne Anpassung nutzen. Mit Docker, nginx-Proxy, IAM und KMS baust du dir in unter einer Stunde ein Setup, das in Sachen Sicherheit und Performance locker mit AWS S3 mithält. Wenn du bereit bist, Verantwortung für Backups und Patches zu übernehmen, bekommst du dafür ein Stück digitale Souveränität zurück, das bei reinen Cloud-Lösungen oft verloren geht.