MinIO (Experimental)

Lesedauer: 6 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/testbucket
Bucket created successfully `local/testbucket`.

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 Object Locking und Versionierung in S3-kompatiblen Systemen.

Ein mc ls auf den Alias zeigt dann die vorhandenen Buckets an:

$ mc ls local
[2025-11-01 20:06:25 UTC]     0B testbucket/

Loading

Updated on 1. November 2025
Was this article helpful?

Related Articles