From de22ae642a8a5dff9a3a44527fd4531d0155f1a9 Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 25 Jul 2026 06:18:02 +0000 Subject: [PATCH] chore: update docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md via opax-mcp --- docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md | 184 ++++++++++------------------ 1 file changed, 62 insertions(+), 122 deletions(-) diff --git a/docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md b/docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md index 0f4e6f4..1f0778b 100644 --- a/docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md +++ b/docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md @@ -7,7 +7,7 @@ Denne handoffen er det eneste autoritative arbeidsdokumentet for sporet "lokal L --- -## FREMDRIFT – OPPDATERT 2026-07-23 22:14 CEST +## FREMDRIFT – OPPDATERT 2026-07-25 08:15 CEST ### ✅ FASE 0–5 — FERDIG ### ✅ FASE 6 – CPU-optimalisering — FERDIG @@ -18,13 +18,25 @@ Denne handoffen er det eneste autoritative arbeidsdokumentet for sporet "lokal L ### ✅ FASE 6.5 – VM-oppgradering + modellarkitektur — VERIFISERT 2026-07-22 ### ✅ DEV-SNAP UAVHENGIGHET – Verifisert 2026-07-22 19:30 CEST ### ✅ OSVauco arbeidskopi klonet til Gitea-VM — FERDIG 2026-07-22 19:25 CEST +### ✅ git.vauco.no HTTPS — FERDIG 2026-07-25 +### ✅ GITEA_TOKEN rotert — FERDIG 2026-07-25 +### ✅ Google OAuth2 innlogging Gitea — FERDIG 2026-07-25 +### ✅ SIKKERHETSHERDING – Uautoriserte brukere ryddet — FERDIG 2026-07-25 +### ✅ VM Access Scopes – cloud-platform satt — FERDIG 2026-07-25 ### 🟡 FASE 7 – 14B-validering utført, arkitektur justeres — PÅGÅR -### ⏳ git.vauco.no HTTPS — PÅBEGYNT, blokkert av firewall ### ⏳ GPG-SIGNERING – Commits verified — PÅGÅR ### ⏳ FASE 8 – Backup / snapshot-strategi — PLANLAGT --- +## SIKKERHETSHERDING (2026-07-25) +- ✅ Offentlig brukerregistrering i Gitea deaktivert (`DISABLE_REGISTRATION = true`, `ALLOW_ONLY_EXTERNAL_REGISTRATION = true`, `SHOW_REGISTRATION_BUTTON = false`) +- ✅ To uautoriserte brukere (`dev433f2c`, `dev1ba0ac`) deaktivert og deres tokens slettet +- ✅ Eksponert GITEA_TOKEN rotert — nytt token i Secret Manager, opax-mcp redeployet +- ✅ VM Access Scopes oppdatert til `cloud-platform` (VM stoppet/startet 2026-07-25) + +--- + ## DEV-SNAP UAVHENGIGHET – VERIFISERT 2026-07-22 Alle 6 tester grønne: @@ -42,63 +54,18 @@ Alle 6 tester grønne: --- -## git.vauco.no – STATUS OG NESTE STEG +## git.vauco.no – FULLFØRT 2026-07-25 -### Hva er gjort -- ✅ DNS: `git.vauco.no` A-record → `34.67.252.59` satt i Google Cloud DNS -- ✅ nginx installert og kjører på Gitea-VM (port 80 lytter) -- ✅ nginx konfig for `git.vauco.no` → proxy til `localhost:3000` opprettet -- ✅ Firewall-regel `allow-http-https` opprettet i `propane-will-491900-m5` -- ❌ certbot feiler — port 80 ikke nåbar eksternt (timeout) - -### Rotårsak -Firewall-regelen `allow-http-https` (prioritet 1000) blokkeres sannsynligvis av en annen regel med høyere prioritet. VM-taggen er `gitea-server`. - -### Neste steg når du er hjemme - -**Steg 1 — GCP Console eller Cloud Shell:** -Finn blokkerende regel: -```bash -gcloud compute firewall-rules list \ - --project=propane-will-491900-m5 \ - --format="table(name,direction,priority,allowed,denied,targetTags,disabled)" -``` - -**Steg 2 — Lag ny regel med prioritet 500:** -```bash -gcloud compute firewall-rules create allow-gitea-web \ - --project=propane-will-491900-m5 \ - --allow tcp:80,tcp:443 \ - --direction INGRESS \ - --priority=500 \ - --target-tags=gitea-server \ - --network=default \ - --source-ranges=0.0.0.0/0 -``` - -**Steg 3 — Gitea-VM: kjør certbot på nytt:** -```bash -sudo certbot --nginx -d git.vauco.no \ - --non-interactive --agree-tos \ - -m chris.christiansen@vauco.no -``` - -**Steg 4 — Verifiser:** -```bash -curl -s https://git.vauco.no/api/v1/version -``` - -**Steg 5 — Google OAuth2 i Gitea:** -- console.cloud.google.com → Credentials → OAuth 2.0 Client ID -- Redirect URI: `https://git.vauco.no/user/oauth2/google/callback` -- Legg til i Gitea: Site Administration → Authentication Sources → Add → OAuth2 → Google +- ✅ DNS: `git.vauco.no` A-record → `34.67.252.59` +- ✅ nginx installert og konfigurert som proxy til `localhost:3000` +- ✅ Firewall-regel `allow-gitea-web` (prioritet 500) opprettet +- ✅ certbot fullført — HTTPS aktivt +- ✅ Google OAuth2 konfigurert og testet --- ## SIKKERHET – ÅPNE PUNKTER -GITEA_TOKEN: [ROTERT OG FJERNET] -- Roter token i Gitea (localhost:3000 → Settings → Applications) -- Oppdater GITEA_TOKEN i Cloud Run miljøvariabler etter rotasjon +- ✅ GITEA_TOKEN rotert og fjernet fra eksponering — FERDIG 2026-07-25 --- @@ -107,8 +74,8 @@ GITEA_TOKEN: [ROTERT OG FJERNET] Status per 2026-07-25: - Gitea kjører på https://git.vauco.no med HTTPS og riktig ROOTURL. - Offentlig registrering er stengt (DISABLE_REGISTRATION = true, ALLOW_ONLY_EXTERNAL_REGISTRATION = true, SHOW_REGISTRATION_BUTTON = false). -- To uautoriserte brukere (dev433f2c, dev1ba0ac) er deaktivert, deres tokens er slettet, og Gitea svarer fortsatt 200 OK lokalt. -- Ingen av stegene under er gjennomført ennå – de beskriver målbildet for neste iterasjon med lokale modeller og Gemini i VM. +- To uautoriserte brukere (dev433f2c, dev1ba0ac) er deaktivert, deres tokens er slettet. +- Ingen av stegene under er gjennomført ennå – de beskriver målbildet for neste iterasjon. #### 1. Teknisk Gitea-bruker: `automation` @@ -119,12 +86,11 @@ Mål: Plan: - Opprett Gitea-bruker `automation` (ikke admin). - Gi `automation` kun tilgang til de repoene automasjon skal jobbe med (f.eks. OSVauco). -- Bruk CLI/API fra Gitea-VM (Gemini i VM) til: - - Generere ett personal access token for `automation` med begrenset scope (primært repo-API / git). - - Skrive tokenet direkte til Google Cloud Secret Manager (f.eks. secret `gitea-automation-token`). - - Konfigurere Cloud Run / OPAX MCP til å lese tokenet via miljøvariabel (f.eks. `GITEA_TOKEN`). -- Roter og slett gamle tokens (spesielt tidligere GITEATOKEN som var eksponert i chat) via Gitea-API. -- Konfigurer git på Gitea-VM til å bruke `automation` (SSH-nøkkel eller HTTP-token) for push/pull. +- Bruk CLI/API fra Gitea-VM til: + - Generere ett personal access token for `automation` med begrenset scope. + - Skrive tokenet direkte til Google Cloud Secret Manager (secret `gitea-automation-token`). + - Konfigurere Cloud Run / OPAX MCP til å lese tokenet via miljøvariabel (`GITEA_TOKEN`). +- Konfigurer git på Gitea-VM til å bruke `automation` for push/pull. Viktig: - `automation` skal ikke være admin. @@ -134,61 +100,32 @@ Viktig: #### 2. Sentinel-rolle for lokale LLM-modeller (Gitea Security Sentinel) Mål: -- Ha en lettvekts, lokal LLM-modell (Emma / annen) som periodisk opptrer som "cyber security sentinel" for Gitea og tilhørende infrastruktur. +- Ha en lettvekts, lokal LLM-modell som periodisk opptrer som "cyber security sentinel" for Gitea og infrastruktur. - Fange opp mønstre som ligner hendelsen 2026-07-11 (uautoriserte brukere, tokens laget rett etter signup, ukjente repo osv.). Rolle: `sentinel` (kun lesing + rapport) Input: -- Gitea-API: - - Liste over brukere, nye accounts, is_active-flagg. - - Liste over personal access tokens per bruker (antall, navn, opprettelsestid). - - Repo-oversikt (nye repo, eierskap). -- Logger: - - Gitea-app-logg (sign_up, generate-access-token, login, push). - - Nginx-logg (IP-mønstre mot /user/sign_up, /api/v1/users/*, etc.). - - journald for gitea.service. -- Konfig: - - app.ini (service, security, auth sections). - - Firewall-regler (gcloud output). - - Secret Manager metadata (f.eks. hvilke secrets som eksisterer, ikke verdiene). +- Gitea-API: brukerliste, tokens, repo-oversikt +- Logger: gitea-app-logg, nginx-logg, journald +- Konfig: app.ini, firewall-regler, Secret Manager metadata Oppførsel: -- Kjør periodisk (f.eks. hver time eller natt) fra Gitea-VM eller egen planlagt jobb. -- Analyser: - - Nye lokale brukere (ikke OAuth-baserte). - - Nye tokens, spesielt for ikke-kjente brukere. - - Nye repo opprettet av ukjente brukere. - - Uvanlige IP-er / volum på signups eller token-opprettelse. - - Endringer i app.ini som svekker sikkerhet (f.eks. åpnede registreringer, endrede auth-innstillinger). -- Produser en kort rapport i et eget repo, f.eks. `protocols/security/SENTINEL-REPORT-YYYY-MM-DD.md`: - - Oppsummer funn. - - Marker "OK" hvis ingen avvik, ellers beskriv konkrete avvik med tidsstempel. -- Foreta ingen direkte mutasjoner (ingen deaktivering, ingen token-sletting) uten eksplisitt instruks fra overordnet plan eller menneskelig godkjenning. +- Kjør periodisk (hver time eller natt) fra Gitea-VM. +- Produser rapport i `protocols/security/SENTINEL-REPORT-YYYY-MM-DD.md`. +- Foreta ingen direkte mutasjoner uten eksplisitt godkjenning. -Alarmsignaler (eksempler): -- Nye lokale brukere med is_active = 1 som ikke matcher forventede mønstre (navn / email). -- Tokens opprettet for brukere utenfor forventet sett (`chris`, `automation` m.fl.). -- Repo opprettet av ukjente brukere (som r6e08-tilfellet). -- app.ini endret slik at DISABLE_REGISTRATION går tilbake til false eller ALLOW_ONLY_EXTERNAL_REGISTRATION endres. -- Logger viser sign_up / generate-access-token mønstre fra samme IP som tidligere ble flagget. +Alarmsignaler: +- Nye lokale brukere som ikke matcher forventede mønstre. +- Tokens opprettet for ukjente brukere. +- Nye repo opprettet av ukjente brukere. +- app.ini endret slik at registrering åpnes igjen. #### 3. Samspill mellom `automation`, `sentinel` og `chris` -- `chris`: - - Fortsatt eneste Gitea-admin. - - Godkjenner større endringer, branch protection, og eventuelle "fix"-operasjoner som `sentinel` foreslår. -- `automation`: - - Utfører godkjente, tekniske endringer (token-rotasjon, oppdatering av Secret Manager, git push/pull). - - Opererer alltid gjennom CLI/API, ikke via web. -- `sentinel`: - - Kjører periodisk analyser, skriver rapporter og flagger avvik. - - Har kun lesetilgang (Gitea-API, logger, metadata), ikke skrive-/admin-tilgang. - -Målet: -- Gitea forblir "sannheten" for kode og sikkerhetslogg. -- Automatiserte aktører er tydelig skilt fra menneskelig admin. -- Lokale LLM-modeller brukes til kontinuerlig sikkerhetsobservasjon uten å få fri tilgang til å endre alt. +- `chris`: Eneste Gitea-admin. Godkjenner større endringer. +- `automation`: Utfører godkjente tekniske endringer via CLI/API. +- `sentinel`: Kjører periodiske analyser, skriver rapporter, kun lesetilgang. --- @@ -196,12 +133,12 @@ Målet: ### Bekreftet drift - `gitea-cpu-vm` er oppe i `us-central1-b` -- VM kjører nå på `e2-highmem-4` (4 vCPU / 32 GB RAM) -- Statisk IP beholdt: `34.170.51.84` +- VM kjører på `e2-highmem-4` (4 vCPU / 32 GB RAM) +- Statisk IP: `34.170.51.84` - Gitea svarer på port `3000` - Ollama svarer på port `11434` -### Faktisk modeller lokalt per 2026-07-23 +### Faktisk modeller lokalt per 2026-07-25 - `gemma3:4b` - `qwen2.5:3b` - `qwen2.5:7b` @@ -245,20 +182,19 @@ Deploy verifisert: `get_connector_status` → `live`, `gitea: online`, `tool_cou --- ## ÅPNE PUNKTER -1. ⚠️ Roter GITEA_TOKEN (eksponert i chat) -2. `git.vauco.no` HTTPS — firewall prioritet 500 + certbot -3. Google OAuth2 innlogging i Gitea -4. GPG-signering — få commits verified -5. Test `qwen2.5-coder:7b` på konkret kode-/repo-oppgave -6. Mål RAM/swap under modell-last -7. Emma derivat-dokument (tilsvarende GEMINI.md) -8. Fase 8: Snapshot-policy aktiveres -9. opax.vauco.no domain mapping (Cloud Run → custom domain) +1. GPG-signering — få commits verified +2. `automation`-bruker opprett i Gitea +3. Sentinel-implementering (lokal LLM periodisk sjekk) +4. Test `qwen2.5-coder:7b` på konkret kode-/repo-oppgave +5. Mål RAM/swap under modell-last +6. Emma derivat-dokument (tilsvarende GEMINI.md) +7. Fase 8: Snapshot-policy aktiveres +8. `opax.vauco.no` domain mapping (Cloud Run → custom domain) ## FASTE SANNHETER - Gitea er source of truth - Lokale modeller er hovedretning -- Gitea-VM (`34.67.252.59`) er permanent målmaskin — alltid-på +- Gitea-VM (`34.67.252.59`) er permanent målmaskin — alltid-på, STANDARD (ikke preemptible) - Bruk `localhost:3000` fra Gitea-VM, aldri ekstern IP mot seg selv - Dev-snap er ikke lenger nødvendig for kjerneflyten - CPU er primær flaskehals for tyngre lokale modeller @@ -272,10 +208,13 @@ Deploy verifisert: `get_connector_status` → `live`, `gitea: online`, `tool_cou - ✅ VM oppgradert til e2-highmem-4 (32 GB RAM) — FERDIG - ✅ Dev-snap uavhengighet verifisert — FERDIG - ✅ OSVauco arbeidskopi på Gitea-VM — FERDIG -- ⏳ `git.vauco.no` live med HTTPS — neste -- ⏳ Google OAuth2 innlogging Gitea — etter HTTPS -- ⏳ GITEA_TOKEN rotert — kritisk +- ✅ git.vauco.no live med HTTPS — FERDIG +- ✅ Google OAuth2 innlogging Gitea — FERDIG +- ✅ GITEA_TOKEN rotert — FERDIG +- ✅ Sikkerhetsherding — FERDIG +- ✅ VM Access Scopes — FERDIG - ⏳ GPG-signering verified — pågår +- ⏳ automation-bruker i Gitea — neste - ⏳ Fase 7: lokal hjerne verifisert — pågår - ⏳ Fase 8: daglig snapshot-backup — planlagt @@ -291,3 +230,4 @@ Deploy verifisert: `get_connector_status` → `live`, `gitea: online`, `tool_cou | 2026-07-22 19:30 | Dev-snap uavhengighet bekreftet — alle 6 tester grønne | | 2026-07-22 19:45 | nginx installert, git.vauco.no konfig opprettet, certbot blokkert av firewall | | 2026-07-23 22:14 | Handoff oppdatert med full status, neste steg og sikkerhetsnotis om token | +| 2026-07-25 08:15 | Full synkronisering: HTTPS ferdig, token rotert, OAuth2 fikset, sikkerhetsherding dokumentert, VM scopes fikset |