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

9.8 KiB
Raw Blame History

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)

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)

  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å 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:

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)