# 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` - **Caddy** — `127.0.0.1:80/443` (lokal HTTPS for WebRTC) - **faster-whisper** — `127.0.0.1:8000` (transkripsjon-eksperimentering) ## 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 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 |