Server:
- serverar byggd web-frontend statiskt + SPA-fallback (WEB_DIST)
- host-mountad persistent katalog via DATA_DIR (/srv/docker/agent-helm -> /app/data),
förberedd för framtida db/auth enligt övriga appars konvention
- esbuild-bundle -> dist/server.cjs (en fil, inga node_modules i runtime)
Web:
- WS-URL defaultar till samma origin i prod (wss://rcai.brasse-pc.eu), localhost i dev
Deploy-artefakter:
- Dockerfile: multi-stage, bygger web + bundlar server; --filter utesluter daemon
(ingen node-pty-kompilering); kör som uid 1000 (= brasse på host)
- .gitea/workflows/build.yaml: push master -> bygg arm64 -> push localhost:5000
- deploy/act-runner.{compose,config}.yaml: Gitea Actions-runner i Docker (docker.sock,
job-containrar får värdens docker for build/push)
- deploy/agent-helm.compose.yaml: Dockge-stack (srv_default, expose 8787, data-mount,
x-dockge.urls)
- deploy/DEPLOY.md: full runbook (runner, bygge, stack, NPM, uppdatering, felsökning)
Verifierat lokalt: typecheck rent, server-bundle serverar UI+health+assets+SPA-fallback,
data-dir skapas. Docker-bygget validerat så långt daemonen är nere (filter bekräftat).
5.5 KiB
Deploy: agent-helm på Pi5 via Gitea Actions → registry → Dockge → NPM
Flödet: git push master → Gitea Actions-runnern på Pi5 bygger arm64-image:n
→ pushar till localhost:5000/agent-helm-server:latest → Dockge kör stacken →
NPM exponerar https://rcai.brasse-pc.eu. Uppdatering = push + klicka Update i Dockge.
push master ──► gitea-act-runner (bygg arm64) ──► localhost:5000/agent-helm-server:latest
│
Dockge: Update (pull + up -d)
▼
container "agent-helm" :8787 (srv_default)
▲
NPM: rcai.brasse-pc.eu ─┘ (Websockets ON, TLS)
Förutsättningar som redan är på plats: DNS rcai.brasse-pc.eu → 155.4.72.51 (✓),
srv_default-nätet, docker-registry och npm körs (✓). Gitea 1.24 har Actions
påslaget som default.
Steg 1 — Registrera Gitea Actions-runnern (engång)
-
Hämta registrerings-token i Gitea:
Site Administration → Actions → Runners → Create new runner→ kopiera token. (Eller repo-nivå:brasse/agent-helm → Settings → Actions → Runners.) -
Skapa stacken i Dockge (
dockge.brasse-pc.eu):- Ny stack, namn
act-runner. - Klistra in
deploy/act-runner.compose.yaml. - Lägg
deploy/act-runner.config.yamlsom filenconfig.yamli stacken (Dockge låter dig skapa extra filer i stack-mappen, dvs/srv/dockge-staks/act-runner/config.yaml). - I stackens env:
GITEA_RUNNER_REGISTRATION_TOKEN=<din-token>. - Deploy.
- Ny stack, namn
-
Verifiera: i Gitea
Site Administration → Actions → Runnersskapi5-docker-runnerdyka upp som Idle. Loggen:docker logs gitea-act-runner.
Runnern monterar värdens
docker.sockoch bygger med Pi5:ans egen Docker → arm64 nativt, ochlocalhost:5000(registryn) trustas automatiskt.
Steg 2 — Första bygget
.gitea/workflows/build.yaml triggas på push till master/main. Trigga det:
- Pusha en commit till
master, eller - Gitea repo →
Actions→ välj workflowen →Run workflow(manuell dispatch).
Följ körningen under repo:ts Actions-flik. När den är grön finns
localhost:5000/agent-helm-server:latest i registryn.
Snabbkoll (på Pi5, eller via claude-docker):
curl -s http://localhost:5000/v2/agent-helm-server/tags/list
# -> {"name":"agent-helm-server","tags":["latest","<sha>"]}
Steg 3 — Kör stacken i Dockge
- Skapa host-katalogen för config/data (som
brasse, uid 1000):mkdir -p /srv/docker/agent-helmDen bind-mountas till/app/datai containern (där framtida db/auth hamnar); containern kör som uid 1000 =brasseså filerna blir korrekt ägda. - Ny stack i Dockge, namn
agent-helm. - Klistra in
deploy/agent-helm.compose.yaml. - I stackens env:
AGENT_HELM_TOKEN=<lång-slumpad-hemlighet>(generera t.ex.openssl rand -hex 32). - Deploy. Kolla i Dockge att containern
agent-helmär running.
Steg 4 — NPM proxy host (manuellt i NPM-UI:t)
I Proxy.brasse-pc.eu → Proxy Hosts → Add Proxy Host:
| Fält | Värde |
|---|---|
| Domain Names | rcai.brasse-pc.eu |
| Scheme | http |
| Forward Hostname | agent-helm |
| Forward Port | 8787 |
| Websockets Support | PÅ (viktigt — WS-kanalen) |
| Block Common Exploits | valfritt |
Under SSL: Request a new SSL Certificate (Let's Encrypt) + Force SSL + HTTP/2.
Spara. Öppna https://rcai.brasse-pc.eu → logga in med AGENT_HELM_TOKEN.
Steg 5 — Anslut en daemon (annars finns inga sessioner)
Servern är bara control-plane. En daemon kör agenten och ansluter till servern. Kör den var du vill (workstation, eller som egen container senare):
# på workstationen, i agent-helm-repot
AGENT_HELM_TOKEN=<samma-token> \
SERVER_URL=wss://rcai.brasse-pc.eu \
AGENT_CMD=gemini \
pnpm dev:daemon
Daemonen dyker upp som en session i web-UI:t. (Kräver att NPM:s Websockets är på.)
Uppdatera till senaste
git push master→ runnern bygger + pushar:latest.- Dockge → stacken
agent-helm→ Update (kördocker compose pull && up -d).
Det var det — senaste image:n körs.
Felsökning
| Symptom | Trolig orsak / åtgärd |
|---|---|
| Runnern syns inte i Gitea | Fel/förbrukad token. Skapa ny, uppdatera env, redeploy act-runner. |
Workflow fastnar på actions/checkout |
Runnern når inte github för att hämta action:en, eller inte gitea-d:3000. Kolla att runnern är på srv_default. |
docker: command not found i jobbet |
Fel job-image. Labeln ska peka på catthehacker/ubuntu:act-latest. |
push nekas / http: server gave HTTP response to HTTPS client |
Pusha till localhost:5000 (inte 192.168.0.19:5000) från Pi-runnern — localhost trustas som insecure automatiskt. |
rcai ger 502 |
agent-helm-containern nere, eller fel forward-namn/port i NPM. |
| WS ansluter inte (UI loggar in men sessioner laddar ej) | Websockets Support av i NPM-hosten. Slå på. |
| Bygget kompilerar node-pty och failar | Ska inte hända — Dockerfilen filtrerar bort daemon. Om det sker: kontrollera --filter-raderna. |