[{"data":1,"prerenderedAt":264},["ShallowReactive",2],{"post-12-factor-app-metodologi":3,"post-nav-12-factor-app-metodologi":259},{"_id":4,"body":5,"category":242,"coverImage":248,"date":249,"excerpt":250,"slug":251,"tags":253,"title":258},"post-12-factor-app-metodologi",[6,17,26,34,42,50,58,66,74,82,90,98,106,114,122,130,138,146,154,162,170,178,186,194,202,210,218,226,234],{"_key":7,"_type":8,"children":9,"markDefs":15,"style":16},"b0ws6tfh","block",[10],{"_key":11,"_type":12,"marks":13,"text":14},"sb0ws6tfh","span",[],"Introduktion",[],"h2",{"_key":18,"_type":8,"children":19,"markDefs":24,"style":25},"yx1ay9x7",[20],{"_key":21,"_type":12,"marks":22,"text":23},"syx1ay9x7",[],"I den moderne æra leveres software almindeligvis som en service: kaldet web-apps eller software-as-a-service. 12-factor app metodologien er en metode til at bygge software-as-a-service apps, der bruger deklarative formater til automatisering af opsætning, har en ren kontrakt med det underliggende operativsystem, er egnede til deployment på moderne cloud-platforme, minimerer divergens mellem udvikling og produktion, og kan skalere op uden væsentlige ændringer i værktøjer, arkitektur eller udviklingspraksis.",[],"normal",{"_key":27,"_type":8,"children":28,"markDefs":33,"style":25},"69n75gmf",[29],{"_key":30,"_type":12,"marks":31,"text":32},"s69n75gmf",[],"12-factor metodologien kan anvendes på apps skrevet i ethvert programmeringssprog og som bruger enhver kombination af backing services (database, kø, memory cache, osv.).",[],{"_key":35,"_type":8,"children":36,"markDefs":41,"style":16},"zk9a7y2u",[37],{"_key":38,"_type":12,"marks":39,"text":40},"szk9a7y2u",[],"1. Codebase",[],{"_key":43,"_type":8,"children":44,"markDefs":49,"style":25},"vk3owsl7",[45],{"_key":46,"_type":12,"marks":47,"text":48},"svk3owsl7",[],"Én codebase sporet i revisionskontrol, mange deployments. En 12-factor app spores altid i et versionskontrolsystem som Git. Der er altid en en-til-en korrelation mellem codebase og app: hvis der er flere codebases, er det ikke en app — det er et distribueret system. Løsningen er at faktorisere delt kode ud i biblioteker, som kan inkluderes gennem afhængighedsstyringssystemet.",[],{"_key":51,"_type":8,"children":52,"markDefs":57,"style":16},"0pd8wfrh",[53],{"_key":54,"_type":12,"marks":55,"text":56},"s0pd8wfrh",[],"2. Dependencies",[],{"_key":59,"_type":8,"children":60,"markDefs":65,"style":25},"1ahiqh6x",[61],{"_key":62,"_type":12,"marks":63,"text":64},"s1ahiqh6x",[],"Eksplicit erklær og isoler afhængigheder. En 12-factor app stoler aldrig på implicit eksistens af system-brede pakker. Den erklærer alle afhængigheder fuldstændigt og præcist via et afhængighedserklæringsmanifest. Desuden bruger den et afhængighedsisoleringsværktøj under udførelse for at sikre, at ingen implicitte afhængigheder \"lækker ind\" fra det omgivende system.",[],{"_key":67,"_type":8,"children":68,"markDefs":73,"style":16},"2sbh2akn",[69],{"_key":70,"_type":12,"marks":71,"text":72},"s2sbh2akn",[],"3. Config",[],{"_key":75,"_type":8,"children":76,"markDefs":81,"style":25},"8ow773pj",[77],{"_key":78,"_type":12,"marks":79,"text":80},"s8ow773pj",[],"Gem konfiguration i miljøet. En apps konfiguration er alt, der sandsynligvis vil variere mellem deployments. Dette inkluderer resource handles til databasen, credentials til eksterne services og per-deploy værdier. 12-factor gemmer config i miljøvariabler — de er nemme at ændre mellem deployments uden at ændre kode.",[],{"_key":83,"_type":8,"children":84,"markDefs":89,"style":16},"k5dnu0ok",[85],{"_key":86,"_type":12,"marks":87,"text":88},"sk5dnu0ok",[],"4. Backing Services",[],{"_key":91,"_type":8,"children":92,"markDefs":97,"style":25},"szni18gl",[93],{"_key":94,"_type":12,"marks":95,"text":96},"sszni18gl",[],"Behandl backing services som tilknyttede ressourcer. En backing service er enhver service, som appen forbruger over netværket som en del af sin normale drift. Koden for en 12-factor app gør ingen forskel på lokale og tredjepartstjenester. En deployment bør kunne udskifte en lokal MySQL-database med en administreret af en tredjepart uden ændringer i appens kode.",[],{"_key":99,"_type":8,"children":100,"markDefs":105,"style":16},"7qimeq98",[101],{"_key":102,"_type":12,"marks":103,"text":104},"s7qimeq98",[],"5. Build, Release, Run",[],{"_key":107,"_type":8,"children":108,"markDefs":113,"style":25},"np4xinr5",[109],{"_key":110,"_type":12,"marks":111,"text":112},"snp4xinr5",[],"Strengt adskil byg- og kørselsstadier. En codebase omdannes til et deployment gennem tre stadier: Build-stadiet omdanner kode til en eksekverbar bundle, Release-stadiet kombinerer build med config, og Run-stadiet kører appen i eksekveringsmiljøet. 12-factor bruger streng adskillelse mellem disse tre stadier.",[],{"_key":115,"_type":8,"children":116,"markDefs":121,"style":16},"m5c5oytk",[117],{"_key":118,"_type":12,"marks":119,"text":120},"sm5c5oytk",[],"6. Processes",[],{"_key":123,"_type":8,"children":124,"markDefs":129,"style":25},"hfsa3yb0",[125],{"_key":126,"_type":12,"marks":127,"text":128},"shfsa3yb0",[],"Kør appen som en eller flere statsløse processer. 12-factor processer er statsløse og share-nothing. Enhver data, der skal persisteres, skal gemmes i en stateful backing service, typisk en database. 12-factor app'en antager aldrig, at noget cachet i memory eller på disk vil være tilgængeligt på en fremtidig anmodning.",[],{"_key":131,"_type":8,"children":132,"markDefs":137,"style":16},"bytvp3tn",[133],{"_key":134,"_type":12,"marks":135,"text":136},"sbytvp3tn",[],"7. Port Binding",[],{"_key":139,"_type":8,"children":140,"markDefs":145,"style":25},"ixmxwlzq",[141],{"_key":142,"_type":12,"marks":143,"text":144},"sixmxwlzq",[],"Eksporter services via port-binding. 12-factor app'en er fuldstændig selvstændig og afhænger ikke af runtime-injektion af en webserver. Web-appen eksporterer HTTP som en service ved at binde til en port og lytte til anmodninger.",[],{"_key":147,"_type":8,"children":148,"markDefs":153,"style":16},"uu27exz9",[149],{"_key":150,"_type":12,"marks":151,"text":152},"suu27exz9",[],"8. Concurrency",[],{"_key":155,"_type":8,"children":156,"markDefs":161,"style":25},"zdssvo7d",[157],{"_key":158,"_type":12,"marks":159,"text":160},"szdssvo7d",[],"Skaler ud via process-modellen. I 12-factor app'en er processer førsteklasses borgere. Ved hjælp af unix-process-modellen kan udvikleren arkitekturere sin app til at håndtere forskellige workloads ved at tildele hver type arbejde til en processtype.",[],{"_key":163,"_type":8,"children":164,"markDefs":169,"style":16},"i2djsrnv",[165],{"_key":166,"_type":12,"marks":167,"text":168},"si2djsrnv",[],"9. Disposability",[],{"_key":171,"_type":8,"children":172,"markDefs":177,"style":25},"iyleys3f",[173],{"_key":174,"_type":12,"marks":175,"text":176},"siyleys3f",[],"Maksimer robusthed med hurtige opstarter og graceful shutdowns. 12-factor appens processer er disposable — de kan startes eller stoppes med et øjebliks varsel. Dette faciliterer hurtig elastisk skalering, hurtig deployment og robusthed af produktionsdeployments.",[],{"_key":179,"_type":8,"children":180,"markDefs":185,"style":16},"fb7mszpx",[181],{"_key":182,"_type":12,"marks":183,"text":184},"sfb7mszpx",[],"10. Dev\u002FProd Parity",[],{"_key":187,"_type":8,"children":188,"markDefs":193,"style":25},"qlntpjjn",[189],{"_key":190,"_type":12,"marks":191,"text":192},"sqlntpjjn",[],"Hold udvikling, staging og produktion så ens som muligt. 12-factor app'en er designet til kontinuerlig deployment ved at holde kløften mellem udvikling og produktion lille — den tidsmæssige kløft, personalkløften og værktøjskløften.",[],{"_key":195,"_type":8,"children":196,"markDefs":201,"style":16},"dripni9j",[197],{"_key":198,"_type":12,"marks":199,"text":200},"sdripni9j",[],"11. Logs",[],{"_key":203,"_type":8,"children":204,"markDefs":209,"style":25},"iwjwnk4v",[205],{"_key":206,"_type":12,"marks":207,"text":208},"siwjwnk4v",[],"Behandl logs som event streams. Logs er strømmen af aggregerede, tidsstemplede events fra alle kørende processer. En 12-factor app bekymrer sig aldrig om routing eller opbevaring af sin output-strøm. Hver kørende proces skriver sin event-strøm, ubuffered, til stdout.",[],{"_key":211,"_type":8,"children":212,"markDefs":217,"style":16},"v6r9etkg",[213],{"_key":214,"_type":12,"marks":215,"text":216},"sv6r9etkg",[],"12. Admin Processes",[],{"_key":219,"_type":8,"children":220,"markDefs":225,"style":25},"k65om0zu",[221],{"_key":222,"_type":12,"marks":223,"text":224},"sk65om0zu",[],"Kør admin\u002Fmanagement-opgaver som engangsprocesser. Engangs admin-processer bør køres i et identisk miljø som de almindelige processer. De kører mod et release, bruger den samme codebase og config. Admin-kode skal sendes med applikationskode for at undgå synkroniseringsproblemer.",[],{"_key":227,"_type":8,"children":228,"markDefs":233,"style":16},"p1kwfw3j",[229],{"_key":230,"_type":12,"marks":231,"text":232},"sp1kwfw3j",[],"Konklusion",[],{"_key":235,"_type":8,"children":236,"markDefs":241,"style":25},"u6rc4q2t",[237],{"_key":238,"_type":12,"marks":239,"text":240},"su6rc4q2t",[],"12-Factor App metodologien giver en solid foundation for at bygge moderne, cloud-native applikationer. Ved at følge disse principper kan udviklere skabe software, der er robust, skalerbar og klar til moderne deployment-praksisser. Selvom oprindeligt udviklet til Heroku, er disse principper blevet bredt adopteret på tværs af hele software-industrien.",[],{"_id":243,"slug":244,"title":247},"cat-kode",{"_type":245,"current":246},"slug","kode","Kode",null,"2026-03-30T10:00:00Z","En komplet dansk oversættelse af alle 12 faktorer — metodologien bag moderne, cloud-native software-as-a-service applikationer.",{"_type":245,"current":252},"12-factor-app-metodologi",[254,255,256,257],"arkitektur","cloud","devops","metodologi","12-Factor App Metodologi",{"next":248,"prev":260},{"slug":261,"title":263},{"_type":245,"current":262},"ricky-gervais-har-ret","Ricky Gervais har ret: Vi er ved at glemme hvordan man griner",1775427575740]