# quiXzoom — Ren målarkitektur # 2026-06-14 · Bernt ## PRINCIP En server. En process per ansvar. Systemctl för allt. nginx som enda ingångspunkt. Inget K8s. Inget Kong. Inget MSK. Inga PM2-processer i produktion. --- ## MÅLBILD — server-2 (r8g.4xlarge, eu-north-1b) ``` INTERNET │ ▼ ┌─────────────────────────────────────────────────────┐ │ nginx (port 80 + 443, TLS-terminering) │ │ │ │ quixzoom.com ──────────────► redirect www │ │ www.quixzoom.com ───────────► /opt/amos/public/ │ │ quixzoom/ (statisk) │ │ api.quixzoom.com/api/qz/ ───► :3209 (quixzoom-api) │ │ api.quixzoom.com/api/qz/ :3390 (qz-engine) │ │ engine/ │ │ api.quixzoom.com/health ────► :3209/health │ │ │ │ amos.aamos.systems ─────────► :3100 (amos-core) │ │ bernt.aamos.systems ────────► :18789 (openclaw) │ │ [övriga interna domäner] │ └─────────────────────────────────────────────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ :3209 :3390 :3392 :3100 quixzoom- qz-engine billing- amos-core api (Rust) engine (AI-hjärna) (Node.js) (Rust) │ ▼ :6432 (pgbouncer) │ ▼ platform-identity-core.rds (Postgres) [mål: migrera till lokal Postgres på server-2] ``` --- ## TJÄNSTER SOM SKA VARA AKTIVA (systemctl enabled) | Tjänst | Port | Ansvar | |--------|------|--------| | nginx | 80/443 | TLS, routing, statiska filer | | amos-core | 3100 | AI-hjärna, intern plattform | | aamos-quixzoom-engine | 3390 | Optisk analys, Rust | | **quixzoom-api** | 3209 | Missions, auth, payments, zoomers — **ska bli systemctl** | | aamos-billing-engine | 3392 | Stripe/betalningar, Rust | | aamos-ledger | 3250 | Bokföring (LandveX) | | ouroboros-identity | 3207 | Auth/JWT | | pgbouncer | 6432 | DB connection pooling | | nats-server | 4222 | Intern eventbuss | | openclaw-gateway | 18789 | Bernt AI-agent | | amos-watchdog | — | Vaktar amos-core | **Allt annat: disabled och stoppat.** --- ## AKTUELLT LÄGE vs MÅLBILD ### ✅ Redan rätt - nginx, amos-core, qz-engine, billing-engine, ledger, identity, pgbouncer, nats, openclaw ### 🔴 Måste åtgärdas **1. quixzoom-api kör via PM2 — ska vara systemctl** - 90 kraschar beror troligen på att PM2 och systemd-arv kolliderar (PORT-variabel-konflikt syns i koden) - Flytta till: `/etc/systemd/system/quixzoom-api.service` **2. qz-webhook kör via PM2 från /home/bernt/qz-ci/** - Flytta till: `/etc/systemd/system/qz-webhook.service` - Flytta kod till: `/opt/amos/data/qz-webhook/` **3. nginx api.quixzoom.com pekar på port 7060/7050 som inte finns** - Ta bort /api/missions/ och /api/regulatory/ locations tills tjänsterna finns - Annars 502 på varje anrop dit **4. www.quixzoom.com index = zoomer-start.html som inte finns** - Bestäm rätt entry-point och lägg dit filen **5. Credentials i klartext i index.mjs** - AWS_ACCESS_KEY_ID hårdkodat i källkod — kritiskt säkerhetsproblem - Flytta till .env eller AWS instance profile --- ## AWS — VAD SOM KAN STÄNGAS NED (noll quiXzoom-beroende) ### Stäng omedelbart (inga aktiva kunder, inga konsekvenser): | Resurs | Besparing/mån | Åtgärd | |--------|--------------|--------| | server-3-redundancy (r6g.xlarge) | ~140 USD | `aws ec2 stop-instances` | | 2× graviton-worker (r6g.2xlarge) | ~560 USD | `aws ec2 stop-instances` | | EKS karpenter-noder (2× r7g.4xlarge) | ~400-600 USD | Scale EKS nodepool till 0 | | 4× orphaned Elastic IPs | ~18 USD | `aws ec2 release-address` | ### Kräver Johan-koordination: | Resurs | Besparing/mån | Blocker | |--------|--------------|---------| | EKS cluster "wavult" (control plane) | ~72 USD | Vad kör Johan via K8s? | | MSK Kafka | ~113 USD | Vad använder MSK? | | RDS platform-identity-core Multi-AZ→single | ~50 USD | Planerat nedtid | | server-1 (r8g.4xlarge) | ~600 USD | Vad kör kyc-mrz? | **Total omedelbar besparing: ~1 100-1 300 USD/mån** **Total med koordination: ~1 900-2 000 USD/mån** --- ## REGEL: JOHANS OCH SVENS ARBETE Hårdlåst från 2026-06-14. Override kräver Eriks explicita godkännande. - Allt arbete sker på **server-2** (befintlig) - **Inga nya AWS-resurser** av något slag - **Inga K8s-deployments** — quiXzoom kör systemctl direkt - **Ingen ny RDS** — sikta på lokal Postgres - **Ingen ny ElastiCache** — Redis kör lokalt på server-2 (:6379) - **Inga nya Load Balancers** — nginx på server-2 är ingångspunkten - Deploy-flöde: git push → qz-webhook (port 9100) → deploy.sh → systemctl restart - CI: ci-runner (t3.medium) är OK för byggen, ingenting mer --- ## DEPLOY-FLÖDE (mål — enkelt och reproducerbart) ``` Johan pushar kod till Gitea │ ▼ qz-webhook (:9100) tar emot webhook │ ▼ /home/bernt/qz-ci/deploy.sh • git pull • npm ci (om node) • cargo build --release (om rust) • systemctl restart quixzoom-api │ ▼ nginx serverar trafik → ny kod live ``` Ingen Docker. Ingen K8s. Ingen pipeline-overhead. --- ## NÄSTA STEG (prioriterat) 1. **Flytta quixzoom-api till systemctl** — löser 90-kraschar-problemet 2. **Ta bort /api/missions/ och /api/regulatory/ från nginx** tills de finns 3. **Fixa www.quixzoom.com index-fil** 4. **Stoppa server-3, graviton-workers** — omedelbar besparing 5. **Rensa orphaned Elastic IPs** 6. **Säkerhetsproblem: credentials ur index.mjs** — separat åtgärd