166 lines
6.0 KiB
Markdown
166 lines
6.0 KiB
Markdown
|
|
# 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
|