Object Storage? Kein Problem mit MinIO

Marcus Wojtusik
Marcus Wojtusik · HelpDesk Contributor
Updated on 2. April 2025

Einleitung

In dieser Anleitung erfährst du, wie du deinen eigenen Object Storage auf deinem Server betreiben kannst. Hierzu verwenden wir MinIO, das eine leistungsfähige Open-Source-Alternative zu kommerziellen Object Storages wie z. B. AWS S3 ist. Mit MinIO bist du API kompatibel zu S3 und hast dazu noch die volle Kontrolle über deine eigenen Daten.

Vorteile

  • Volle Kontrolle: Du hostest MinIO selbst und bist nicht auf Cloud-Anbieter angewiesen.
  • Vorhersehbare Kosten: Es fallen keine unvorhersehbaren zusätzlichen Kosten für ausgehenden Traffic an.
  • Flexibilität: MinIO kann auf verschiedenen Plattformen betrieben werden.
  • Sicherheit: Durch den Einsatz eines Reverse Proxys mit TLS-Verschlüsselung sind deine Daten sicher erreichbar.

Was ist ein Object Storage und was sind Buckets?

Ein Object Storage speichert Daten als Objekte statt in einem traditionellen Dateisystem. Jedes Objekt besteht aus den eigentlichen Daten, Metadaten und einer eindeutigen Kennung. Diese Objekte werden in Buckets organisiert. Sie fungieren als Container, in denen deine Objekte liegen. Object Storages sind gut für die Speicherung sehr großer Mengen an unstrukturierten Daten geeignet.

Voraussetzungen

  • Ein Server mit Docker. Eine Anleitung hierzu findest du unter Docker-Installation.
  • Eine Domain mit entsprechenden DNS-Einträgen für den Zugriff

Installation von MinIO mit Docker Compose

Verbinde dich per SSH mit deinem Server:

ssh user@dein-server

Erstelle ein neues Verzeichnis für MinIO:

mkdir minio && cd minio

Erstelle eine docker-compose.yml Datei mit folgendem Inhalt (bitte Passwort ändern):

services:
  minio:
    image: quay.io/minio/minio:latest
    container_name: minio
    volumes:
      - ./data:/data
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=supergeheimespasswort
    command: server --console-address ":9001" /data
    healthcheck:
      test: ["CMD", "mc", "ready", "local"]
      interval: 5s
      timeout: 5s
      retries: 5

  caddy:
    image: caddy:latest
    container_name: caddy
    ports:
      - "80:80"   # for Let's Encrypt
      - "443:443" # for Let's Encrypt
      - "9000:9000"
      - "9001:9001"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile

Erstelle ein Caddyfile mit folgendem Inhalt:

deine-domain.de:9000 {
    reverse_proxy minio:9000
}

deine-domain.de:9001 {
    reverse_proxy minio:9001
}

Starte die Container:

docker compose up -d

MinIO ist nun über https://deine-domain.de:9001 erreichbar.

Die Weboberfläche kann mit den von dir vergebenen Benutzernamen und Passwort geöffnet werden.

Konfiguration von MinIO

MinIO kann über die MinIO Console (Weboberfläche) oder MinIO CLI (mc) konfiguriert werden. Du kannst die CLI lokal auf deinen Rechner installieren oder die mit dem Docker-Container ausgelieferte verwenden:

docker exec -it minio /bin/bash

Du kannst deine MinIO Instanz mit folgendem Befehl als Alias hinzufügen:

mc alias set myminio http://localhost:9000 admin supergeheimespasswort

Erstellung eines Buckets

Mithilfe der CLI:

mc mb myminio/mein-bucket

Oder per Weboberfläche:

API-Zugriff einrichten

Du kannst Access Keys generieren, um Zugriff auf deine Buckets über die API zu bekommen.

Über die CLI:

Wir lassen uns hierfür von MinIO temporär einen Access Key für das Admin Konto einrichten, damit wir zufällige Zugangsdaten generiert bekommen. Diesen entfernen wir auf dem Admin Konto wieder und verwenden ihn anstatt dessen für die Erstellung eines neuen Nutzers, der weniger Rechte bekommt als der Admin:

docker exec minio mc admin accesskey create myminio/ | tee /tmp/keys.txt
ACCESS_KEY=$(awk '/Access Key:/ {print $3}' /tmp/keys.txt)
SECRET_KEY=$(awk '/Secret Key:/ {print $3}' /tmp/keys.txt)
docker exec minio mc admin accesskey rm myminio $ACCESS_KEY
docker exec minio mc admin user add myminio $ACCESS_KEY $SECRET_KEY
docker exec minio mc admin policy attach myminio readwrite --user $ACCESS_KEY
rm /tmp/keys.txt && unset ACCESS_KEY SECRET_KEY

Dieser Nutzer kann jetzt lesend und schreibend auf alle deine Buckets zugreifen.

Merke dir ACCESS_KEY und SECRET_KEY, da du vor allem letzteren nicht wieder angezeigt bekommst.

Über die Weboberfläche:

Wir gehen auf Access Keys, lassen uns Zugangsdaten generieren und kopieren sie uns heraus:

Dann gehen wir unter Identity auf Users und erstellen mit diesen Zugangsdaten einen neuen User mit den Rechten readwrite:

Fertig!

Wie geht es weiter?

MinIO beherrscht noch viele weitere nützliche Features:

  • Versionierung: Automatisches Behalten mehrerer Versionen einer Datei
  • Lifecycle Rules: Automatisches Löschen von Dateien nach einer gewissen Zeit
  • Replikation: Automatisches Kopieren von Dateien auf eine andere MinIO Instanz

MinIO bietet dir neben der Replikation noch weitere Möglichkeiten zur Datensicherung, wie Erasure Coding. Falls du einen ausfallsicheren Storage benötigst, solltest du dir die offizielle Dokumentation zu diesen Themen anschauen: MinIO Erasure Coding

Fazit

Mit dieser Anleitung hast du MinIO auf deinem eigenen Server aufgesetzt. Du kannst jetzt deinen Object Storage nutzen, ohne dich um unvorhersehbare Kosten oder mangelnde Kontrolle über deine Daten sorgen zu müssen. Weitere Informationen zu MinIO findest du in der MinIO Dokumentation.

Falls diese Anleitung hilfreich für dich war, dann lasse es uns gerne wissen!


From Marcus Wojtusik | 2. April 2025

Have you found a solution? Perfect!

If you are looking for more: We offer powerful root servers, game servers, web hosting, TeamSpeak servers and reseller options.

Find out more about our products