9.8 KiB
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)
- 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>. - Ä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 ALDRIGbrand.config.json. - Kör aldrig destruktiva kommandon (
DROP DATABASE,rm -rfutanför temp,git push,git reset). Skriptet hanterar allt som behövs. - 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. - Produktion: kör ALDRIG produktionsläge utan att människan uttryckligen
bekräftat att
.envinnehåller riktiga produktionsvärden.
FÖRUTSÄTTNINGAR (kontrollera först, installera vid behov)
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
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):
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)
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)
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)
- Grind 2 röd, ingen databas svarar: starta tjänsterna – nativt
(
sudo service postgresql start; sudo service redis-server startpå WSL, eller systemd-motsvarigheter) ELLER starta Docker-daemonen (sudo systemctl start docker). Kör om skriptet. Bygg aldrig shims. - Grind 2 röd, port 5432 upptagen: en annan Postgres kör redan – sätt
DATABASE_URLi.envtill den, kör om. - Grind 3 röd: kör
pnpm typecheckochpnpm testseparat, citera de FÖRSTA 20 felraderna i rapporten. ÄNDRA INTE KOD – rapportera. (Testerna är tidszonsoberoende – verifierade under Stockholm/Auckland/Los Angeles – så sätt ALDRIG TZ som workaround.) - Grind 6 röd: citera
tail -30 logs/api.log. Vanligast: felDATABASE_URL/REDIS_URLi.env– rätta värdet, kör om skriptet. - Port 4000 upptagen:
pkill -f "apps/api/dist"och kör om skriptet. - 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:
.envifylld 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.- Databasen skapad via
infrastructure/deployment/create-database.sql(som master).
Sedan:
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)