MinIO (Experimental)

Lesedauer: 8 Minuten

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 -

Der mc Client ist ein eigenständiges Tool, das über die S3-API kommuniziert. Der Client braucht keinen lokalen Dateizugriff auf den MinIO-Server und kann auch auf jedem anderen beliebigen Gerät installiert werden.

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
  • local ist ein frei gewählter Name (Alias). Wählen Sie hier einen aussagekräftigen Namen. In diesem Beispiel wurde local gewählt, da der Client auf den lokalen Server zugreift.
  • http://<server-ip>:9000 ist die Adresse des MinIO-Servers und der TCP-Port 9000 der S3-API.
  • minioadmin und minioadmin123 sind die Zugangsdaten, die in /etc/minio/config.env hinterlegt 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"
    }
  }
}

Der MinIO-Client enthält bereits mehrere vordefinierte Aliase, etwa für den öffentlichen Demoserver von MinIO (play), den Amazon-S3-Dienst (s3) oder den Google Cloud Storage (gcs). Für deren Nutzung müssen lediglich die jeweiligen Zugriffsschlüssel eingetragen werden. Dies verdeutlicht die Standardisierung der S3-API und die hohe Flexibilität des MinIO-Clients beim Zugriff auf unterschiedliche Object-Storage-Anbieter.

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:

OptionBeschreibung
--regionGibt die Region des Buckets an (z. B. eu-central-1). Relevant für Cloud-Umgebungen, bei lokalem MinIO optional.
--with-lockAktiviert die Object Locking-Funktion (WORM, Write Once Read Many) für unveränderliche Objekte.
--versioningErstellt den Bucket mit aktivierter Versionierung. Alternativ kann die Versionierung später mit mc version enable gesetzt werden.

Die Object-Locking-Funktion ist Teil der S3-API und wird von verschiedenen Object-Storage-Systemen, darunter MinIO, AWS S3 und anderen S3-kompatiblen Diensten, unterstützt. Sie dient dazu, Objekte gegen Änderung oder Löschung zu schützen (WORM, Write Once Read Many). Je nach Betriebsmodus (Governance oder Compliance) kann ein einmal gesetzter Lock verhindern, dass Objekte oder ganze Buckets gelöscht werden – selbst durch Administratoren. Diese Funktion sollte daher nur mit vollständigem Verständnis der Auswirkungen eingesetzt werden. Weitere Details zur Funktionsweise, zu Einsatzszenarien und zu Einschränkungen folgen im Artikel Versionierung und Object Locking.

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

Sowohl beim Upload als auch beim Download kann ein abweichender Zielname angegeben werden. Beispielsweise kann die Datei test.txt als renamed.txt hochgeladen oder als test2.txt heruntergeladen werden.

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.

Loading

Updated on 2. November 2025
Was this article helpful?

Related Articles