12 KiB
HANDOFF-LOKAL-LLM-GITEA-MCP.md
EGEN HANDOFF – UFRAVIKELIG STYRINGSDOKUMENT
GJELDER FRA NÅ OG FREM TIL 100 % FERDIGSTILLELSE
0. STATUS OG KOMMANDO
Denne handoffen er det eneste autoritative arbeidsdokumentet for sporet "lokal LLM-fabrikk + OPAX-MCP + Gitea stabilisering + blueprinting til Gitea-VM".
FREMDRIFT – OPPDATERT 2026-07-23 22:14 CEST
✅ FASE 0–5 — FERDIG
✅ FASE 6 – CPU-optimalisering — FERDIG
✅ FASE 6-TILLEGG – Boot-warming — FERDIG
✅ DNS – NS-bytte utført — FERDIG 2026-07-21 23:44 CEST
✅ OPAX-MCP – GITEA_URL permanent + deploy — FERDIG 2026-07-21 23:53 CEST
✅ SMOKE-TEST – Alle 37 tools — FERDIG 2026-07-22 00:25 CEST
✅ 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
🟡 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
DEV-SNAP UAVHENGIGHET – VERIFISERT 2026-07-22
Alle 6 tester grønne:
| Test | Status | Bevis |
|---|---|---|
| A — Gitea API | ✅ | list_commits svarer fra localhost:3000 |
| B — Repo-innhold | ✅ | Klon hentet 3545 objekter direkte |
| C — OPAX health | ✅ | opax_mcp_status: live |
| D — MCP tools/list | ✅ | 37 verktøy live |
| E — Git-sync | ✅ | nothing to commit, working tree clean |
| F — Ollama | ✅ | 5 modeller bekreftet |
Viktig: Bruk alltid localhost:3000 (ikke 34.67.252.59:3000) når du jobber fra Gitea-VM selv. GCP NAT-er ikke loopback-trafikk.
git.vauco.no – STATUS OG NESTE STEG
Hva er gjort
- ✅ DNS:
git.vauco.noA-record →34.67.252.59satt i Google Cloud DNS - ✅ nginx installert og kjører på Gitea-VM (port 80 lytter)
- ✅ nginx konfig for
git.vauco.no→ proxy tillocalhost:3000opprettet - ✅ Firewall-regel
allow-http-httpsopprettet ipropane-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:
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:
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:
sudo certbot --nginx -d git.vauco.no \
--non-interactive --agree-tos \
-m chris.christiansen@vauco.no
Steg 4 — Verifiser:
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
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
Rollen "automation" og sikkerhets-sentinel for Gitea
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.
1. Teknisk Gitea-bruker: automation
Mål:
- Skille menneskelig admin (
chris) fra automatiserte operasjoner. - Sørge for at alle automatiske commits / API-kall identifiseres som
automation, ikkechris.
Plan:
- Opprett Gitea-bruker
automation(ikke admin). - Gi
automationkun 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
automationmed 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).
- Generere ett personal access token for
- 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.
Viktig:
automationskal ikke være admin.chrisskal ikke dele token med automasjon.- Token-verdier lagres kun i Secret Manager og miljøvariabler, ikke i repo eller logs.
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.
- 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).
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.
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,automationm.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.
3. Samspill mellom automation, sentinel og chris
chris:- Fortsatt eneste Gitea-admin.
- Godkjenner større endringer, branch protection, og eventuelle "fix"-operasjoner som
sentinelforeslå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.
FASE 6.5 — OPPDATERT LOKAL LLM-STACK (2026-07-22)
Bekreftet drift
gitea-cpu-vmer oppe ius-central1-b- VM kjører nå på
e2-highmem-4(4 vCPU / 32 GB RAM) - Statisk IP beholdt:
34.170.51.84 - Gitea svarer på port
3000 - Ollama svarer på port
11434
Faktisk modeller lokalt per 2026-07-23
gemma3:4bqwen2.5:3bqwen2.5:7bqwen2.5-coder:7bqwen2.5-coder:14b
Revidert anbefalt modellarkitektur
- Frontmodell:
gemma3:4b— raske svar, enkel resonnering - Lett tool-modell:
qwen2.5:3b— tool calling, responsivt - Standard mellomlag:
qwen2.5:7b— kvalitet + brukbar latency - Kode-modell:
qwen2.5-coder:7b— standard for repo/kodearbeid - Backup coder:
qwen2.5-coder:14b— batch/asynkrone kodeoppgaver
OPAX-MCP KONFIGURASJON – LÅST
| Variabel | Verdi |
|---|---|
GITEA_URL |
http://34.67.252.59:3000 |
OLLAMA_BASE_URL |
http://34.67.252.59:11434 |
EMMA_MODEL |
gemma3:4b |
EMMA_FAST_MODEL |
gemma3:4b |
EMMA_LIGHT_MODEL |
qwen2.5:3b |
OSVAUCO_AGENT_URL |
https://osvauco-agent-357036551735.us-central1.run.app |
Deploy verifisert: get_connector_status → live, gitea: online, tool_count: 37
DNS – FULLFØRT 2026-07-21
| Record | Type | Verdi |
|---|---|---|
vauco.no. |
A | 34.98.77.173 (LB) |
www.vauco.no. |
A | 34.98.77.173 (LB) |
opax.vauco.no. |
A | 34.98.77.173 (LB) |
git.vauco.no. |
A | 34.67.252.59 |
| MX / SPF / DKIM / DMARC | TXT/MX | Google Workspace komplett |
ÅPNE PUNKTER
- ⚠️ Roter GITEA_TOKEN (eksponert i chat)
git.vauco.noHTTPS — firewall prioritet 500 + certbot- Google OAuth2 innlogging i Gitea
- GPG-signering — få commits verified
- Test
qwen2.5-coder:7bpå konkret kode-/repo-oppgave - Mål RAM/swap under modell-last
- Emma derivat-dokument (tilsvarende GEMINI.md)
- Fase 8: Snapshot-policy aktiveres
- 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å - Bruk
localhost:3000fra 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
DEFINITION OF DONE
- ✅ Lokale modeller lever og kan brukes lokalt
- ✅ OPAX-MCP bruker lokal modellbackend korrekt
- ✅ Gitea read/write tools er grønne
- ✅ GCP/Workspace-kjernen er fortsatt grønn
- ✅ Smoke-test alle 37 tools — FERDIG
- ✅ VM oppgradert til e2-highmem-4 (32 GB RAM) — FERDIG
- ✅ Dev-snap uavhengighet verifisert — FERDIG
- ✅ OSVauco arbeidskopi på Gitea-VM — FERDIG
- ⏳
git.vauco.nolive med HTTPS — neste - ⏳ Google OAuth2 innlogging Gitea — etter HTTPS
- ⏳ GITEA_TOKEN rotert — kritisk
- ⏳ GPG-signering verified — pågår
- ⏳ Fase 7: lokal hjerne verifisert — pågår
- ⏳ Fase 8: daglig snapshot-backup — planlagt
OPPDATERINGSLOGG
| Dato | Handling |
|---|---|
| 2026-07-21 | FASE 4–6: CPU-optimalisering, boot-warming fullført |
| 2026-07-21 23:44 | DNS: NS-bytte utført hos Proisp |
| 2026-07-21 23:53 | OPAX-MCP: GITEA_URL + OLLAMA_BASE_URL → 34.67.252.59, deployed |
| 2026-07-22 00:25 | Smoke-test fullført — alle kategorier grønne |
| 2026-07-22 03:55 | Handoff oppdatert etter 14B-validering |
| 2026-07-22 19:25 | OSVauco klonet til Gitea-VM via localhost:3000 |
| 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 |