Cyber and Space · Tech-con
Så driver vi ett tjugotal tjänster på en enda server — där git är sanningen, maskinen aldrig bygger något själv, och utvecklingen sker av parallella Claude-sessioner i tmux.
↓ scrolla eller använd piltangenterna
01 · Översikt
All trafik går genom Cloudflare och in i en Caddy-proxy — den enda containern som öppnar portar mot världen. Bakom den bor varje tjänst i sin egen container på ett internt nätverk.
Caddy är den enda som lyssnar utåt. Varje sajt är ett block i en enda Caddyfile.
Ingen tjänst delar process med en annan. Krashar en, står resten kvar.
Servern drar färdiga images. Den bygger aldrig och har aldrig sett en rad app-kod.
02 · Principen
Inget skrivs för hand på servern. Allt — appar, proxy, konfiguration — når boxen genom ett repo och en pipeline. Om boxen och repot är oense är det boxen som har fel.
Äger proxyn — varje sajts Caddy-block — plus de tjänster som saknar eget repo. Ett drift-skript jämför repo mot box före varje ändring.
Varje app äger sin egen compose-fil och sin egen CI. Monorepot alfa-world rymmer ett dussin projekt med en workflow var.
2026 lades fyra sajter till direkt på servern. Filen tappade alla kommentarer, och nästa synk hade tagit fyra sajter offline. Nu vägrar synken.
03 · Kontrollrummet
En container på boxen där utvecklingen sker. Den har Claude Code, tmux, alla repon — och full makt över boxen. Därför har den ingen publik port alls: bara operatören når den.
Varje uppdrag får ett tmux-fönster <repo>-<n> med en egen Claude. Inget register — finns fönstret är slotten upptagen.
Sessionerna syns i Claude-appen; operatören hittar rätt rad på formen innan hen läst ett ord.
Sessionerna körs med fjärrkontroll, så samma arbete går att följa och styra från vilken enhet som helst.
04 · En slots livscykel
Ett uppdrag på en rad blir en färdig deploy — utan att någon rör servern.
Operatören säger vad. xo skriver ett kickoff-brev och lägger det i en ny slot.
Slotten jobbar i en egen git-worktree — aldrig i huvudträdet, så parallella sessioner krockar inte.
Ändringen landar som en PR. Numret rapporteras direkt.
Diffen granskas innan merge — av en Claude, med fokus på riktiga buggar.
Merge till main triggar bygget och deployen. Det är den enda vägen ut.
Sajten verifieras, fönstret stängs och minnet (≈350 MB per Claude) frigörs.
05 · Env-sidan
Nycklar och lösenord sätts i ett webbverktyg bakom Cloudflare Access och passkey. Värdet krypteras i webbläsaren och kan därefter inte läsas av någon — inte av sidan, inte av servern.
Cloudflare Access med en enda tillåten identitet, passkey-inloggning, och ett nytt passkey-tryck för varje sparning och deploy.
Env-sidan kör distroless, utan root och utan någon väg in i boxens kontrollplan. Ett intrång i appen blir inte ett intrång i boxen.
Även fullt komprometterad kan servern bara skriva över hemligheter och starta deployer — aldrig läsa en enda.
06 · Husregler
Ändringar går repo → push → synk/CI. En handskriven fil är en lögn i repot och försvinner tyst vid nästa synk.
Att återskapa kontrollrummet avslutar varje Claude-session i det — inklusive den som gör det. Det sker bara mellan sessioner, på operatörens order.
Agenterna får läsa schema och kod, aldrig innehållet i användartabeller. Behövs det, stannar sessionen och frågar.
Sammanfattning
Boxen är en utdata. Drift upptäcks och vägras.
Immutabla images, en deployväg.
En slot per uppdrag, en worktree per slot, en PR per ändring.
Skriv i webbläsaren, läs bara i containern.