JournalindeksDockup / feltnotat
Note / self-host-minio

Slik selvhoster du MinIO i 2026: S3-endepunkter, TLS og varig lagring

En praktisk veiledning til selvhosting av MinIO med Docker, porter, persistent data, TLS, sikkerhet, sikkerhetskopier og feilene som hindrer bruk i produksjon. Trinn for trinn.

En mislykket MinIO-deployment krasjer ikke alltid. Den kan vise en innloggingsside mens klientene signerer forespørsler for konsoll-URL-en i stedet for S3 API-URL-en. Start heller med en ende-til-ende-sjekk: Opprett en bucket, last opp et multipart-objekt, hent det via en presigned URL, og bekreft at en versjonert sletting kan gjenopprettes.

Denne sjekken samsvarer med det dokumenterte formålet til MinIO: S3-kompatibel objektlagring på disker du kontrollerer. Den avdekker også manglende avhengigheter, feil antakelser om proxyen og flyktige data tidligere enn en uptime-probe kan.

Hva MinIO er avhengig av

MinIO HTTP-prosessen lytter på 9000. Behold denne porten på applikasjonsnettverket, og publiser bare plattformruten. Det lokale runtime-kravet er en ekstra disk eller et eksternt mål for gjenopprettbare sikkerhetskopier. Gjør livssyklusen eksplisitt, slik at flytting av MinIO mellom verter ikke endrer virkemåten i det stille.

Skriv ned grensen som en kort kontrakt: Hvem eier kravet, hvilken credential brukes, hvilken timeout er akseptabel, og hvordan vises en feil? Kjør deretter denne transaksjonen: Opprett en bucket, last opp et multipart-objekt, hent det via en presigned URL, og bekreft at en versjonert sletting kan gjenopprettes. Følg med på diskforsinkelse, samtidige multipart-opplastinger, ledig plass og nettverksgjennomstrømming mellom applikasjonene og S3-endepunktet under kjøringen, fordi denne arbeidsbelastningen gir et mer nyttig utgangspunkt for dimensjonering enn en inaktiv container.

Et Docker-grunnlag for MinIO

En produksjonslignende oppstart er bevisst kjedelig: navngitt state, eksplisitt port og ingen secret inne i imaget.

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

Eksempelet er et grunnlag, ikke en komplett støttestakk. Bekreft det lokale kravet før eksponering: en ekstra disk eller et eksternt mål for gjenopprettbare sikkerhetskopier. Kontroller de faktiske mountene og lytteren, og prøv deretter å opprette en bucket, laste opp et multipart-objekt, hente det via en presigned URL og bekrefte at en versjonert sletting kan gjenopprettes. Lås imaget som fungerer, før neste omstart.

Domener, proxy-headere og port 9000

TLS-utstedelse er bare halve MinIO-ruten. Rutelegg S3 API-et og konsollen med separate hostnames når begge eksponeres. Send trafikken internt til 9000, og videresend det eksterne scheme-et slik at genererte URL-er og sikre cookies forblir konsistente.

Bruk hele MinIO-scenarioet fra et rent nettverk, ikke bare rot-siden. En 502-feil eller sertifikatfeil kan isoleres med automatisk domene- og TLS-oppsett. Hvis trafikken når prosessen og klientene signerer forespørsler for konsoll-URL-en i stedet for S3 API-URL-en, må du feilsøke tilstanden der den oppstår, i stedet for å legge på flere redirects.

Utform gjenoppretting av MinIO før lansering

Lag et gjenopprettingsmanifest for MinIO: bucket-data, policies, brukere og testede kopier på objektnivå. Mount /data før bootstrap, skriv ufarlige eksempeldata, og bytt ut containeren for å bevise at banen faktisk er persistent. Kontroller eierskap og ledig plass nå, fordi en mountet, men ikke-skrivbar bane i praksis ikke gir persistence i det hele tatt.

Sikkerhetskopier til et failure domain som er adskilt fra serveren som kjører. Gjenopprett MinIO fra det låste imaget, og bekreft at bucket-versjoner, policies, brukere og et representativt multipart-objekt overlever gjenoppretting på annen lagring. Veiledningen for persistent volumes hjelper deg med å omsette denne øvelsen til en policy for snapshots og retention.

Velg tillitsgrensen for MinIO

Lag en threat model for handlingen MinIO utfører, ikke bare innloggingsskjemaet. Den største risikoen her er å bruke korte standardverdier for root-credentials eller å eksponere administrasjonskonsollen bredt. Implementer denne grensen: Skill S3 API-et fra den administrative konsollen, og utsted application keys som ikke kan administrere hele serveren.

Behandle MINIO_ROOT_PASSWORD i tråd med MinIO-rollen: Hold sensitive verdier ute av Git, dokumenter konsekvensene av rotasjon, og bruk aldri et offentlig eksempel i produksjon. Ikke løs en permission-feil ved å kjøre containeren som root eller ved å mounte verten bredt. Ressursgrenser hører også hjemme i sikkerhetsdesignet når brukere kan utløse diskforsinkelse, samtidige multipart-opplastinger, ledig plass og nettverksgjennomstrømming mellom applikasjonene og S3-endepunktet.

Logger som besvarer neste spørsmål

Følg med på arbeidet MinIO utfører: diskforsinkelse, samtidige multipart-opplastinger, ledig plass og nettverksgjennomstrømming mellom applikasjonene og S3-endepunktet. Sett grenser med headroom for dette arbeidet, og unngå en liveness-probe som konkurrerer med det. Operatørsjekken bør fortsatt forsøke å opprette en bucket, laste opp et multipart-objekt, hente det via en presigned URL og bekrefte at en versjonert sletting kan gjenopprettes etter en fast plan.

Ved oppdateringer må du huske at serverutgivelser, klientenes signeringsatferd og eventuell erasure-set-layout må testes med en kopi av ekte bucket-metadata. Deploy kandidaten mot en gjenopprettet kopi, og gjenta den kjente testen. Hvis klientene signerer forespørsler for konsoll-URL-en i stedet for S3 API-URL-en, bruker du runtime-logger og den faktiske nettverksforespørselen til å finne hvilken antakelse som ble endret.

Dokumentasjon som må samles inn før MinIO går live

Før de faktiske brukerne kommer til, lager du et release-ark for MinIO. Det må angi det låste imaget, port 9000, canonical origin, persistente paths og hvem som eier en ekstra disk eller et eksternt mål for gjenopprettbare sikkerhetskopier. Legg ved forventet resultat for denne transaksjonen: Opprett en bucket, last opp et multipart-objekt, hent det via en presigned URL, og bekreft at en versjonert sletting kan gjenopprettes.

Bruk arket etter en vanlig utskifting og etter en ren gjenoppretting. Gjenopprettingen godkjennes bare hvis bucket-versjoner, policies, brukere og et representativt multipart-objekt overlever gjenoppretting på annen lagring. Samle også inn en kort ressurssporing som dekker diskforsinkelse, samtidige multipart-opplastinger, ledig plass og nettverksgjennomstrømming mellom applikasjonene og S3-endepunktet. Oppbevar den sammen med releasen, slik at fremtidige kapasitetsendringer kan sammenlignes med den samme arbeidsbelastningen.

Inkluder én kontrollert feil: Send ufarlig input nær ressurs- eller formatgrensen som er knyttet til denne grensen: klientene signerer forespørsler for konsoll-URL-en i stedet for S3 API-URL-en. Bekreft at MinIO rapporterer problemet ved riktig grense, sett tilbake den gyldige tilstanden, og kjør transaksjonen på nytt. Dette kontrollerer feilsynlighet, ikke bare suksess, og hindrer at et tilsynelatende friskt grensesnitt skjuler en ødelagt worker, callback eller databaseforbindelse.

Deploy MinIO på Dockup uten å miste grensene

En Dockup-mal bør definere imaget, port 9000, mounts, helsesjekk-timing, domene, TLS og levering av secrets. Dockup bør bevare MinIO-runtime-innstillingene mens operatøren bekrefter dette lokale kravet: en ekstra disk eller et eksternt mål for gjenopprettbare sikkerhetskopier. Den samme deployen kan målrettes mot Dockup-servere eller kundetilknyttet kapasitet.

Når ruten er live, bruker du den offentlige innstillingen og prøver å opprette en bucket, laste opp et multipart-objekt, hente det via en presigned URL og bekrefte at en versjonert sletting kan gjenopprettes. Sikkerhetskopier bucket-data, policies, brukere og testede kopier på objektnivå, og behold gjenopprettingsøvelsen i driftsplanen. Dette er MinIO-ansvar som fortsatt må være synlig etter at infrastrukturen er klargjort.

Vanlige spørsmål

Hva trenger MinIO for en produksjonsdeployment?

Rutelegg MinIO-containeren på port 9000 gjennom én HTTPS-origin. Det lokale runtime-kravet er en ekstra disk eller et eksternt mål for gjenopprettbare sikkerhetskopier. Ikke erklær MinIO klart før du kan opprette en bucket, laste opp et multipart-objekt, hente det via en presigned URL og bekrefte at en versjonert sletting kan gjenopprettes.

Hvilke MinIO-data hører hjemme i en sikkerhetskopi?

Gjør /data persistent, og inkluder bucket-data, policies, brukere og testede kopier på objektnivå i det samme gjenopprettingsmanifestet. En ren MinIO-gjenoppretting er bare vellykket når bucket-versjoner, policies, brukere og et representativt multipart-objekt overlever gjenoppretting på annen lagring.

Krever MinIO HTTPS bak en reverse proxy?

Bruk HTTPS for den offentlige MinIO-originen, og behold port 9000 på den interne ruten. Bruk MinIO-innstillingen riktig: Rutelegg S3 API-et og konsollen med separate hostnames når begge eksponeres. For MinIO beskytter HTTPS credentials eller brukerinnhold under transport, og sørger for konsistent klientatferd som er avhengig av origin.

Hvordan bør en MinIO-oppgradering testes?

Gjenopprett gjeldende MinIO-state i en isolert deployment, bruk kandidatversjonen, og gjenta akseptansetransaksjonen. Vær spesielt oppmerksom på at serverutgivelser, klientenes signeringsatferd og eventuell erasure-set-layout må testes med en kopi av ekte bucket-metadata. Behold det forrige MinIO-imaget til grensen for datamigrering og rollback er forstått.