Staging domene i CI/CD: pek staging og produksjon riktig

Når CI/CD-pipelinen din bygger og deployer, er koden bare halve jobben. Like viktig er det at et staging domene peker på staging-serveren, og at produksjonsdomenet aldri rammes av testmiljøet. Her er oppskriften på å sette opp DNS (Domain Name System) slik at staging og produksjon alltid treffer riktig sted.

TL;DR: Bruk subdomener som staging.dittdomene.no og la produksjonen ligge på hoveddomenet. La CI/CD oppdatere DNS-postene fra kode, sett lav TTL på poster du svitsjer ofte, og behold DNSSEC (DNS Security Extensions) på, slik at ingen kan forfalske svarene. Da blir deploys forutsigbare uten manuelt arbeid i DNS-kontrollpanelet.

Hvorfor DNS må være en del av deployet

CI/CD betyr kontinuerlig integrasjon og kontinuerlig leveranse: koden bygges, testes og leveres automatisk. Mange pipelines stopper likevel ved publisering av bygget, mens DNS-en fortsatt håndteres for hånd. Men et domene som peker feil er like problematisk som en app som krasjer, og et domene som peker på produksjon når det skulle pekt på staging kan sende brukere til feil miljø.

Staging og produksjon som separate navn

En vanlig feil er å kjøre begge miljøene på samme domene og bytte på serveren bak. Det blander sammen caches, cookies, CORS-regler og søkemotorindeksen. Løsningen er å gi hvert miljø sitt eget navn.

Produksjon ligger på dittdomene.no, og www.dittdomene.no peker dit via en CNAME-post. Staging ligger på staging.dittdomene.no. Slik blir et staging domene aldri indeksert i stedet for produksjonen, og du kan teste cookies og API-kall i trygge omgivelser. Du slipper også å registrere et eget domene til testing; subdomener koster ingenting ekstra under ditt eksisterende .no-domene hos Feno.

Pek staging domene riktig med DNS

For å peke et staging domene mot riktig server oppretter du en A-post som knytter staging.dittdomene.no til IP-adressen til staging-maskinen. Bruker du IPv6, legger du til en tilsvarende AAAA-post. Hvis staging-miljøet ligger hos en skyleverandør med et fast oppgitt navn, kan du bruke en CNAME-post og peke subdomenet videre.

Husk at CNAME ikke er gyldig på selve domenet (dittdomene.no), bare på subdomener. På domenet må du bruke A- eller AAAA-poster. Regelen gjelder uansett hvem som styrer DNS-en.

Automatiser DNS i CI/CD-pipelinen

Behandle DNS som kode

Når endringer i DNS ligger i git, kan du få code review på dem akkurat som på appkoden. Hos leverandører med API kan verktøy som Terraform eller DNSControl beskrive ønsket tilstand og la pipelinen gjøre oppdateringen ved merge. Da har du logg på alle endringer og kan rulle tilbake hvis noe ryker.

Senk TTL før du svitsjer

TTL (time to live) forteller hvor lenge et DNS-svar kan ligge i cache hos brukere og resolvere. En typisk verdi er 3600 sekunder, altså en time. Skal du flytte produksjonen til en ny server, senker du TTL-en til for eksempel 60 sekunder et døgn i forveien. Da har gamle svar rukket å falle ut av cachen før byttet.

Etter at trafikken er flyttet og alt verifisert, hever du TTL-en igjen. Permanent lav TTL gir mer DNS-trafikk og langsommere svar, så bruk den strategisk rundt deploys i stedet for hele tiden.

Blue-green og canary med DNS

Med to servere, en blå og en grønn, kan du veksle trafikk ved å endre en enkelt A-post i stedet for å starte noe på nytt. Svitsjen krever at cachen er tømt, så kombiner med lav TTL og en plan. Skal du rulle ut til bare en prosentandel av brukerne, trenger du en lastbalanser; DNS kan kun peke på én adresse om gangen.

Preview-miljøer med wildcard

Mange team lager et eget miljø per pull request. Med en wildcard-post som *.pr.dittdomene.no kan pipelinen spinne opp et miljø og la utvikleren teste på pr42.pr.dittdomene.no. Wildcard-posten dekker ikke hoveddomenet selv, så produksjonen er fortsatt beskyttet. Sjekk at DNS-leverandøren din støtter wildcard før du bygger oppsettet.

Vanlige feil med staging domene og produksjon

  • Samme domene for begge miljøer, med håp om at caches ikke blander dem.
  • Å svitsje produksjon uten å senke TTL-en på forhånd. Brukere sitter lenge igjen med gamle svar.
  • Å la staging-en ligge åpen for søkemotorer. Sett robots.txt eller beskytt med pålogging.
  • Å glemme DNSSEC ved bytte av DNS-leverandør. Da forsvinner verifiseringen av svarene.
  • Å endre poster manuelt i kontrollpanelet i stedet for i kode. Da mister du historikk og oversikt.

Trinn for trinn: sett opp staging og produksjon med CI/CD

  1. Bestem navn: staging.dittdomene.no og produksjon på dittdomene.no, med www som CNAME.
  2. Opprett A-posten for staging og sett en moderat TTL, for eksempel 300 sekunder.
  3. Beskriv alle poster i git hvis DNS-leverandøren har API, for eksempel med Terraform.
  4. La pipelinen oppdatere postene ved deploy, slik at staging alltid peker på nyeste staging-server.
  5. Senk TTL-en på produksjonsposten et døgn før en planlagt svitsj, og gjennomfør byttet når cachen er tømt.
  6. Verifiser med dig eller nslookup at svarene treffer riktig IP, og hev TTL-en tilbake.

Ofte stilte spørsmål

Bør staging ha eget domene eller subdomene?

Bruk subdomene. Et eget domene gir deg ingenting teknisk som et subdomene ikke gir, og det koster et ekstra domene per år. Under et .no-domene kan du opprette så mange subdomener du vil uten ekstra kostnad.

Hvorfor virker ikke staging.dittdomene.no rett etter deploy?

Sannsynligvis ligger et gammelt DNS-svar i cache. Sjekk TTL-en på posten og vent til den har gått ut. Du kan verifisere svaret med dig mot en resolver du styrer selv. Lav TTL på staging gjør at nye miljøer blir synlige raskt.

Trenger staging DNSSEC?

Ja. Staging-subdomenet ligger i samme sone som produksjonen, så når DNSSEC er aktivert på domenet, gjelder beskyttelsen begge miljøene. Hos Feno signeres sonen automatisk, og DS-posten sendes til Norid uten at du må gjøre noe selv. Med DNSSEC kan en angriper ikke forfalske hvor domenet peker, verken i staging eller produksjon.

Konklusjon: få kontroll på staging domene og produksjon

DNS er limet mellom CI/CD og brukerne dine. Når hvert miljø har sitt eget navn, TTL-en er tenkt gjennom og endringene ligger i kode, blir deploys forutsigbare og trygge. Du trenger bare ett .no-domene for å sette det hele opp, og Feno gir deg DNS, DNSSEC og overvåking samlet på ett sted.

Registrer domenet ditt hos Feno og få et norskeid oppsett med transparent prising. Fra 99 kroner i året for et .no-domene, med DNSSEC inkludert.

Registrer ditt .no-domene i dag

Sikre deg det perfekte domenenavnet for din bedrift eller prosjekt. Enkel registrering og administrasjon.

  • Norsk domeneforhandler
  • Enkel DNS-administrasjon
  • Konkurransedyktige priser
Kom i gang