MinIO ist eine S3-kompatible Object-Storage-Implementierung, die vollständig in Go entwickelt wurde und auf POSIX-kompatiblen Dateisystemen aufsetzt. Der Dienst stellt eine REST-API bereit, die funktional dem Amazon-S3-Standard entspricht und daher nahtlos mit bestehenden S3-Clients, SDKs und Werkzeugen genutzt werden kann. Im vorliegenden Setup dient MinIO als lokales, experimentelles Testsystem zur praktischen Veranschaulichung des Object-Storage-Prinzips.
Die Installation erfolgt auf einem dedizierten Ubuntu-Server ohne grafische Oberfläche. Der Server stellt zwei Endpunkte bereit: die API unter Port 9000 und die Administrationskonsole unter Port 9001. Über die Web-UI können Buckets, Objekte und Versionen verwaltet werden, während der MinIO-Client (mc) API-basierte Operationen wie Uploads, Metadatenabfragen oder Versionierungstests ermöglicht. Das Setup verzichtet bewusst auf TLS und Reverse-Proxy-Integration und konzentriert sich ausschließlich auf die Funktionsweise und Struktur eines S3-kompatiblen Object Stores in einer isolierten Testumgebung.
System vorbereiten
$ sudo apt update && sudo apt install -y wget curl
$ sudo mkdir -p /opt/minio
MinIO Installation
$ cd /opt/minio
/opt/minio/$ sudo wget https://dl.min.io/server/minio/release/linux-amd64/minio
/opt/minio/$ sudo chmod +x minio
/opt/minio/$ sudo mv minio /usr/local/bin/
/opt/minio/$ cd -
Benutzer und Konfigurationsverzeichnisse erstellen
$ sudo useradd -r minio-user -s /sbin/nologin
$ sudo mkdir -p /usr/local/share/minio /etc/minio
$ sudo chown -R minio-user:minio-user /usr/local/share/minio /etc/minio/
MinIO konfigurieren
Setze Zugangsdaten (nur Testzwecke):
$ echo 'MINIO_ROOT_USER=minioadmin' | sudo tee -a /etc/minio/config.env
$ echo 'MINIO_ROOT_PASSWORD=minioadmin123' | sudo tee -a /etc/minio/config.env
Systemd-Service erstellen
$ sudo tee /etc/systemd/system/minio.service > /dev/null <<'EOF'
> [Unit]
Description=MinIO Object Storage
After=network.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/minio/config.env
ExecStart=/usr/local/bin/minio server /usr/local/share/minio --console-address ":9001" --address ":9000"
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
Service starten
$ sudo systemctl daemon-reload
$ sudo systemctl enable minio
$ sudo systemctl start minio
$ sudo systemctl status minio.service
Web-Frontend
- Web-Frontend: http://<server-ip>:9001
- API-Endpoint: http://<server-ip>:9000

MinIO Client (mc) installieren
mc ist der offizielle CLI-Client von MinIO, vergleichbar mit aws s3 bei Amazon. mc spricht über HTTP (Port 9000) mit dem MinIO-Server und bietet Befehle zum Erstellen, Hochladen, Löschen, Versionieren etc:
- Buckets anlegen und verwalten
- Objekte hochladen/herunterladen
- Metadaten abfragen
- Benutzer & Policies verwalten (im Mehrbenutzermodus)
$ cd /opt/minio
/opt/minio/$ sudo wget https://dl.min.io/client/mc/release/linux-amd64/mc
/opt/minio/$ sudo chmod +x mc
/opt/minio/$ sudo mv mc /usr/local/bin/
/opt/minio/$ cd -
Server registrieren
Das folgende Kommando registriert den MinIO-Server unter dem Aliasnamen „local” in der mc-Konfiguration.
$ mc alias set local http://<server-ip>:9000 minioadmin minioadmin123
localist ein frei gewählter Name (Alias). Wählen Sie hier einen aussagekräftigen Namen. In diesem Beispiel wurdelocalgewählt, da der Client auf den lokalen Server zugreift.http://<server-ip>:9000ist die Adresse des MinIO-Servers und der TCP-Port9000der S3-API.minioadminundminioadmin123sind die Zugangsdaten, die in/etc/minio/config.envhinterlegt wurden.
Dieses Kommando erstellt im Benutzerverzeichnis die Konfigurationsdatei ~/.mc/config.json und verknüpft unter dem angegebenen Alias die zugehörigen Verbindungsparameter. Es können beliebig viele Aliase zu unterschiedlichen Servern angelegt werden. Ebenso können mehrere Benutzer oder Admin-Konsolen über verschiedene Aliasnamen auf denselben MinIO-Server zugreifen.
{
"version": "10",
"aliases": {
"local": {
"url": "http://172.16.23.153:9000",
"accessKey": "minioadmin",
"secretKey": "minioadmin123",
"api": "S3v4",
"path": "auto"
},
"play": {
"url": "https://play.min.io",
"accessKey": "Q3AM3UQ867SPQQA43P2F",
"secretKey": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
"api": "S3v4",
"path": "auto"
},
"s3": {
"url": "https://s3.amazonaws.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v4",
"path": "dns"
},
"gcs": {
"url": "https://storage.googleapis.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v2",
"path": "dns"
}
}
}
Buckets
Ein Bucket stellt die oberste logische Einheit innerhalb eines S3-kompatiblen Object Stores dar. Er dient als Container für Objekte und deren Metadaten und entspricht funktional einer eigenständigen Namespace-Ebene. Innerhalb eines Buckets sind alle Objektnamen eindeutig. Buckets selbst sind jedoch im jeweiligen Storage-System global eindeutig benannt.
Technisch bildet ein Bucket den Einstiegspunkt für sämtliche S3-Operationen (z. B. PUT, GET, DELETE). Er verwaltet außerdem interne Strukturen wie Versionierung, Lebenszyklus-Regeln (ILM) und Zugriffsrechte. In MinIO werden Buckets als physische Ordner im angegebenen Datenverzeichnis des Servers repräsentiert und können über die S3-API oder die Weboberfläche verwaltet werden.
Bucket anlegen
Das Unterkommando mb (make bucket) weist den mc-Client an, auf dem in der Alias-Konfiguration hinterlegten Server einen neuen Bucket anzulegen:
$ mc mb --with-versioning local/testbucket
Bucket created successfully `local/testbucket`.
Wichtige Optionen:
| Option | Beschreibung |
|---|---|
--region | Gibt die Region des Buckets an (z. B. eu-central-1). Relevant für Cloud-Umgebungen, bei lokalem MinIO optional. |
--with-lock | Aktiviert die Object Locking-Funktion (WORM, Write Once Read Many) für unveränderliche Objekte. |
--versioning | Erstellt den Bucket mit aktivierter Versionierung. Alternativ kann die Versionierung später mit mc version enable gesetzt werden. |
Ein mc ls auf den Alias zeigt dann die vorhandenen Buckets an:
$ mc ls local
[2025-11-01 20:06:25 UTC] 0B testbucket/
![]()