Denne uken flyttet vi bloggen fra et lokalt Docker Compose-oppsett til en produksjonsklar VPS.
Målet var enkelt: Tjenestene skulle være reproduserbare, dataene skulle beholdes, og utrullingen skulle kunne gjentas uten at serveren ble behandlet som en engangsmaskin.
Hva som ble flyttet
Applikasjonen kjører som flere Compose-tjenester: frontend, autentisering, blogg-API, e-post, logging, Postgres, MinIO og Caddy.
Postgres- og MinIO-dataene ble flyttet til VPS-en i stedet for at vi startet med tomme volumer. Dermed beholdt vi eksisterende brukere, innlegg, medier og tjenestedata. Postgres-passordet ble rotert under migreringen, og produksjonsmiljøfilen ligger på serveren, ikke i repositoriet.
Caddy håndterer HTTPS for blog.bjornmagne.com. Nettsiden videresender til den språkspesifikke forsiden, og helsesjekkene gjør tjenestene enkle å kontrollere.
Utrulling
Den første produksjonsutrullingen brukte lokalt bygde images for å få siden trygt på nett. Repositoriet har nå også et Compose-overlay for registry-images og en GitLab-jobb for utrulling. Bygg fra main tagges med commit-SHA-en, og jobben venter på en offentlig HTTPS-helsesjekk før utrullingen regnes som vellykket.
Det gir oss en tydelig rollback: velg forrige image-tag, start stakken på nytt og kontroller det samme helseendepunktet.
En liten lærdom om autentisering
Datamigreringen viste en detalj som er lett å overse. Signeringsnøkler for autentisering krypteres med en egen deploy-hemmelighet. Databasen og de krypterte nøklene kan flyttes sammen, men krypteringshemmeligheten må også bli med.
Det første VPS-miljøet brukte en annen hemmelighet. Passordsjekken fungerte fortsatt, men auth kunne ikke dekryptere signeringsnøkkelen og utstede et access-token. Vi trakk tilbake den ubrukelige migrerte nøkkelen og genererte en ny lokal VPS-nøkkel. Eksisterende sesjoner ble ugyldige, noe som er riktig etter et nøkkelbytte.
Veien videre
Det som gjenstår er å koble til GitLab Registry og beskyttede CI-variabler, og deretter kjøre den første godkjente utrullingen og rollback-testen. Siden er live nå, men utrullingsprosessen er ikke ferdig før både ny utrulling og rollback er testet.