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/psbucket
Bucket created successfully `local/psbucket`.
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 psbucket/
Objekte
Objekte in oder aus dem Storage kopieren
In diesen psbucket können nun Objekte (Dateien) hochgeladen werden. Ein einfacher Ansatz dafür wäre die Verwendung des MinIO-Clients (mc). Der MinIO-Client verwendet ein spezielles URL-Format zur Identifizierung von Ressourcen:
- Lokale Pfade verwenden den Dateisystempfad (z. B.
/path/to/file) - Remote-Ressourcen verwenden das Format
ALIAS/BUCKET/PREFIX/OBJECT
Dabei ist ALIAS der in ~/.mc/config.json konfigurierte Kurzname, der einen bestimmten S3-Endpunkt darstellt.
Beispiele:
Kopiert die lokale Datei /home/bob/test.txt in den MinIO-Storage:
$ mc cp /home/bob/test.txt local/psbucket
/home/bob/test.txt: 13 B / 13 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 162 B/s 0s
Kopiert das Objekt /local/psbucket/test.txt in das lokale Dateisystem:
$ mc cp local/psbucket/test.txt /tmp/
...0/psbucket/test.txt: 13 B / 13 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 1.91 KiB/s 0s
Objekt/Bucket-Informationen
Das stat-Kommando zeigt die Metadaten der Objekte oder Buckets an:
$ mc stat test.txt local/psbucket/test.txt
Name : test.txt
Date : 2025-11-02 13:00:13 UTC
Size : 47 B
Type : file
Metadata :
Content-Type : text/plain
X-Amz-Meta-Mc-Attrs: atime:1762088418#302176948/gid:1000/gname:bob/mode:33204/mtime:1762088413#475185973/uid:1000/uname:bob
Name : test.txt
Date : 2025-11-02 13:00:18 UTC
Size : 47 B
ETag : 4a773a2a620d5ea4c5984a41b5ee422a
VersionID : 225f40ec-f931-4660-b13b-029b1df5fabc
Type : file
Metadata :
Content-Type: text/plain
Objekt-Inhalt anzeigen
Mit dem cat-Kommando kann der Inhalt von Objekten angezeigt werden (Nur bei ASCII Dateiformaten sinnvoll):
$ mc cat local/psbucket/test.txt
Hello World!
Hello MinIO!
Hello Prontosystems!
Bei Binärdateien kann statt cat das head-Kommando verwendet werden. Der Parameter -n gibt an, wieviele Zeilen der RAW-Datei angezeigt werden sollen:
$ mc head -n 2 local/psbucket/sample.pdf
%PDF1.7
<</Author(Janina Kivinen)/CreationDate(D:20190212172733+00'00')/Creator(Microsoft Word)/ModDate(D:20190927153846Z)/Producer(3-Heig<</Contents 22 0 R/CropBox[0 0 612 792]/Group<</CS/DeviceRGB/S/Transparency/Type/Group>>/MediaBox[0 0 612 792]/Parent 1 0 R/Resourstreamter/FlateDecode/Length 4693>> 0 R>>/Font<</F1 13 0 R/F2 16 0 R/F3 19 0 R>>>>/Rotate 0/StructParents 0/Tabs/S/Type/Page>>
Fazit und Ausblick
Mit dem hier beschriebenen Setup steht ein vollständig funktionsfähiges, lokal betriebenes, S3-kompatibles Testsystem auf Basis von MinIO bereit. Es ermöglicht das Anlegen von Buckets, das Hochladen und Verwalten von Objekten sowie das Verständnis grundlegender S3-Konzepte wie Versionierung und Metadaten. Die Umgebung dient als sichere Experimentierplattform, auf der sich Object-Storage-Prinzipien praktisch erproben lassen, ohne dass produktive Cloud-Ressourcen genutzt werden müssen.
In nachfolgenden Artikeln werden darauf aufbauend erweiterte Funktionen wie Versionierung, Object Locking, Replikation, Lifecycle-Management und Sicherheitsaspekte behandelt. Diese schrittweise Vertiefung ermöglicht den Aufbau eines umfassenden technischen Verständnisses moderner, S3-kompatibler Speicherarchitekturen.
![]()