server/docs/setup/lokal.md
vegard 4b56560bf9 Lokalt utviklingsmiljø, Whisper-benchmark, AI Gateway og repostruktur
- Sett opp docker-compose.dev.yml med PostgreSQL, Redis, Caddy og Whisper
- Benchmarket faster-whisper (small/medium/large-v3) med norsk tale
- Besluttet medium + initial_prompt som standard, SRT som master-format
- Ny feature-spec: AI Gateway (LiteLLM) med BYOK og Promptfoo-testing
- Definert dataklassifisering (kritisk/gjenskapbar/avledet/flyktig)
- Konkretisert backup-strategi med pg_dump, rsync og restore-prosedyre
- Splittet repos: sidelinja/server (kode) + sidelinja/sidelinja (innhold)
- Oppdatert lokal.md: utviklingsmiljø for kode, ikke prod-replika
- Dokumentert transkripsjonspipeline: Whisper SRT → Git → PG (avledet)
- Live AI-assistent: small-modell, flyktig logg med 30d TTL

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 14:51:15 +01:00

4.1 KiB

Oppsett: Lokalt Utviklingsmiljø (WSL2)

Filsti: docs/setup/lokal.md

Det lokale miljøet er et utviklingsmiljø for kode, ikke en staging-replika av prod. Vi tester kode her og infrastruktur-config direkte i prod.

Hva som gjøres hvor

Aktivitet Hvor Hvorfor
Skrive/teste kode (Rust, SvelteKit, TypeScript) Lokalt Rask iterasjon, HMR, ingen risiko
PG-skjema og migrasjoner Lokalt først, deploy til prod Test mot lokal PG, push migrasjoner
Whisper/AI-eksperimentering Lokalt Tung CPU-bruk, eksperimentelt
Docker-compose endringer Direkte i prod Miljøene er for forskjellige til å teste lokalt
Caddy/Authentik/Forgejo config Direkte i prod Avhenger av domener, sertifikater, SSO
Prompt-testing (Promptfoo) Lokalt via AI Gateway Systematisk testing for du deployer prompts

0. Forutsetninger

  • Windows 11 med WSL2 (Ubuntu 24.04 LTS)
  • Docker Desktop for Windows med WSL2-integrasjon aktivert
  • Node.js 20+ (via nvm i WSL2)
  • Rust toolchain (via rustup i WSL2)
  • Git konfigurert med SSH-nøkkel mot produksjons-Forgejo

1. Installer verktøy i WSL2

# Node.js via nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

2. Klon prosjektet

mkdir -p ~/server
cd ~/server
git clone ssh://git@git.sidelinja.org:222/sidelinja/server.git .
# Eller om repo allerede finnes lokalt, sett opp remote:
git remote add forgejo ssh://git@git.sidelinja.org:222/sidelinja/server.git

3. Lokal mappestruktur

# Docker-volumer (flyktige, gitignored)
mkdir -p .docker-data/{postgres,redis,caddy,spacetimedb}
mkdir -p .docker-data/{media/podcast,logs/caddy,whisper-models}

4. Miljøvariabler (.env.local)

cat > .env.local << 'EOF'
# === Lokalt utviklingsmiljo ===
DOMAIN=localhost
COMPOSE_PROJECT_NAME=sidelinja-dev

# === PostgreSQL ===
POSTGRES_USER=sidelinja
POSTGRES_PASSWORD=localdev
POSTGRES_DB=sidelinja

# === AI Gateway (sett dine egne nokler) ===
LITELLM_MASTER_KEY=localdev
GEMINI_API_KEY=
ANTHROPIC_API_KEY=
OPENROUTER_API_KEY=
EOF

5. Start lokale tjenester

# Start infrastruktur
docker compose -f docker-compose.dev.yml --env-file .env.local up -d

# Verifiser
docker compose -f docker-compose.dev.yml --env-file .env.local ps
docker compose -f docker-compose.dev.yml --env-file .env.local exec postgres pg_isready

Lokale tjenester (docker-compose.dev.yml):

  • PostgreSQL127.0.0.1:5432 (kodeutvikling, migrasjoner)
  • Redis127.0.0.1:6379
  • Caddy127.0.0.1:80/443 (lokal HTTPS for WebRTC)
  • faster-whisper127.0.0.1:8000 (transkripsjon-eksperimentering)

6. Utviklingsflyt

Kode (daglig)

# 1. Start lokale tjenester (om ikke allerede kjorende)
docker compose -f docker-compose.dev.yml --env-file .env.local up -d

# 2. Start SvelteKit med HMR
cd sveltekit && npm run dev

# 3. Start Rust workers
cd workers && cargo run --bin sidelinja-worker

# 4. Skriv kode, test lokalt

Deploy

# 1. Commit og push
git add <filer>
git commit -m "beskrivelse"
git push forgejo main

# 2. Deploy til prod via SSH
ssh sidelinja@157.180.81.26 "cd /srv/sidelinja && git pull && docker compose up -d --build"

7. Forskjeller fra produksjon (bevisste)

Aspekt Lokalt Produksjon
Formål Kodeutvikling Kjørende tjenester
SvelteKit npm run dev (HMR) Docker container
Porter Localhost-bundet (127.0.0.1) Kun 80/443 via Caddy
HTTPS Self-signed (Caddy local_certs) Let's Encrypt
Forgejo Ikke installert — push til prod Docker container
Authentik Ikke installert — bypass auth lokalt Docker container
DB-data Flyktig (.docker-data/, gitignored) Persistent, backupes daglig
Whisper For eksperimentering Produksjonstranskripsjon
AI Gateway For prompt-testing Produksjonsruting