Initial commit (unpacked platform)
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user