Bakgrunn
Gjøvik kommune samarbeider med NTNU om bachelor- og masteroppgaver der studenter utvikler programvare for kommunen. Problemet kommunen hadde var at de gjerne ville fortsette å bruke noen av disse studentløsningene i etterkant — men hadde ingen egnet driftsmiljø til å faktisk kjøre dem i, uavhengig av kommunens interne systemer.
Sammen med tre medstudenter fikk jeg i oppgave å bygge dette driftsmiljøet fra grunnen av, i Microsoft Azure.
Hva vi bygde
Et skybasert driftsmiljø der studentoppgaver kjører som containere, med automatisert utrulling og fjerning gjennom GitHub Actions. Kravet til en studentoppgave for å kunne driftes i miljøet er enkelt: den må være Dockerized, og hvis den trenger lagring må det skje via PostgreSQL.
Teknologier:
- Terraform — all infrastruktur er kode, organisert i moduler (nettverk, database, lagring, containere, alerts)
- Microsoft Azure — Container Apps, PostgreSQL Flexible Server, Key Vault, Storage Account
- Docker — hver studentoppgave bygges som et image og lagres i GitHub Container Registry
- GitHub Actions — tre workflows håndterer bygging av Docker-images, Terraform-apply og fjerning av oppgaver
Arkitektur og moduler

Terraform-koden er delt i egne moduler per ansvarsområde i stedet for én stor flat konfigurasjon:
network— Network Security Groups med “deny all” som utgangspunkt for databasen, og kun HTTPS tillatt inn til containernedatabase— PostgreSQL Flexible Server med konfigurerbar backup-retention og auto-growstorage— Storage Account for Terraform-variabler, med delt nøkkeltilgang deaktivertcontainers— Container Apps og Key Vault for sikker lagring av databasepassordalerts— automatiske varsler på e-post og SMS ved høy CPU-bruk
Denne modulstrukturen gjør det mulig å gjenbruke og teste enkeltkomponenter uten å måtte forholde seg til hele infrastrukturen samtidig.
Automatisert utrulling
Når en ny studentoppgave skal driftes, kjøres et Python-script som pusher koden til repoet og trigger to workflows i sekvens:
docker-build.ymlbygger et nytt Docker-image og lagrer det i GitHub Container RegistrybuildTerraform.ymllegger til de nye verdiene i Terraform-konfigurasjonen og kjørerterraform apply
Fjerning av en studentoppgave skjer på samme måte — en tom commit trigger remove.yml, som fjerner Docker-imaget og kjører Terraform på nytt med oppdatert konfigurasjon.
Sikkerhetshensyn
Som student innen digital infrastruktur og cybersikkerhet var det viktig for meg at sikkerhet står i fokus:
- Databasepassord og andre hemmeligheter lagres i Azure Key Vault, ikke i kode
- Network Security Groups følger prinsippet om minste privilegium — databasen er stengt for alt unntatt nødvendig trafikk
- Autentisering mot Azure skjer via en dedikert service principal med avgrensede rettigheter, ikke personlige brukerkontoer
- Terraform state lagres i Azure Storage med delt nøkkeltilgang deaktivert
Resultat
Vi leverte et fungerende driftsmiljø som Gjøvik kommune kan ta i bruk for å drifte og videreutvikle studentoppgaver de ønsker å beholde, med full automatisering fra kode til kjørende container i Azure.