Docker - Publisere applikasjon

Andre relevante sider
Skip to content

Å 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.

Thank you Docker meme

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:

  1. Skriv inn domenet, for eksempel gruppe1.it1.iktim.no.
  2. Velg http som scheme for forbindelsen fra Nginx Proxy Manager til containeren.
  3. Skriv serverens interne IP-adresse som forward hostname.
  4. Skriv containerens publiserte port, for eksempel 5000.
  5. 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:

  1. Inne i serveren: curl http://127.0.0.1:5000
  2. Fra en annen maskin: http://SERVER-IP:5000
  3. 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.