Files
Cibello-app/docs/14-infrastruktur.md
T
2026-08-05 19:21:11 +07:00

57 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Del 14 Infrastruktur
## Nu: befintlig server (spec §51, steg 1)
```text
/opt/<slug>-platform/
repo/ git-klon av detta repo
secrets/ api.env, worker.env (ägare: appens användare, chmod 600)
backups/ logiska dumpar före varje deploy
logs/ via Docker json-file (rotation 20 MB × 5)
```
Containrar (docker-compose.production.yml): **app-api** (1 CPU/768 MB,
127.0.0.1:4100 bakom er reverse proxy → https://<apiDomain>), **app-worker**
(1 CPU/768 MB), **app-admin** (nginx, 0.25 CPU/128 MB), **app-redis**
(appendonly, 512 MB tak, noeviction BullMQ-krav). Allt som non-root, egna loggar,
healthchecks. Deploy: `infrastructure/deployment/deploy.sh` bygger, tar dump
(vägrar annars), migrerar, rullar om, healthcheckar, rullar tillbaka vid fel.
**Databas:** befintlig RDS-instans men separat databas + egen användare (create-database.sql)
med minsta privilegier (`create-database.sql`). Ingen delning av QuixZoom-tabeller.
**S3:** egen bucket `<slug>-production` med prefixen ur spec §53, SSE, block public
access, lifecycle: `temporary/` 7 dagar, scans 90 dagar (efter bekräftelse behövs
originalbilden inte för funktion endast för samtyckt träning). Presignade URL:er
för både upp- och nedladdning; mock-läget i dev speglar exakt samma flöde.
**Secrets:** .env-filer nu → SSM Parameter Store i steg 2. **Övervakning:**
`infrastructure/monitoring/README.md` (larmpunkter, correlation-id, healthchecks).
Kapacitet steg 1: ~5 000 registrerade/600 samtidiga utan svett trafiken är låg-QPS
och det tunga (AI) är asynkront via kön.
## Utvecklingsmiljö
`docker-compose.dev.yml` (Postgres 16 + Redis 7) → `pnpm db:migrate && pnpm db:seed`
`pnpm api:dev / worker:dev / admin:dev / mobile:start`. AAMOS_MODE=mock fungerar
helt utan nätverk.
## Steg 2 (≈ >5 000 användare eller första driftsincidenten)
API/worker till ECS Fargate (Dockerfiles är redo), ALB framför, secrets till SSM,
CloudWatch Container Insights. Databasen ligger kvar. Ingen appkodändring samma
API-domän (spec §59).
## Steg 3 (≈ >25 000 användare)
Egen VPC; egen RDS (flytt: replika → failover-fönster nattetid, dokumenterad
pg_dump-fallback); ElastiCache Redis; S3+CloudFront för receptbilder; separata
IAM-roller per tjänst; WAF på ALB. AAMOS förblir separat plattform bakom samma
kontrakt. Motorerna är rena paket → kan brytas ut till egna tjänster om profilering
någonsin motiverar det (sannolikt inte före 100k användare).
## Backup & återställning
RDS automatiska snapshots (PITR) + logisk dump före deploy + veckodump till S3 med
30 dagars retention. **Restore-test kvartalsvis mot staging, protokollfört**
en backup som inte testats räknas som obefintlig (spec §56).