Ersätter den delade AGENT_HELM_TOKEN med en riktig auth-modell: - Webben loggar in med lokala konton ELLER OIDC (Authentik/Keycloak/…), valt per server. Inloggning ger en HMAC-signerad cookie; WS autentiseras via cookien. - Klienten (daemon) kopplas via device-flödet (RFC 8628-likt): `agent-helm connect` skriver ut en URL, du loggar in + godkänner i webben, och får ett klient-token som identifierar din användare. Token sparas i ~/.config/agent-helm/. - Sessioner är per användare (web ser bara sina egna; admin ser alla). Flera klient-instanser = flera parallella sessioner; --new tvingar ny, annars resume. - Identitet är utbytbar (lokal/OIDC) men device-flödet + sessionerna är alltid agent-helms egna → funkar för vem som helst som hostar detta, med eller utan IdP. - Bootstrap-admin via env (engångs) eller first-run-setup i UI:t. Klient-creds kan listas/återkallas; minimal admin-UI (skapa användare, konfigurera OIDC). Nya filer: server/store.ts (JSON-store, scrypt, cookies), server/oidc.ts (auth-code+PKCE), web/lib/api.ts. Verifierat end-to-end lokalt (login → device → approve → daemon-WS → web ser sessionen; web utan cookie nekas). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U68YyHsxU91ecsen84WQV4
50 lines
2.2 KiB
YAML
50 lines
2.2 KiB
YAML
# agent-helm control-plane + web-UI.
|
|
# Image byggs av Gitea Actions och hämtas från den lokala registryn.
|
|
# Uppdatera till senaste: Dockge -> denna stack -> "Update" (pull + recreate).
|
|
#
|
|
# Lägg i /srv/dockge-staks/agent-helm/ och starta i Dockge.
|
|
# Sätt hemligheter i stackens .env (Dockge: env-flik) — INTE i denna fil:
|
|
# AGENT_HELM_ADMIN_PASSWORD=<starkt-lösen, engångs vid första start>
|
|
# AGENT_HELM_SECRET=<lång slump, cookie-HMAC>
|
|
# (om OIDC) AGENT_HELM_OIDC_CLIENT_SECRET=<…>
|
|
#
|
|
# Auth: ingen delad token. Webben loggar in (lokalt konto eller OIDC); klienten
|
|
# kopplas via device-flödet. Ta bort AGENT_HELM_ADMIN_* efter första inloggning.
|
|
x-dockge:
|
|
urls:
|
|
- https://rcai.brasse-pc.eu
|
|
|
|
services:
|
|
agent-helm:
|
|
image: localhost:5000/agent-helm-server:latest
|
|
container_name: agent-helm
|
|
restart: unless-stopped
|
|
expose:
|
|
- "8787" # NPM binder publikt; ingen host-port behövs
|
|
environment:
|
|
PORT: "8787"
|
|
DATA_DIR: /app/data
|
|
AGENT_HELM_PUBLIC_URL: https://rcai.brasse-pc.eu
|
|
AGENT_HELM_AUTH: ${AGENT_HELM_AUTH:-local} # local | oidc
|
|
AGENT_HELM_SECRET: ${AGENT_HELM_SECRET:-} # cookie-HMAC (sätts i .env)
|
|
# Bootstrap-admin (engångs): seedar första kontot. Ta bort efter inloggning.
|
|
AGENT_HELM_ADMIN_USER: ${AGENT_HELM_ADMIN_USER:-}
|
|
AGENT_HELM_ADMIN_PASSWORD: ${AGENT_HELM_ADMIN_PASSWORD:-}
|
|
# OIDC (om AGENT_HELM_AUTH=oidc) — kan även sättas i admin-UI:t
|
|
AGENT_HELM_OIDC_ISSUER: ${AGENT_HELM_OIDC_ISSUER:-}
|
|
AGENT_HELM_OIDC_CLIENT_ID: ${AGENT_HELM_OIDC_CLIENT_ID:-}
|
|
AGENT_HELM_OIDC_CLIENT_SECRET: ${AGENT_HELM_OIDC_CLIENT_SECRET:-}
|
|
AGENT_HELM_OIDC_LABEL: ${AGENT_HELM_OIDC_LABEL:-Logga in med Authentik}
|
|
AGENT_HELM_OIDC_GROUP: ${AGENT_HELM_OIDC_GROUP:-}
|
|
volumes:
|
|
# Host-mountad config/data enligt övriga appars konvention (/srv/docker/<stack>).
|
|
# Containern kör som uid 1000 (node) = brasse på host, så filer blir brasse-ägda.
|
|
# Skapa katalogen först: mkdir -p /srv/docker/agent-helm
|
|
- /srv/docker/agent-helm:/app/data
|
|
networks:
|
|
- srv_default # så NPM kan nå containern på namn
|
|
|
|
networks:
|
|
srv_default:
|
|
external: true
|