Files
boc/intelligence/2026-06-14-quixzoom-clean-architecture.md
T

166 lines
6.0 KiB
Markdown
Raw Normal View History

# 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