Oppdater driftsmodell: hybrid native + Docker
Dokumenterer gjeldende modell der egenutviklet kode (maskinrommet, SvelteKit) kjører native via systemd, mens tredjepartstjenester (PG, STDB, Authentik, Caddy, Whisper, LiteLLM) kjører i Docker. - CLAUDE.md: ny driftsmodell-tabell, Claude-agent-seksjon - docs/arkitektur.md: teknologivalg med kjøremodus-kolonne - docs/setup/produksjon.md: maskinrommet native instruksjoner Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1dd48317af
commit
ab91e5396d
3 changed files with 80 additions and 32 deletions
47
CLAUDE.md
47
CLAUDE.md
|
|
@ -73,18 +73,45 @@ CLAUDE.md er eneste startdokument. Alt annet ligger under `docs/`:
|
|||
- **Database/Graf:** PostgreSQL (+Apache AGE ved behov)
|
||||
- **Binærlagring:** CAS (content-addressable store)
|
||||
- **AI:** Claude Code (chat-agent), LiteLLM (AI Gateway), faster-whisper (STT)
|
||||
- **Infra:** Docker Compose, Caddy, Authentik (SSO), systemd
|
||||
- **Infra:** Docker (tredjepart), systemd (egenutviklet), Caddy, Authentik (SSO)
|
||||
|
||||
## Driftsmodell
|
||||
- **Maskinrommet** kjører direkte på hosten som systemd-tjeneste (`maskinrommet.service`),
|
||||
ikke i Docker. Dette gir tilgang til `claude` CLI for agent-chat.
|
||||
Bygges med `cargo build --release`, startes med `sudo systemctl restart maskinrommet`.
|
||||
- **Øvrige tjenester** (PG, STDB, Caddy, Authentik, Whisper, LiteLLM) kjører i Docker.
|
||||
- **Caddy** bruker `host.docker.internal` for å nå maskinrommet på hosten.
|
||||
- **Claude som chat-deltaker:** Agent-node (`d3eebc99-...-a44`) i grafen. Legg Claude
|
||||
til som `member_of` i en kommunikasjonsnode → alle meldinger trigger `agent_respond`-jobb
|
||||
→ maskinrommet kaller `claude -p` → svar skrives tilbake i chatten.
|
||||
## Driftsmodell: hybrid native + Docker
|
||||
Egenutviklet kode kjører **native på hosten** (systemd). Tredjepartstjenester
|
||||
kjører i **Docker**. Prinsipp: Docker for det vi ikke bygger selv, native
|
||||
for det vi har full kontroll over.
|
||||
|
||||
### Native (systemd)
|
||||
| Tjeneste | Beskrivelse | Deploy |
|
||||
|----------|-------------|--------|
|
||||
| **maskinrommet** | Rust API + jobbkø | `cargo build --release` → `sudo systemctl restart maskinrommet` |
|
||||
| **SvelteKit** | Frontend (når klar) | `npm run build` → systemd |
|
||||
|
||||
Maskinrommet kjører native fordi det trenger tilgang til `claude` CLI
|
||||
og hele hosten. Env-filen genereres dynamisk av `scripts/maskinrommet-env.sh`
|
||||
med Docker container-IPs.
|
||||
|
||||
### Docker (docker-compose)
|
||||
| Tjeneste | Begrunnelse |
|
||||
|----------|-------------|
|
||||
| **PostgreSQL** | Versjonsstyring, enkel oppgradering |
|
||||
| **SpacetimeDB** | Eksperimentelt, offisielt image |
|
||||
| **Authentik** | Kompleks stack (server + worker + Redis) |
|
||||
| **Caddy** | Enkel TLS-terminering, kan tas native senere |
|
||||
| **LiteLLM** | Ferdig image, sjelden oppdatering |
|
||||
| **faster-whisper** | Modellhåndtering, ferdig image |
|
||||
|
||||
### Kommunikasjon mellom lagene
|
||||
- Caddy (Docker) → maskinrommet (host): via `host.docker.internal:3100`
|
||||
(`extra_hosts: host-gateway` i docker-compose + iptables-regel)
|
||||
- Maskinrommet (host) → Docker-tjenester: via container-IP
|
||||
(løses dynamisk i `maskinrommet-env.sh`)
|
||||
|
||||
## Claude som chat-deltaker
|
||||
- **Agent-node:** `d3eebc99-9c0b-4ef8-bb6d-6bb9bd380a44` (node_kind: `agent`)
|
||||
- **Trigger:** Melding i kommunikasjonsnode der Claude er `member_of`
|
||||
→ `agent_respond`-jobb → `claude -p` → svar tilbake i chatten
|
||||
- **Kill switch:** `UPDATE agent_identities SET is_active = false WHERE agent_key = 'claude-main'`
|
||||
- **Detaljer:** Se `docs/infra/claude_agent.md`
|
||||
|
||||
## Produksjonsserver
|
||||
- **IP:** 157.180.81.26
|
||||
|
|
|
|||
|
|
@ -150,21 +150,35 @@ Binærdata (lyd, bilde, video) lagret med hash. TTL basert på
|
|||
modalitet, edges og aksesslog. Generert innhold (TTS, thumbnails)
|
||||
er en cache som regenereres on-demand.
|
||||
|
||||
## Driftsmodell: hybrid native + Docker
|
||||
|
||||
Egenutviklet kode kjører **native på hosten** via systemd.
|
||||
Tredjepartstjenester kjører i **Docker**. Prinsipp: Docker for det vi
|
||||
ikke bygger selv, native for det vi har full kontroll over.
|
||||
|
||||
**Native (systemd):** maskinrommet (Rust), SvelteKit (når klar).
|
||||
**Docker:** PostgreSQL, SpacetimeDB, Authentik, Caddy, LiteLLM, faster-whisper.
|
||||
|
||||
Maskinrommet kjører native fordi det trenger tilgang til `claude` CLI
|
||||
og hele vertsmaskinens verktøy. Caddy (Docker) når maskinrommet via
|
||||
`host.docker.internal`.
|
||||
|
||||
## Teknologivalg
|
||||
|
||||
| Rolle | Teknologi | Begrunnelse |
|
||||
|-------|-----------|-------------|
|
||||
| Orkestrator | Rust | Ytelse, typesikkerhet, eier alle skrivinger |
|
||||
| Frontend | SvelteKit | PWA, SSR, tynt lag mot STDB |
|
||||
| Database | PostgreSQL | Persistent backup, pgvector, fulltekstsøk, AGE |
|
||||
| Sanntid | SpacetimeDB | Hele grafen, WebSocket-subscriptions, ~10μs |
|
||||
| Binærlagring | CAS (filsystem) | Enkel, deduplisering, ingen ekstern avhengighet |
|
||||
| AI Gateway | LiteLLM | Multi-provider, BYOK, OpenRouter fallback |
|
||||
| STT | faster-whisper | Lokal, god norsk kvalitet |
|
||||
| TTS | ElevenLabs (→ lokal) | Kommersiell start, lokal når kvaliteten holder |
|
||||
| Auth | Authentik | SSO, OIDC, self-hosted |
|
||||
| Reverse proxy | Caddy | Auto-TLS, enkel config |
|
||||
| Lyd/video | LiveKit | WebRTC, self-hosted |
|
||||
| Rolle | Teknologi | Kjøremodus | Begrunnelse |
|
||||
|-------|-----------|------------|-------------|
|
||||
| Orkestrator | Rust | Native (systemd) | Ytelse, typesikkerhet, eier alle skrivinger, trenger host-tilgang |
|
||||
| Frontend | SvelteKit | Native (systemd) | PWA, SSR, tynt lag mot STDB |
|
||||
| Database | PostgreSQL | Docker | Versjonsstyring, enkel oppgradering |
|
||||
| Sanntid | SpacetimeDB | Docker | Eksperimentelt, offisielt image |
|
||||
| Binærlagring | CAS (filsystem) | Native | Enkel, deduplisering, ingen ekstern avhengighet |
|
||||
| AI Gateway | LiteLLM | Docker | Ferdig image, sjelden oppdatering |
|
||||
| AI Agent | Claude Code CLI | Native | Chat-deltaker, spawnes av maskinrommet |
|
||||
| STT | faster-whisper | Docker | Modellhåndtering, ferdig image |
|
||||
| TTS | ElevenLabs (→ lokal) | — | Kommersiell start, lokal når kvaliteten holder |
|
||||
| Auth | Authentik | Docker | Kompleks stack (server + worker + Redis) |
|
||||
| Reverse proxy | Caddy | Docker | Auto-TLS, kan tas native senere |
|
||||
| Lyd/video | LiveKit | Docker | WebRTC, self-hosted |
|
||||
|
||||
## Traits — samlingsnoder med evner
|
||||
|
||||
|
|
|
|||
|
|
@ -437,20 +437,27 @@ docker compose up -d <tjeneste>
|
|||
|
||||
### Maskinrommet (Rust API)
|
||||
|
||||
Maskinrommet bygges som Docker-image fra `maskinrommet/Dockerfile` og kjører
|
||||
som service i docker-compose. Imaget bygges på serveren (ikke registry):
|
||||
Maskinrommet kjører **native på hosten** som systemd-tjeneste (ikke i Docker).
|
||||
Dette gir tilgang til `claude` CLI for agent-chat og hele hostens verktøy.
|
||||
|
||||
```bash
|
||||
# Bygg image
|
||||
cd /home/vegard/synops/maskinrommet && docker build -t maskinrommet:latest .
|
||||
# Bygg
|
||||
cd /home/vegard/synops/maskinrommet && cargo build --release
|
||||
|
||||
# Start/restart service
|
||||
cd /srv/synops && docker compose up -d maskinrommet
|
||||
# Start/restart
|
||||
sudo systemctl restart maskinrommet
|
||||
|
||||
# Logger
|
||||
sudo journalctl -u maskinrommet -f
|
||||
```
|
||||
|
||||
Maskinrommet kobler til PG og SpacetimeDB via Docker-nettverket `sidelinja-net`
|
||||
(hostname `postgres` og `spacetimedb`). Ved oppstart laster den hele grafen
|
||||
fra PG inn i STDB (warmup). Caddy proxyer `api.sidelinja.org` til port 3100.
|
||||
Env-filen (`/tmp/maskinrommet.env`) genereres automatisk av
|
||||
`scripts/maskinrommet-env.sh` med Docker container-IPs for PG og STDB.
|
||||
Ved oppstart laster maskinrommet hele grafen fra PG inn i STDB (warmup).
|
||||
Caddy (Docker) proxyer `api.sidelinja.org` til `host.docker.internal:3100`.
|
||||
|
||||
Dockerfile (`maskinrommet/Dockerfile`) beholdes for referanse, men brukes
|
||||
ikke i produksjon.
|
||||
|
||||
## 13. Verifisering etter oppsett
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue