Installation und Konfiguration eines S3-kompatiblen Objektspeichers mit Minio unter Ubuntu 20.04

Objektspeicherung ist das Speichern und Abrufen von unstrukturierten Daten und Metadaten über eine HTTP-API. Anstatt Dateien auf herkömmliche Weise zu speichern, indem sie in Blöcke zerlegt und auf der Festplatte in einem Dateisystem abgelegt werden, werden ganze Objekte über das Netzwerk gespeichert. Bei diesen Objekten kann es sich um Bilder, Videos, Protokolle, HTML-Dateien, Sicherungskopien, Container-Images oder andere in sich geschlossene Byte-Blöcke handeln. Sie sind unstrukturiert, weil sie keinem bestimmten Schema oder Format folgen.

Minio ist ein beliebter, selbst gehosteter Open-Source-Objektspeicher-Server, der mit Amazon S3 kompatibel ist. Minio ist in Go geschrieben und wird mit betriebssystemunabhängigen Clients und einer Browseroberfläche geliefert. In diesem Lernprogramm installierst du den Minio-Server auf einem Ubuntu 20.04-Server, schützt ihn mit einem SSL-Zertifikat von Let’s Encrypt und greifst mit einem Kommandozeilen-Client darauf zu.

Voraussetzungen

  • Ein Ubuntu 20.04-Server mit einem Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein vollständig registrierter Domainname, minio.example.com.
  • Ein Ubuntu 20.04 Rechner, der als Client fungiert.
  • Das System ist auf dem neuesten Stand.
    $ sudo apt update
    
  • Ein paar Pakete, die dein System braucht wie wget, curl, den nano editor etc..
    $ sudo apt install wget curl nano ufw software-properties-common apt-transport-https ca-certificates -y
    

    Einige dieser Pakete sind vielleicht schon auf deinem System installiert.

Schritt 1 – Minio Server installieren

Minio ist in Go geschrieben und wird als einfache Binärdatei geliefert. Lade die Binärdatei von der offiziellen Website von Minio herunter.

$ wget https://dl.min.io/server/minio/release/linux-amd64/minio

Mache die Datei ausführbar.

$ chmod +x minio

Verschiebe die Binärdatei in das Verzeichnis /usr/local/bin.

$ sudo mv minio /usr/local/bin

Überprüfe die Installation.

$ minio --version
minio version RELEASE.2022-01-28T02-28-16Z

Schritt 2 – Object Storage Disk vorbereiten

Wir müssen ein dediziertes Blockgerät für die Speicherung von Objekten vorbereiten. Der Pfad für die Speicherung kann entweder auf deiner Festplatte oder auf einer zweiten Festplatte liegen, die an deinen Server angeschlossen ist. Für unseren Lehrgang verwenden wir eine zweite Festplatte.

$ lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0  50G  0 disk
??sda1   8:1    0  50G  0 part /
sdb      8:16   0  50G  0 disk

Installiere die Anwendung parted, um Festplattenpartitionen zu erstellen und zu ändern.

$ sudo apt install parted

Führe die folgenden Befehle aus, um die zweite Festplatte in das Verzeichnis /data einzuhängen.

$ sudo parted -s -a optimal -- /dev/sdb mklabel gpt
$ sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
$ sudo parted -s -- /dev/sdb align-check optimal 1
$ sudo mkfs.ext4 /dev/sdb1
$ echo "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
$ sudo mkdir /data
$ sudo mount -a

Schritt 3 – Minio konfigurieren

Der Minio-Server sollte nie als root laufen, um Schäden zu vermeiden. Deshalb werden wir einen Benutzer und eine Gruppe namens minio-user erstellen.

$ sudo useradd -r minio-user -s /sbin/nologin

Mit dem Flag -s wird die Shell für das Benutzerkonto auf /sbin/nologin gesetzt, was keine Benutzeranmeldung zulässt.

Ändere die Eigentumsrechte an der Minio-Binärdatei.

$ sudo chown minio-user:minio-user /usr/local/bin/minio

Übertrage den Besitz des Verzeichnisses /data auf minio-user.

$ sudo chown minio-user:minio-user /data -R

Der nächste Schritt besteht darin, eine Konfigurationsdatei für Minio zu erstellen. Erstelle ein Verzeichnis, in dem die Konfigurationsdatei gespeichert wird.

$ sudo mkdir /etc/minio

Gib dem Benutzer minio-user die Rechte an diesem Verzeichnis.

$ sudo chown minio-user:minio-user /etc/minio

Erstelle die Umgebungsdatei, um die Standardkonfiguration zu speichern. Diese Datei muss im Verzeichnis /etc/default gespeichert werden.

$ sudo nano /etc/default/minio

Füge den folgenden Code mit Umgebungsvariablen ein, um Minio zu definieren.

MINIO_ROOT_USER="minio"
MINIO_VOLUMES="/data"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000 --console-address :9001"
MINIO_ROOT_PASSWORD="miniostorage"

Schauen wir uns alle Variablen an und was sie bewirken.

  • MINIO_ROOT_USER: legt den Zugangsschlüssel/Benutzer für den Zugriff auf die Minio-Benutzeroberfläche fest. Er sollte mindestens 3 Zeichen lang sein.
  • MINIO_VOLUMES: legt das Speicherverzeichnis für die Daten fest.
  • MINIO_OPTS: legt verschiedene Optionen für den Minio-Server fest. Das Flag -C gibt das zuvor erstellte Konfigurationsverzeichnis an. Das Flag --address gibt die IP-Adresse und den Port an, an die gebunden werden soll. Wenn du die IP-Adresse nicht angibst, bindet sich Minio an jede IP-Adresse auf dem Server, auch an localhost oder an Docker-bezogene IP-Adressen. Der Standardport ist 9000. Mit dem Flag --console-address wird der Port 9001 für die Webkonsole von Minio festgelegt.
  • MINIO_ROOT_PASSWORD: legt den privaten Schlüssel/das Passwort für den Zugriff auf die Minio-Schnittstelle fest. Es sollte mindestens 8 Zeichen lang sein. Wähle einen starken und komplizierten geheimen Schlüssel.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Schritt 4 – Minio-Dienst installieren

Lade die Minio Service Datei aus dem offiziellen Github Repository herunter.

$ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

Öffne die Datei mit dem Nano-Editor.

$ nano minio.service

Du wirst den folgenden Code finden.

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

Dieser Dienst startet Minio mit dem Benutzer minio-user, den wir zuvor erstellt haben. Er verwendet/etc/default/minio als Umgebungsdatei, die wir in Schritt 3 konfiguriert haben. Wenn du zufrieden bist, schließe die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Verschiebe die Servicedatei in das Verzeichnis /etc/systemd/system.

$ sudo mv minio.service /etc/systemd/system

Lade den Service-Daemon neu.

$ sudo systemctl daemon-reload

Aktiviere den Minio-Dienst.

$ sudo systemctl enable minio
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

Schritt 5 – Minio Server starten

Starte den Minio Server.

$ sudo systemctl start minio

Überprüfe den Status.

$ sudo systemctl status minio
? minio.service - MinIO
     Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-02-01 13:30:44 UTC; 5s ago
       Docs: https://docs.min.io
    Process: 26068 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exi>
   Main PID: 26076 (minio)
      Tasks: 6
     Memory: 55.3M
     CGroup: /system.slice/minio.service
             ??26076 /usr/local/bin/minio server -C /etc/minio --address 209.208.26.129:9000 --console-address :9001 /data

Erlaube die Ports 9000 und 9001 über die Uncomplicated Firewall (UFW).

$ sudo ufw allow 9000
$ sudo ufw allow 9001

Aktiviere die Firewall.

$ sudo ufw enable

Öffne die URL http://your_server_ip:9001 im Browser, und du siehst den folgenden Bildschirm.

Anmeldung bei der Minio Web-Konsole

Schritt 6 – Minio mit SSL sichern

Wir werden Let’s Encrypt verwenden, um Minio zu sichern. Um ein kostenloses SSL-Zertifikat zu erhalten, müssen wir das Tool Certbot herunterladen. Dazu verwenden wir den Snapd-Paketinstaller.

Installiere den Snap-Installer.

$ sudo apt install snapd

Vergewissere dich, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core 
$ sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt wird, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Erstelle ein SSL-Zertifikat.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d minio.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/minio.example.com auf deinem Server heruntergeladen.

Kopiere die Dateien privkey.pem und fullchain.pem in das Verzeichnis certs im Konfigurationsordner von Minio.

$ sudo cp /etc/letsencrypt/live/minio.example.com/privkey.pem /etc/minio/certs/private.key
$ sudo cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /etc/minio/certs/public.crt

Ändere die Eigentumsrechte an den kopierten Zertifikaten.

$ sudo chown minio-user:minio-user /etc/minio/certs/private.key
$ sudo chown minio-user:minio-user /etc/minio/certs/public.crt

Lasse HTTP- und HTTPS-Ports durch die Firewall zu.

$ sudo ufw allow 80
$ sudo ufw allow 443

Öffne die Konfigurationsdatei von Minio.

$ sudo nano /etc/default/minio

Füge die folgende Zeile am Ende ein.

MINIO_SERVER_URL="https://minio.example.com:9000"

Auch wenn der Zugriff auf die Konsole über Port 9001 erfolgt, verwendet die SSL-Server-URL Port 9000, um auf die Minio-API zuzugreifen.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den Minio Server neu.

$ sudo systemctl restart minio

Du kannst die Minio-Konsole über die URL https://minio.example.com:9001 in deinem Browser aufrufen.

Schritt 7 – Verbindung zu Minio herstellen und Buckets einrichten

Melde dich bei der Minio-Konsole mit dem Benutzer und dem Passwort an, die du zuvor für den Zugriff auf das Minio-Dashboard festgelegt hast.

Minio Dashboard

Klicke auf die Schaltfläche Bucket erstellen, um deinen ersten Bucket zu erstellen.

Minio Bucket Seite erstellen

Da wir Minio auf einem einzelnen Server/einer einzelnen Festplatte installieren, sind einige Funktionen deaktiviert. Gib den Namen des Buckets ein und klicke auf die Schaltfläche Bucket erstellen, um fortzufahren. Sobald du fertig bist, wird der folgende Bildschirm angezeigt.

Minio Buckets Liste

Um Dateien hochzuladen, klicke auf die Schaltfläche Durchsuchen und die folgende Seite wird angezeigt.

Minio Durchsuchen Eimer

Klicke auf die Schaltfläche Dateien hochladen und wähle erneut Dateien hochladen, um den Dateibrowser auf deinem PC zu öffnen. Du kannst mehrere Dateien auf einmal zum Hochladen auswählen.

Minio Dateien hochladen

Klicke auf die Schaltfläche „Papierkorb“, um die Upload-Warteschlange zu löschen, wenn du fertig bist.

Minio Upload-Warteschlange löschen

Das war’s für den Moment. Du hast deinen ersten Bucket erstellt und einige Dateien hochgeladen. Als Nächstes werden wir uns mit einem Client mit dem Server verbinden, auf diesen Bucket zugreifen und ihn verwalten.

Schritt 8 – Minio Client installieren und auf Dateien zugreifen

Wir werden den Kommandozeilen-Client von Minio auf einem anderen Rechner mit Ubuntu 20.04 installieren. Du kannst den Desktop-Client auch von der offiziellen Download-Seite von Minio herunterladen.

Lade die offizielle Minio-Binärdatei herunter.

$ wget https://dl.min.io/client/mc/release/linux-amd64/mc

Mache die Binärdatei ausführbar.

$ chmod +x mc

Verschiebe die Binärdatei in das Verzeichnis /usr/local/bin.

$ sudo mv mc /usr/local/bin

Überprüfe die Installation.

$ mc --version
mc version RELEASE.2022-02-02T02-03-24Z

Lege einen Alias für deinen Minio-Server fest, damit du ihn unter einem leicht zu identifizierenden Namen erreichen kannst. Ersetze minio und miniostorage durch den von dir gewählten Benutzernamen und das Passwort für den Server.

$ mc alias set howtoforge https://minio.example.com:9000 minio miniostorage
mc: Configuration written to `/home/<user>/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/<user>/.mc/share`.
mc: Initialized share uploads `/home/<user>/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/<user>/.mc/share/downloads.json` file.
Added `howtoforge` successfully.

Der Minio-Client speichert alle Konfigurationen in dem Verzeichnis /home/user/.mc.

Rufe die Minio-Server-Informationen ab. Wir verwenden dafür den Unterbefehl admin.

$ mc admin info howtoforge
?  minio.example.com:9000
   Uptime: 2 minutes
   Version: 2022-01-28T02:28:16Z
   Network: 1/1 OK

9.6 MiB Used, 1 Bucket, 5 Objects

Um alle Buckets deines Minio-Servers aufzulisten, verwende den folgenden Befehl.

$ mc ls howtoforge
[2022-02-01 16:59:46 UTC]     0B howtoforge/

Um alle Objekte/Dateien in einem bestimmten Bucket aufzulisten, verwende den folgenden Befehl.

$ mc ls howtoforge/howtoforge
[2022-02-02 05:32:28 UTC] 2.9MiB STANDARD IMG_20160717_184947_HDR.jpg
[2022-02-02 05:32:00 UTC] 2.2MiB STANDARD IMG_20160903_220639_HDR.jpg
[2022-02-02 05:28:25 UTC] 2.4MiB STANDARD IMG_20161006_213936_HDR.jpg
[2022-02-02 05:28:07 UTC] 2.2MiB STANDARD IMG_20161015_194409_HDR.jpg
[2022-02-02 03:33:28 UTC]  25KiB STANDARD quarantine.jpg

Mit dem folgenden Befehl kannst du einen neuen Bucket erstellen.

$ mc mb howtoforge/bucket2
Bucket created successfully `howtoforge/bucket2`.

Lass uns eine neue Datei erstellen, die in diesen Bucket kopiert werden soll.

$ touch test.txt

Um eine Datei in den neu erstellten Bucket zu kopieren, verwende den folgenden Befehl.

$ mc cp test.txt howtoforge/bucket2
/home/nspeaks/test.txt:    0 B / ? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????

Liste die neu kopierte Datei auf.

$ mc ls howtoforge/bucket2
[2022-02-02 07:06:44 UTC]     0B STANDARD test.txt

Du kannst alle Befehle überprüfen, indem du das Argument --help verwendest.

$ mc --help
NAME:
  mc - MinIO Client for cloud storage and filesystems.

USAGE:
  mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

COMMANDS:
  alias      set, remove and list aliases in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
  pipe       stream STDIN to an object
  share      generate URL for temporary access to an object
  find       search for objects
  sql        run sql queries on objects
  stat       show object metadata
  mv         move objects
  tree       list buckets and objects in a tree format
  du         summarize disk usage recursively
  retention  set retention for object(s)
  legalhold  manage legal hold for object(s)
  diff       list differences in object name, size, and date between two buckets
  rm         remove object(s)
  version    manage bucket versioning
  ilm        manage bucket lifecycle
  encrypt    manage bucket encryption config
  event      manage object notifications
  watch      listen for object notification events
  undo       undo PUT/DELETE operations
  anonymous  manage anonymous access to buckets and objects
  tag        manage tags for bucket and object(s)
  replicate  configure server side bucket replication
  admin      manage MinIO servers
  update     update mc to latest release
  support    Support related commands

GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/home/<user>/.mc")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version

TIP:
  Use 'mc --autocompletion' to enable shell autocompletion

VERSION:
  RELEASE.2022-02-02T02-03-24Z

Fazit

Damit ist unser Tutorium abgeschlossen, in dem du den Minio Object Storage Server auf einem Ubuntu 20.04 basierten Server installiert hast. Er ist über eine Webkonsole zugänglich, die durch ein Let’s Encrypt SSL-Zertifikat geschützt ist. Außerdem hast du den Minio-Kommandozeilen-Client auf einem anderen Ubuntu-Rechner installiert, um den Minio-Server zu verwalten und darauf zuzugreifen.

Wenn du Fragen hast, schreibe sie unten in die Kommentare.

Das könnte dich auch interessieren …