Journal-indexDockup / praktijknotitie
Note / self-host-minio

MinIO zelf hosten in 2026: S3-endpoints, TLS en duurzame opslag

Een praktische handleiding voor het zelf hosten van MinIO met aandacht voor Docker, poorten, persistente data, TLS, beveiliging, back-ups en problemen die productiegebruik in de weg staan. Stap voor stap.

Een mislukte MinIO-deployment crasht niet altijd. Het kan een loginpagina aanbieden terwijl clients requests ondertekenen voor de console-URL in plaats van de S3 API-URL. Begin daarom met een end-to-end-check: maak een bucket aan, upload een multipart-object, haal het op via een presigned URL en controleer of een versioned delete kan worden hersteld.

Die controle sluit aan bij het gedocumenteerde doel van MinIO: S3-compatible object storage op schijven die je zelf beheert. Ook worden ontbrekende dependencies, verkeerde aannames over de proxy en ephemeral data hiermee eerder zichtbaar dan met een uptime-probe.

Waar MinIO van afhankelijk is

Het MinIO HTTP-proces luistert op poort 9000; houd die poort binnen het application network en publiceer alleen de platformroute. De lokale runtimevereiste is een tweede schijf of remote target voor herstelbare back-ups. Leg de lifecycle hiervan expliciet vast, zodat het verplaatsen van MinIO tussen hosts niet stilletjes het gedrag verandert.

Leg de grens vast in een kort contract: wie verantwoordelijk is voor de vereiste, welke credential wordt gebruikt, welke timeout acceptabel is en hoe een fout zichtbaar wordt. Voer daarna deze transactie uit: maak een bucket aan, upload een multipart-object, haal het op via een presigned URL en controleer of een versioned delete kan worden hersteld. Observeer tijdens de uitvoering de disk latency, het aantal gelijktijdige multipart-uploads, de vrije-schijfruimte en de network throughput tussen applicaties en het S3-endpoint, omdat deze workload een nuttiger uitgangspunt voor de sizing biedt dan een inactieve container.

Een Docker-basisconfiguratie voor MinIO

Een production-ready launch is bewust saai: named state, een expliciete poort en geen secret in de image.

docker run -d \
  --name minio \
  --restart unless-stopped \
  -p 127.0.0.1:9000:9000 \
  -p 127.0.0.1:9001:9001 \
  -v minio-data:/data \
  -e MINIO_ROOT_PASSWORD=replace-with-a-long-random-value \
  -e MINIO_ROOT_USER=dockup-admin \
  quay.io/minio/minio:latest server /data --console-address :9001

Het voorbeeld is een basisconfiguratie en geen complete supporting stack. Controleer de lokale vereiste voordat je MinIO publiek beschikbaar maakt: een tweede schijf of remote target voor herstelbare back-ups. Controleer de effectieve mounts en listener en probeer vervolgens een bucket aan te maken, een multipart-object te uploaden, het op te halen via een presigned URL en te controleren of een versioned delete kan worden hersteld. Pin de werkende image voordat de volgende restart plaatsvindt.

Domeinen, proxyheaders en poort 9000

Het uitgeven van TLS-certificaten is slechts de helft van de MinIO-route. Routeer de S3 API en de console via afzonderlijke hostnames wanneer beide worden blootgesteld. Stuur verkeer intern naar poort 9000 en geef het externe scheme door, zodat gegenereerde URL's en secure cookies consistent blijven.

Gebruik het volledige MinIO-scenario vanaf een schoon network, niet alleen de rootpagina. Een 502 of certificate failure kun je isoleren met automatische domein- en TLS-configuratie. Als verkeer het proces bereikt en clients requests ondertekenen voor de console-URL in plaats van de S3 API-URL, diagnoseer dat probleem waar het optreedt in plaats van redirects op elkaar te stapelen.

Ontwerp het herstelproces voor MinIO vóór de launch

Maak een recovery manifest voor MinIO met bucketdata, policies, users en geteste replicas op objectniveau. Mount /data vóór de bootstrap, schrijf onschadelijke voorbeelddata en vervang de container om te bewijzen dat dit pad daadwerkelijk persistent is. Controleer nu de ownership en vrije ruimte, want een gemount maar niet schrijfbaar pad gedraagt zich alsof er helemaal geen persistence is.

Maak back-ups naar een failure domain dat losstaat van de draaiende server. Recreate MinIO met de gepinde image en controleer of bucketversies, policies, users en een representatief multipart-object een herstel op andere storage overleven. De handleiding voor persistent volumes helpt om deze oefening te vertalen naar snapshot- en retentionbeleid.

Bepaal de trust boundary van MinIO

Maak een threat model van de actie die MinIO uitvoert, niet alleen van het loginformulier. De grootste fout hier is het gebruik van korte standaard root-credentials of het breed blootstellen van de adminconsole. Implementeer deze grens: scheid de S3 API van de administratieve console en geef applicaties keys die niet de volledige server kunnen beheren.

Behandel MINIO_ROOT_PASSWORD volgens de rol die deze in MinIO heeft: houd gevoelige waarden uit Git, documenteer de gevolgen van rotation en gebruik nooit een publiek voorbeeld in productie. Los een permission error niet op door de container als root te draaien of de host breed te mounten. Resource limits maken ook deel uit van het securitydesign wanneer users de disk latency, het aantal gelijktijdige multipart-uploads, de vrije schijfruimte en de network throughput tussen applicaties en het S3-endpoint kunnen beïnvloeden.

Logs die de volgende vraag beantwoorden

Observeer het werk dat MinIO uitvoert: disk latency, het aantal gelijktijdige multipart-uploads, de vrije schijfruimte en de network throughput tussen applicaties en het S3-endpoint. Stel limits in met voldoende headroom voor dit werk en voorkom een liveness-probe die ermee concurreert. De operatorcheck moet nog altijd volgens een schema proberen een bucket aan te maken, een multipart-object te uploaden, het op te halen via een presigned URL en te controleren of een versioned delete kan worden hersteld.

Houd voor updates rekening met het feit dat serverreleases, client signing behavior en eventuele erasure-set layouts moeten worden getest met een kopie van echte bucketmetadata. Deploy de candidate tegen een herstelde kopie en herhaal de bekende test. Als clients requests ondertekenen voor de console-URL in plaats van de S3 API-URL, gebruik dan runtime-logs en het daadwerkelijke network request om vast te stellen welke aanname is veranderd.

Bewijs verzamelen voordat MinIO live gaat

Maak vóór de komst van echte users een releaseworksheet voor MinIO. Hierin moeten de gepinde image, poort 9000, canonical origin, persistente paden en de eigenaar van een tweede schijf of remote target voor herstelbare back-ups worden vermeld. Voeg het verwachte resultaat van deze transactie toe: maak een bucket aan, upload een multipart-object, haal het op via een presigned URL en controleer of een versioned delete kan worden hersteld.

Gebruik de worksheet na een normale vervanging en na een schone restore. Herstel wordt alleen geaccepteerd als bucketversies, policies, users en een representatief multipart-object een herstel op andere storage overleven. Verzamel ook een korte resource trace met disk latency, het aantal gelijktijdige multipart-uploads, de vrije schijfruimte en de network throughput tussen applicaties en het S3-endpoint; bewaar die naast de release, zodat toekomstige capaciteitswijzigingen met dezelfde workload kunnen worden vergeleken.

Voeg één gecontroleerde fout toe: stuur onschadelijke input in de buurt van de resource- of formatlimiet die bij deze grens hoort: clients ondertekenen requests voor de console-URL in plaats van de S3 API-URL. Controleer of MinIO het probleem bij de juiste grens rapporteert, herstel de geldige toestand en voer de transactie opnieuw uit. Hiermee controleer je de zichtbaarheid van fouten, niet alleen succes, en voorkom je dat een gezond ogende interface een kapotte worker, callback of databaseverbinding verbergt.

MinIO op Dockup deployen zonder de grenzen te verliezen

Een Dockup-template moet de image, poort 9000, mounts, health timing, het domein, TLS en secret delivery vastleggen. Dockup moet de runtime-instellingen van MinIO behouden, terwijl de operator deze lokale vereiste controleert: een tweede schijf of remote target voor herstelbare back-ups. Dezelfde deployment kan gericht worden op Dockup-servers of op capaciteit die door de klant is gekoppeld.

Pas na het live gaan van de route de publieke instelling toe en probeer een bucket aan te maken, een multipart-object te uploaden, het op te halen via een presigned URL en te controleren of een versioned delete kan worden hersteld. Maak back-ups van bucketdata, policies, users en geteste replicas op objectniveau en neem de restore-oefening op in het operationsplan; dit zijn verantwoordelijkheden van MinIO die ook na het provisionen van de infrastructuur zichtbaar blijven.

Veelgestelde vragen

Wat heeft MinIO nodig voor een productie-deployment?

Routeer de MinIO-container op poort 9000 via één HTTPS-origin. De lokale runtimevereiste is een tweede schijf of remote target voor herstelbare back-ups. Markeer MinIO pas als gereed wanneer je een bucket kunt aanmaken, een multipart-object kunt uploaden, het kunt ophalen via een presigned URL en kunt controleren of een versioned delete kan worden hersteld.

Welke MinIO-data hoort in een back-up?

Maak /data persistent en neem bucketdata, policies, users en geteste replicas op objectniveau op in hetzelfde recovery manifest. Een schone MinIO-restore is alleen geslaagd wanneer bucketversies, policies, users en een representatief multipart-object een herstel op andere storage overleven.

Heeft MinIO HTTPS nodig achter een reverse proxy?

Gebruik HTTPS voor de publieke MinIO-origin en houd poort 9000 op de interne route. Pas de MinIO-instelling correct toe: routeer de S3 API en de console via afzonderlijke hostnames wanneer beide worden blootgesteld. Voor MinIO beschermt HTTPS credentials en gebruikerscontent tijdens transport en zorgt het ervoor dat origin-sensitive clientgedrag consistent blijft.

Hoe moet een MinIO-upgrade worden getest?

Restore de huidige MinIO-state naar een geïsoleerde deployment, pas de candidate version toe en herhaal de acceptance transaction. Let hier extra op, omdat serverreleases, client signing behavior en eventuele erasure-set layouts moeten worden getest met een kopie van echte bucketmetadata. Houd de vorige MinIO-image beschikbaar totdat de grenzen voor datamigratie en rollback duidelijk zijn.