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