- Omorganiser docs/: konsepter, features, infra og proposals i egne mapper - Ny docs/erfaringer/ med lærdommer fra chat-implementering (Svelte 5, SpacetimeDB, adapter-mønster) - Oppdater ARCHITECTURE.md: Lag 1 status, ny §10 Erfaringslogg, SpacetimeDB i lokal dev - Oppdater synkronisering.md med implementeringsstatus og designvalg - Oppdater lokal.md med SpacetimeDB og AI Gateway - Utvid PG-skjema med channels, messages, media_files, message_revisions - Legg til seed_dev.sql, migration_safety.md, .env.example - Nye feature-specs: chat, kanban, whiteboard, live_ai, lydmeldinger m.fl. - Nye konsept-specs: studioet, møterommet, redaksjonen, den asynkrone gjesten m.fl. - SpacetimeDB og AI Gateway i docker-compose.dev.yml - collect-docs.sh inkluderer erfaringer/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
154 lines
5 KiB
Markdown
154 lines
5 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
# 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):
|
|
- **PostgreSQL** — `127.0.0.1:5432` (kodeutvikling, migrasjoner)
|
|
- **Redis** — `127.0.0.1:6379`
|
|
- **SpacetimeDB** — `127.0.0.1:3000` (sanntidsbuffer for chat, kanban m.m.)
|
|
- **AI Gateway (LiteLLM)** — `127.0.0.1:4000` (AI-ruter for Gemini, Claude, etc.)
|
|
- **Caddy** — `127.0.0.1:80/443` (lokal HTTPS for WebRTC)
|
|
- **faster-whisper** — `127.0.0.1:8000` (transkripsjon-eksperimentering)
|
|
|
|
## 5.1 SpacetimeDB-modul (valgfritt — kun for sanntidschat)
|
|
|
|
Hvis du vil teste sanntidschat via SpacetimeDB (i stedet for PG-polling):
|
|
|
|
```bash
|
|
# Installer SpacetimeDB CLI
|
|
curl -sSf https://install.spacetimedb.com | bash
|
|
|
|
# Bygg og publiser Rust-modulen mot lokal SpacetimeDB
|
|
cd spacetimedb
|
|
spacetime publish sidelinja-realtime --server http://localhost:3000
|
|
|
|
# Legg til env-variabel for SvelteKit (web/.env)
|
|
echo "VITE_SPACETIMEDB_URL=ws://localhost:3000" > web/.env
|
|
```
|
|
|
|
Uten `VITE_SPACETIMEDB_URL` faller chatten automatisk tilbake til ren PG-polling — SpacetimeDB er ikke påkrevd for utvikling.
|
|
|
|
## 6. Utviklingsflyt
|
|
|
|
### Kode (daglig)
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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 |
|
|
| SpacetimeDB | Lokal, modul publiseres manuelt | Docker container, modul deployes via CI |
|
|
| Whisper | For eksperimentering | Produksjonstranskripsjon |
|
|
| AI Gateway | For prompt-testing | Produksjonsruting |
|