Minio – S3 Compatible Object Storage

MinIO is dus de oplossing om op een eenvoudige manier een S3 compatible opslagsysteem te installeren, zelfs op een Raspberry Pi. Voor de snelheid en betrouwbaarheid wordt het aanbevolen om een SSD schijf te gebruiken en hiermee wordt zelfs het gebruik van een SD Card overbodig. Gebruik dan een Raspberry Pi 4 want die kan opstarten van de aangesloten USB drive!

Disk voorbereiden

Een schijf van 1Tb is in mijn geval voldoende en deze dient dan voorzien te worden van een GPT – ESP partitie en geformatteerd met FAT32.

Vervolgens zijn er twee bestanden nodig. Download het volgende:

Op een Mac is het programma UUByte ISO Editor handig om te gebruiken, op een Windows PC is het meest eenvoudige om Rufus te gebruiken:

  • Start Rufus en zorg ervoor dat de USB disk is aangesloten
  • Klik op SELECT en selecteer de Debian netinst ISO
  • Ctrl-Klik SELECT en voeg de UEFI Firmware zip toe.
  • Wijzig Partition scheme naar GPT 
  • Klik op START
  • Op de prompt kies Write in ISO → ESP mode.

Als de disk gereed is kan deze aangesloten worden op de Raspberry Pi en deze kan dan opgestart worden. Gebruik wel een scherm en keyboard aan de RPi want het Debian boot-proces zal nu gebruikt moeten worden om Debian te installeren op de resterende vrije ruimte van de USB disk. Volg de instructies op het scherm.

op de vraag om ‘missing firmware files‘ te installeren, selecteer ‘<No>

Nadat de RPi opnieuw is opgestart heb je een verse installatie van Raspbian 11 met een USB disk als attached storage op /dev/sda2, ge-mount op de root:

# df -h
...
/dev/sda2 915G 6.5G 862G 1% /
...

Installatie MinIO

Wellicht handig is het om vanaf je computer/laptop via ssh een sessie op te zetten naar de RPi, doe dit veilig en gebruik een ssh-key pair

Voor MinIO wordt eerst een directory aangemaakt,

$ sudo mkdir -p /minio/data

en vervolgens wordt MinIO geïnstalleerd:

$ sudo apt update && sudo apt upgrade
$ wget https://dl.minio.io/server/minio/release/linux-arm/minio
$ sudo ln -s /home/pi/minio /usr/bin/minio

Zoals je ziet wordt een link gemaakt naar de binary die in de home-directory van gebruiker pi staat. Uiteraard kan die binary ook op een andere plaats staan, pas dan de link aan naar de locatie van de binary.

MinIO wordt gestart als server met het volgende commando:

$ minio server /minio/data
Automatically configured API requests per node based on available memory on the system: 60
Finished loading IAM sub-system (took 0.1s of 0.2s to load data).
Status: 1 Online, 0 Offline.
API: http://192.168.1.53:9000 http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin

Via een browser op je computer/laptop naar de MinIO-URL:

De standaard Username/Password is minioadmin/minioadmin. Eenmaal ingelogd kunnen buckets aangemaakt worden en bestanden toegevoegd worden.

Certificaat

Om via een beveiligde connectie de MinIO sever te benaderen via https, wordt gebruik gemaakt van een certificaat. Deze kan gemaakt worden met ‘certbot‘ om Let’s Encrypt te gebruiken voor de certificaten, dus die wordt geïnstalleerd met:

$ sudo apt install -y certbot

Vervolgens kan een certificaat aangemaakt worden met:

$ sudo certbot certonly --standalone --staple-ocsp --agree-tos --email you@emailaddress -d minio.domain.name

waarbij het juiste email-adres en de domain-name van de minio-server ingevuld wordt. Deze certificaten dienen gekopieerd te worden naar de MinIO directory:

$ sudo cp /etc/letsencrypt/live/minio.domain.name/fullchain.pem /minio/data/certs/public.crt
$ sudo cp /etc/letsencrypt/live/minio.domain.name/privkey.pem /minio/data/certs/private.key

Start-script

Er kan nu een Minio-start script minio.sh gemaakt worden met als voorbeeld de volgende inhoud:

#!/bin/bash

export MINIO_ROOT_USER=HeelVeiligAccount
export MINIO_ROOT_PASSWORD=HeelVeiligWachtwoord
export MINIO_DOMAIN=minio

/usr/bin/minio server --address :443 --console-address :9443 --certs-dir /minio/data/certs /minio/data

Maak het bestand uitvoerbaar met chmod +x minio.sh

Start nu de minio server met ./minio.sh

Automatically configured API requests per node based on available memory on the system: 59
Finished loading IAM sub-system (took 0.1s of 0.1s to load data).
Status: 1 Online, 0 Offline.
API: https://192.168.1.53:443 https://127.0.0.1:443
RootUser: HeelVeiligAccount
RootPass: HeelVeiligWachtwoord

Console: https://192.168.1.53:9443 https://127.0.0.1:9443
RootUser: HeelVeiligAccount
RootPass: HeelVeiligWachtwoord

Start Minio automatisch

Om MinIO met systemd te starten, ook automatisch na een herstart van de RPi, wordt gebruik gemaakt van een service-script, /etc/systemd/system/minio.service met de volgende inhoud:

[Unit]
Description=Minio Storage Service
After=network-online.target

[Service]
ExecStart=/home/pi/minio.sh
WorkingDirectory=/minio/data
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Voer vervolgens eenmalig het volgende commando uit:

$ sudo systemctl enable minio --now

en vanaf nu zal MinIO automatisch gestart worden na een reboot van de RPi.

Multi-Tenant configuratie

Indien meerdere omgevingen gebruikt gaan worden in MinIO die elk hun eigen bestanden en buckets hebben, kan gebruik gemakt worden van ‘tenants‘.

Een configuratie voor multi-tenant kan gestart worden met de volgende commando’s waarbij iedere tenant een eigen host en een eigen directory heeft:

minio server --address :9001 /data/tenant1
minio server --address :9002 /data/tenant2
minio server --address :9003 /data/tenant3

Deze hosts ‘draaien’ nu wel op dezelfde RPi en de directories zullen ge-isoleerd dienen te worden met bestands-permissies.

De tenants kunnen eventueel ook gebruik maken van meerdere disks op de host, bijvoorbeeld:

minio server --address :9001 /disk{1…4}/data/tenant1
minio server --address :9002 /disk{1…4}/data/tenant2
minio server --address :9003 /disk{1…4}/data/tenant3

of gebruik maken van meerdere hosts:

minio server --address :9001 http://192.168.10.1{1...4}/data/tenant1
minio server --address :9002 http://192.168.10.1{1...4}/data/tenant2
minio server --address :9003 http://192.168.10.1{1...4}/data/tenant3

Meer informatie en configuratie voorbeelden staan hier: https://docs.min.io/docs/minio-server-configuration-guide.html