# Runbook: Deploy — 0pt > Mål: sätta 0pt.app på SIAX-flottan (Coolify) och avveckla Vercel i ordning. > Status 2026-08-10: `siax.config.json` deklarerar `target: coolify`; ingen > Coolify-app provisionerad; live-instansen körs fortfarande på Vercel. ## 1. Förutsättningar (blockerare för cutover) - [ ] Coolify-app provisionerad i `cloud.siax.io` (build_pack: dockerfile, repo `git.siax.io/sax3l/0pt`, gren `main`). - [ ] `COOLIFY_APP_ID` (appens UUID) ifylld i `.gitea/workflows/cd.yml`. - [ ] `COOLIFY_TOKEN`-secret satt på repot (Gitea → Settings → Actions → Secrets). - [ ] Env-secrets inlagda i Coolify-appen från Infisical-projektet `0pt` (se backup/restore + incident runbooks). - [ ] DNS-cutover planerad: `0pt.app` → Coolify-appens ingress (eller Caddy). ## 1b. Signerad-artefakt-grind (tillagd 2026-09-14, samma mönster som cl0ud/st0re/h0st) `.gitea/workflows/release.yml` (nytt) bygger, SBOM:ar (syft), signerar (cosign) och evidensbokför varje push till `main`, och pushar till `git.cloud.siax.io/sax3l/0pt:sha-<12>`. `cd.yml`s `deploy`-jobb har nu ett extra steg (efter guard-steget i punkt 1 ovan) som kräver att exakt denna commits avbildning finns i registret och att dess cosign-signatur verifierar (mot committad `cosign.pub`) innan Coolify överhuvudtaget anropas. Detta är byggt FÖRE Coolify-appen finns (se blockerarna i punkt 1) — så att grinden redan är på plats den dag appen provisioneras, i stället för att bli ett separat uppföljningsarbete. Samma ärliga begränsning som cl0ud/st0re/ h0st: när appen väl provisioneras som `dockerfile` build pack (så som `siax.config.json` föreskriver) kör Coolify sin EGEN oberoende `docker build` från git-källan, inte den signerade avbildningen — `/api/v1/deploy` saknar digest-parameter helt. Sann digest-pinning skulle kräva att appen provisioneras som Coolifys separata `dockerimage`-resurstyp i stället, ett beslut som inte är fattat än. Se `.gitea/workflows/cd.yml`s "SIGNED-ARTIFACT GATE"-kommentar för den fullständiga skrivningen. **Inte satt på `sax3l/0pt` ännu:** repo-secrets `REGISTRY_USER`, `REGISTRY_TOKEN`, `COSIGN_PRIVATE_KEY`, `COSIGN_PASSWORD`, `SIAX_CI_TOKEN` — `release.yml` fail-closed:ar på sin första körning tills dessa finns. ## 2. Deploy (när appen finns) 1. Push till `main` → `.gitea/workflows/cd.yml` POSTar till `https://cloud.siax.io/api/v1/deploy?uuid=$COOLIFY_APP_ID&force=false`, efter att den signerade-artefakt-grinden i punkt 1b gått grön. 2. Följ run i Gitea Actions; verifiera att den slutar grön. 3. Verifiera hälsa: `curl https://0pt.app/api/health` → `ok:true` och `db: configured` (när Postgres kopplats in). ## 3. Manuell redeploy (nöd) ```bash curl -fsS -X POST "https://cloud.siax.io/api/v1/deploy?uuid=&force=true" \ -H "Authorization: Bearer $COOLIFY_TOKEN" ``` ## 4. Vercel-avveckling (EFFER att Coolify kör stabilt) 1. Verifiera att ingen verklig trafik/data ligger bakom (2026-08-10: `/api/health` visar `db/queue: not_configured` — marknads-/dev-läge). 2. Peka DNS om till Coolify. 3. Behåll Vercel-projektet tills certifierad paritet (katalog, orderflöde, betalningar). 4. Avveckla först därefter.