Å publisere en Docker-applikasjon
I Level 2 bygde du et image fra din egen Flask-applikasjon og beskrev containeren med Compose. Her publiserer du applikasjonen med et domenenavn i stedet for bare en IP-adresse og et portnummer.
Når Flask-applikasjonen kjører på en server med en port, kan en reverse proxy ta imot forespørsler på vegne av applikasjonen og sende dem videre til riktig container. Da kan brukeren bruke et domenenavn i stedet for IP-adresse og portnummer. Domenet og HTTPS er allerede satt opp for dere. Din oppgave er å koble domenet til riktig container.
Før du begynner
Du må ha:
- en fungerende Docker-container
- serverens IP-adresse
- et domene som peker til serveren, eller et internt DNS-oppslag
- porten containeren lytter på, for eksempel
5000
Test først direkte:
http://SERVER-IP:5000
Fra domene til container
Det skjer flere ting når en bruker åpner https://gruppe1.it1.iktim.no:
sequenceDiagram
participant B as Nettleser
participant D as DNS
participant P as Nginx Proxy Manager
participant F as Flask-container
B->>D: Finn IP-adressen til domenet
D-->>B: Serverens IP-adresse
B->>P: Forespørsel til domenet
P->>P: Finn riktig Proxy Host
P->>F: Videresend til intern port 5000
F-->>P: Returner HTML-side
P-->>B: Returner svaret Det er derfor lurt å teste ett lag om gangen, i stedet for å feilsøke DNS, proxy og Flask samtidig.
Ny på DNS og reverse proxy som konsept?
🌐 Nettverkstjenester og serverroller forklarer DNS-servere og reverse proxy generelt, med samme mønster som her, før du setter det opp konkret med Nginx Proxy Manager.
Nginx Proxy Manager
Nginx Proxy Manager er et webgrensesnitt for Nginx. I stedet for å skrive Nginx-konfigurasjon manuelt, fyller du ut et skjema som lager en Proxy Host. Følg Nginx Proxy Manager sin egen installasjonsveiledning (kjøres selv som en Docker-container) for å installere den. Ikke kopier standardpassord eller passord fra eksempler inn i en produksjonsløsning; endre dem ved første innlogging.
Opprett en Proxy Host:
- Skriv inn domenet, for eksempel
gruppe1.it1.iktim.no. - Velg
httpsom scheme for forbindelsen fra Nginx Proxy Manager til containeren. - Skriv serverens interne IP-adresse som forward hostname.
- Skriv containerens publiserte port, for eksempel
5000. - Lagre og test domenet i nettleseren.
Proxyen må kunne nå porten på serveren. Hvis containeren kjører på en annen VM, må nettverk og brannmur tillate trafikken mellom VM-ene. Du trenger ikke eksponere Flask-porten direkte mot hele internett når Nginx Proxy Manager er inngangspunktet; begrens tilgangen med brannmur etter skolens oppsett.
Usikker på brannmurregler mellom VM-er?
🧱 Segmentering har en egen seksjon om brannmurregler mellom nettverk.
Feilsøking
Ny på systematisk feilsøking?
🔍 Feilsøkingsmetode gir deg den fulle metoden (syv trinn, halvdelingsmetoden, forventet mot faktisk) bak lagvis-testingen under.
docker compose ps
docker compose logs -f
docker exec -it <container> sh
curl http://127.0.0.1:5000
ss -tulpn
Test i denne rekkefølgen:
- Inne i serveren:
curl http://127.0.0.1:5000 - Fra en annen maskin:
http://SERVER-IP:5000 - Gjennom domenet:
https://ditt-domene
Hvis punkt 1 feiler, ligger feilen i Flask eller containeren. Hvis punkt 1 virker og punkt 2 feiler, sjekk portmapping og brannmur. Hvis punkt 2 virker og punkt 3 feiler, sjekk DNS og Proxy Host, og at du bruker riktig protokoll (http/https) for det du faktisk har satt opp. Ikke åpne flere porter enn nødvendig.
Neste steg
Når applikasjonen er publisert manuelt gjennom en reverse proxy, gå videre til Docker - Publisere container med workflow. Der automatiserer du selve byggingen og publiseringen av imaget med en GitHub Actions-workflow.
