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.
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.
Klicke auf die Schaltfläche Bucket erstellen, um deinen ersten Bucket zu 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.
Um Dateien hochzuladen, klicke auf die Schaltfläche Durchsuchen und die folgende Seite wird angezeigt.
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.
Klicke auf die Schaltfläche „Papierkorb“, um die Upload-Warteschlange zu löschen, wenn du fertig bist.
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.