Files
Cibello-app/OPENCLAW-DEPLOY-PROMPT.md
2026-08-05 19:21:11 +07:00

187 lines
9.8 KiB
Markdown
Raw Permalink 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.
# OPENCLAW-PROMPT: Bygg & deploya matplattformen
> Kopiera ALLT nedanför linjen och klistra in som uppdrag till OpenClaw-agenten.
> Zip-arkivet med källkoden ska finnas på servern (eller ge agenten nedladdningsvägen).
---
## UPPDRAG
Du ska bygga och driftsätta en komplett applikationsplattform (API + worker +
adminpanel, PostgreSQL + Redis) från ett källkodsarkiv. Arbetet är förberett så
att ETT skript gör hela jobbet med inbyggda verifieringsgrindar. Din uppgift är
att köra det disciplinerat, verifiera varje grind och rapportera exakt utfall.
## HÅRDA REGLER (bryt aldrig mot dessa)
1. **Skriv aldrig ut hemligheter** (innehåll i `.env`, tokens, lösenord) i din
rapport, i loggar du citerar eller i kommandohistorik du visar. Referera dem
som `<REDACTED>`.
2. **Ändra ingen kod.** Om något failar: samla felet, följ felsökningslistan
nedan, och rapportera. Du får ändra `.env`-VÄRDEN enligt instruktion, aldrig
källkod. Rör ALDRIG `brand.config.json`.
3. **Kör aldrig destruktiva kommandon** (`DROP DATABASE`, `rm -rf` utanför
temp, `git push`, `git reset`). Skriptet hanterar allt som behövs.
4. **Avbryt och rapportera** i stället för att improvisera om en grind är röd
efter felsökningslistan. En halvfärdig deploy lämnas ALDRIG igång: kör då
`pkill -f "apps/api/dist" ; pkill -f "apps/worker/dist"` och rapportera.
5. **Produktion**: kör ALDRIG produktionsläge utan att människan uttryckligen
bekräftat att `.env` innehåller riktiga produktionsvärden.
## FÖRUTSÄTTNINGAR (kontrollera först, installera vid behov)
```bash
node --version # >= 22 (installera: https://nodejs.org eller nvm)
corepack enable && corepack prepare pnpm@10 --activate
pnpm --version # >= 10
docker --version # VALFRITT behövs INTE om Postgres 16 + Redis 7 redan kör
```
**Docker är valfritt.** Skriptet använder Docker enbart som reservstart av
Postgres/Redis i staging. Kör tjänsterna redan nativt (t.ex. WSL med
`sudo service postgresql start` och `sudo service redis-server start`, systemd,
eller en molndatabas) passerar Grind 0 och 2 utan Docker installera inget och
skapa inga shims. Grind 2 avgör på faktisk nåbarhet.
## STEG 1 Packa upp och gå in i repot
```bash
unzip -q plattform-*.zip -d ~/app-platform && cd ~/app-platform
ls brand.config.json infrastructure/deployment/first-deploy.sh || echo "FEL: fel arkiv"
```
## VAD ZIPEN INNEHÅLLER (komplett inget mer behövs utom dina nycklar)
All källkod (API, worker, adminpanel, mobilapp, 13 paket), databas-migrationer
och seed (101 ingredienser, 22 recept, 12 språk), deploy-skriptet med grindar,
AI-utvärderingssviten, alla runbooks (`docs/21-lanseringsplan.md`,
`docs/25-testguide.md`, `docs/namnbyte.md`). Det ENDA som inte ligger i zipen
är hemligheter/nycklar de fylls i nedan (avsiktligt: hemligheter checkas
aldrig in).
## PÅ RIKTIGT FRÅN START (rekommenderat inga mockar)
Plattformen har tre externa integrationer. Ange människans värden som
miljövariabler vid FÖRSTA körningen så skrivs de in i `.env` och allt kör
äkta från start ingen mockdata:
| Integration | Variabler | Var värdena kommer ifrån |
| ----------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| AAMOS (AI) | `AAMOS_API_URL`, `AAMOS_API_KEY` | Er egen AAMOS-plattform |
| E-post | `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS`, `MAIL_FROM` | Valfri SMTP-leverantör (SES/Postmark/Resend/Brevo/egen server) transporten är leverantörsoberoende och verifierad med riktig rundtur |
| Fillagring | `S3_BUCKET`, `S3_REGION`, ev. `S3_ENDPOINT` + `S3_ACCESS_KEY_ID`/`S3_SECRET_ACCESS_KEY` | AWS S3 eller S3-kompatibel (MinIO/R2/Hetzner). Tomma nycklar = IAM-roll. Verifierad med äkta presign→PUT→GET-rundtur |
Exempel (allt äkta, en rad):
```bash
AAMOS_API_URL=https://aamos.er-doman.se AAMOS_API_KEY=<REDACTED> \
SMTP_HOST=smtp.er-leverantor.se SMTP_USER=<REDACTED> SMTP_PASS=<REDACTED> MAIL_FROM=noreply@er-doman.se \
S3_BUCKET=er-staging-bucket S3_REGION=eu-north-1 \
DEPLOY_MODE=staging REQUIRE_REAL=1 ./infrastructure/deployment/first-deploy.sh
```
`REQUIRE_REAL=1` gör äktheten till en GRIND: deployen UNDERKÄNNS med exakt
lista över vad som saknas om någon integration fortfarande kör mock.
Skriptets slututskrift visar alltid INTEGRATIONSSTATUS (RIKTIG/mock per rad)
citera den i rapporten. Utelämnas värdena faller staging tillbaka till mock
(fungerar, men människan har bett om äkta drift fråga hellre efter värdena).
## STEG 2 Kör första-deployen (STAGING är default och säkert)
```bash
DEPLOY_MODE=staging ./infrastructure/deployment/first-deploy.sh
```
Skriptet är idempotent (säkert att köra om) och går igenom 8 grindar:
| Grind | Vad | Förväntat i utskrift |
| ----- | ---------------------------------------------------------------------------- | ---------------------- |
| 0 | node/pnpm (docker valfritt noteras bara) | `GRIND 0 OK` |
| 1 | .env (skapas med genererade hemligheter i staging) | `GRIND 1 OK` |
| 2 | Postgres + Redis nåbara (Docker endast som reservstart i staging) | `GRIND 2 OK` |
| 3 | Varumärkesvakt + typecheck + 100+ tester + build | `GRIND 3 OK` |
| 4 | Databasmigrationer (+ seed i staging: 101 ingredienser, 22 recept, 12 språk) | `GRIND 4 OK` |
| 5 | AI-utvärderingssvit: 6 fall, 30 kontroller | `GRIND 5 OK … GODKÄND` |
| 6 | API + worker startar; `/healthz` och `/readyz` svarar | `GRIND 6 OK` |
| 7 | Funktionsrök: registrera konto → logga in → läsa recept | `GRIND 7 OK` |
Slutraden ska vara: `ALLA GRINDAR GRÖNA staging är uppe.`
## STEG 3 Egen verifiering (lita aldrig blint på skriptet)
```bash
curl -fsS http://127.0.0.1:4000/healthz # {"ok":true,...}
curl -fsS http://127.0.0.1:4000/readyz # {"ok":true,...}
tail -5 logs/api.log # inga rader med "level":50
tail -5 logs/worker.log # innehåller "Worker igång"
```
Adminpanelen (valfritt att exponera): statiska filer i `apps/admin/dist/`
servera t.ex. `cd apps/admin/dist && python3 -m http.server 5173`.
## STEG 4 Rapportera
Rapportera EXAKT detta format:
```
DEPLOY-RAPPORT
Läge: staging|production
Alla grindar: GRÖNA / RÖD på grind N
healthz: <svar>
readyz: <svar>
Tester: <antal ur skriptets utskrift>
Eval-svit: GODKÄND/UNDERKÄND
Integrationer: AAMOS=RIKTIG/mock, E-post=RIKTIG/log, Fillagring=RIKTIG/mock
Avvikelser: <inga | lista>
Kvarstående: <t.ex. "reverse proxy + TLS ej konfigurerat">
```
## FELSÖKNINGSLISTA (i ordning, max ett försök per punkt)
1. **Grind 2 röd, ingen databas svarar**: starta tjänsterna nativt
(`sudo service postgresql start; sudo service redis-server start` på WSL,
eller systemd-motsvarigheter) ELLER starta Docker-daemonen
(`sudo systemctl start docker`). Kör om skriptet. Bygg aldrig shims.
2. **Grind 2 röd, port 5432 upptagen**: en annan Postgres kör redan sätt
`DATABASE_URL` i `.env` till den, kör om.
3. **Grind 3 röd**: kör `pnpm typecheck` och `pnpm test` separat, citera de
FÖRSTA 20 felraderna i rapporten. ÄNDRA INTE KOD rapportera. (Testerna är
tidszonsoberoende verifierade under Stockholm/Auckland/Los Angeles
sätt ALDRIG TZ som workaround.)
4. **Grind 6 röd**: citera `tail -30 logs/api.log`. Vanligast: fel
`DATABASE_URL`/`REDIS_URL` i `.env` rätta värdet, kör om skriptet.
5. **Port 4000 upptagen**: `pkill -f "apps/api/dist"` och kör om skriptet.
6. Allt annat: avbryt enligt hård regel 4.
## PRODUKTION (körs ENDAST efter explicit mänskligt godkännande)
Skillnader mot staging människan ska ha gjort detta FÖRE ditt körande:
1. `.env` ifylld med riktiga värden (databas/RDS, riktiga hemligheter,
`AAMOS_MODE=http` + URL/nyckel, ev. `EMAIL_MODE=smtp`). Skriptet vägrar
dev-värden och vägrar starta databaser i produktion.
2. Databasen skapad via `infrastructure/deployment/create-database.sql` (som master).
Sedan:
```bash
DEPLOY_MODE=production ./infrastructure/deployment/first-deploy.sh
```
Skriptet tar automatiskt backup före migrationer och seedar ALDRIG i produktion.
Efteråt: peka reverse proxy med TLS mot `127.0.0.1:4000` och kör STEG 3 igen
utifrån (`curl https://<api-domän>/healthz`).
**Rollback** om produktionen är trasig efter deploy: stoppa processerna
(`pkill -f "apps/api/dist"; pkill -f "apps/worker/dist"`), återställ databasen
från senaste dumpen i `backups/` med
`pg_restore --clean --dbname="<DATABASE_URL>" backups/<senaste>.dump`,
starta föregående kända version. Rapportera att rollback skett.
## VAD SOM MEDVETET INTE INGÅR (rapportera som "Kvarstående", försök inte lösa)
- Reverse proxy/TLS-konfiguration (miljöspecifik)
- Mobilappens butiksbyggen (kräver EAS + butikskonton)
- E-postleverantör i produktion (EMAIL_MODE=smtp implementeras vid leverantörsval)
- Namnbyte (styrs av `brand.config.json` rörs aldrig av dig)