Plattformen
Wellfish körs på en Kubernetes-plattform (k3s) som Wellfish äger och driver. Servrarna står i Göteborg.
- Applikationen körs i tre exemplar på olika servrar. Om en server stannar tar de andra exemplaren över trafiken.
- Databasen är PostgreSQL 18 med tre exemplar på tre olika fysiska servrar. Varje server har en egen snabb disk av datacenterklass med skydd mot strömavbrott. Om den primära databasen stannar, gör plattformen automatiskt en av kopiorna till ny primär.
- Filerna (till exempel dokument som ni laddar upp) ligger på delad lagring (Ceph) som sparar tre kopior på olika servrar.
- Egen databas, stängt nätverk. Bara produktionsapplikationen får prata med produktionsdatabasen, och bara vår ingress får prata med applikationen. Test- och demomiljöer rör aldrig produktionsdata.
Servrarna står i ett låst serverrum med brandlarm. En UPS driver servrarna i upp till 10 timmar vid strömavbrott.
Nätverk och kryptering
- All trafik till Wellfish går över HTTPS med TLS 1.2 eller 1.3. Certifikaten kommer från Let’s Encrypt och förnyas automatiskt. Vi får ett larm innan ett certifikat går ut.
- Databasen, Kubernetes-gränssnittet och andra administrativa tjänster går inte att nå från internet. Vi når dem bara via ett krypterat VPN (Tailscale).
- Servrarna tar bara emot inloggning med SSH-nycklar. Inloggning med lösenord är avstängd.
- Diskarna i servrarna är krypterade (LUKS). En stulen disk går inte att läsa.
- Era inloggningsuppgifter till ekonomisystemet (OAuth-token och API-nycklar) är krypterade i databasen.
- Hemligheter som lösenord och API-nycklar lagras krypterade och aldrig i källkoden. Vi byter dem när en person med åtkomst slutar.
Ändringar i produktion
- Hela plattformen är beskriven i versionshanterad kod (så kallad GitOps, med verktyget Flux). Ändringar av plattformen och applikationen görs i koden, inte direkt på servrarna. Varje ändring finns i historiken, med vem som gjorde den och när.
- Varje ny version av Wellfish-backend måste klara över 600 automatiska tester mot en riktig PostgreSQL-databas innan den kan släppas.
- Vi uppdaterar beroenden löpande. Ett verktyg (Renovate) föreslår uppdateringar av bibliotek och systemkomponenter, och vi prioriterar säkerhetsuppdateringar.
- Kubernetes uppdateras automatiskt, en server i taget, så att tjänsten är uppe under uppdateringen.
- Applikationen körs utan administratörsrättigheter, i ett minimalt paket utan onödiga program.
Övervakning och loggar
- Vi övervakar servrar, databas, säkerhetskopior och certifikat dygnet runt (med Prometheus och Alertmanager). Ett larm går direkt till driftansvarig.
- Vi har larm om att en säkerhetskopia är äldre än 36 timmar, om databasreplikeringen släpar och om arkiveringen av databasloggen stannar.
- En statustjänst kontrollerar löpande att Wellfish svarar.
- Applikationsloggar sparas i 90 dagar i vår egen loggtjänst. Loggarna lämnar inte plattformen.
- Mätvärden sparas i 365 dagar.
Relaterat
- Kontinuitet och återställning beskriver säkerhetskopior och vad som händer vid avbrott.
- Åtkomst och inloggning beskriver vem som når produktionen.
