chore: update docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md via opax-mcp
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
This commit is contained in:
parent
39fed69e15
commit
de22ae642a
|
|
@ -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 0–5 — FERDIG
|
||||||
### ✅ FASE 6 – CPU-optimalisering — 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
|
### ✅ FASE 6.5 – VM-oppgradering + modellarkitektur — VERIFISERT 2026-07-22
|
||||||
### ✅ DEV-SNAP UAVHENGIGHET – Verifisert 2026-07-22 19:30 CEST
|
### ✅ DEV-SNAP UAVHENGIGHET – Verifisert 2026-07-22 19:30 CEST
|
||||||
### ✅ OSVauco arbeidskopi klonet til Gitea-VM — FERDIG 2026-07-22 19:25 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
|
### 🟡 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
|
### ⏳ GPG-SIGNERING – Commits verified — PÅGÅR
|
||||||
### ⏳ FASE 8 – Backup / snapshot-strategi — PLANLAGT
|
### ⏳ 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
|
## DEV-SNAP UAVHENGIGHET – VERIFISERT 2026-07-22
|
||||||
|
|
||||||
Alle 6 tester grønne:
|
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`
|
||||||
- ✅ DNS: `git.vauco.no` A-record → `34.67.252.59` satt i Google Cloud DNS
|
- ✅ nginx installert og konfigurert som proxy til `localhost:3000`
|
||||||
- ✅ nginx installert og kjører på Gitea-VM (port 80 lytter)
|
- ✅ Firewall-regel `allow-gitea-web` (prioritet 500) opprettet
|
||||||
- ✅ nginx konfig for `git.vauco.no` → proxy til `localhost:3000` opprettet
|
- ✅ certbot fullført — HTTPS aktivt
|
||||||
- ✅ Firewall-regel `allow-http-https` opprettet i `propane-will-491900-m5`
|
- ✅ Google OAuth2 konfigurert og testet
|
||||||
- ❌ 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
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## SIKKERHET – ÅPNE PUNKTER
|
## SIKKERHET – ÅPNE PUNKTER
|
||||||
GITEA_TOKEN: [ROTERT OG FJERNET]
|
- ✅ GITEA_TOKEN rotert og fjernet fra eksponering — FERDIG 2026-07-25
|
||||||
- Roter token i Gitea (localhost:3000 → Settings → Applications)
|
|
||||||
- Oppdater GITEA_TOKEN i Cloud Run miljøvariabler etter rotasjon
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -107,8 +74,8 @@ GITEA_TOKEN: [ROTERT OG FJERNET]
|
||||||
Status per 2026-07-25:
|
Status per 2026-07-25:
|
||||||
- Gitea kjører på https://git.vauco.no med HTTPS og riktig ROOTURL.
|
- 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).
|
- 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.
|
- 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 med lokale modeller og Gemini i VM.
|
- Ingen av stegene under er gjennomført ennå – de beskriver målbildet for neste iterasjon.
|
||||||
|
|
||||||
#### 1. Teknisk Gitea-bruker: `automation`
|
#### 1. Teknisk Gitea-bruker: `automation`
|
||||||
|
|
||||||
|
|
@ -119,12 +86,11 @@ Mål:
|
||||||
Plan:
|
Plan:
|
||||||
- Opprett Gitea-bruker `automation` (ikke admin).
|
- Opprett Gitea-bruker `automation` (ikke admin).
|
||||||
- Gi `automation` kun tilgang til de repoene automasjon skal jobbe med (f.eks. OSVauco).
|
- Gi `automation` kun tilgang til de repoene automasjon skal jobbe med (f.eks. OSVauco).
|
||||||
- Bruk CLI/API fra Gitea-VM (Gemini i VM) til:
|
- Bruk CLI/API fra Gitea-VM til:
|
||||||
- Generere ett personal access token for `automation` med begrenset scope (primært repo-API / git).
|
- Generere ett personal access token for `automation` med begrenset scope.
|
||||||
- Skrive tokenet direkte til Google Cloud Secret Manager (f.eks. secret `gitea-automation-token`).
|
- Skrive tokenet direkte til Google Cloud Secret Manager (secret `gitea-automation-token`).
|
||||||
- Konfigurere Cloud Run / OPAX MCP til å lese tokenet via miljøvariabel (f.eks. `GITEA_TOKEN`).
|
- Konfigurere Cloud Run / OPAX MCP til å lese tokenet via miljøvariabel (`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` for push/pull.
|
||||||
- Konfigurer git på Gitea-VM til å bruke `automation` (SSH-nøkkel eller HTTP-token) for push/pull.
|
|
||||||
|
|
||||||
Viktig:
|
Viktig:
|
||||||
- `automation` skal ikke være admin.
|
- `automation` skal ikke være admin.
|
||||||
|
|
@ -134,61 +100,32 @@ Viktig:
|
||||||
#### 2. Sentinel-rolle for lokale LLM-modeller (Gitea Security Sentinel)
|
#### 2. Sentinel-rolle for lokale LLM-modeller (Gitea Security Sentinel)
|
||||||
|
|
||||||
Mål:
|
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.).
|
- 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)
|
Rolle: `sentinel` (kun lesing + rapport)
|
||||||
|
|
||||||
Input:
|
Input:
|
||||||
- Gitea-API:
|
- Gitea-API: brukerliste, tokens, repo-oversikt
|
||||||
- Liste over brukere, nye accounts, is_active-flagg.
|
- Logger: gitea-app-logg, nginx-logg, journald
|
||||||
- Liste over personal access tokens per bruker (antall, navn, opprettelsestid).
|
- Konfig: app.ini, firewall-regler, Secret Manager metadata
|
||||||
- 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:
|
Oppførsel:
|
||||||
- Kjør periodisk (f.eks. hver time eller natt) fra Gitea-VM eller egen planlagt jobb.
|
- Kjør periodisk (hver time eller natt) fra Gitea-VM.
|
||||||
- Analyser:
|
- Produser rapport i `protocols/security/SENTINEL-REPORT-YYYY-MM-DD.md`.
|
||||||
- Nye lokale brukere (ikke OAuth-baserte).
|
- Foreta ingen direkte mutasjoner uten eksplisitt godkjenning.
|
||||||
- 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):
|
Alarmsignaler:
|
||||||
- Nye lokale brukere med is_active = 1 som ikke matcher forventede mønstre (navn / email).
|
- Nye lokale brukere som ikke matcher forventede mønstre.
|
||||||
- Tokens opprettet for brukere utenfor forventet sett (`chris`, `automation` m.fl.).
|
- Tokens opprettet for ukjente brukere.
|
||||||
- Repo opprettet av ukjente brukere (som r6e08-tilfellet).
|
- Nye repo opprettet av ukjente brukere.
|
||||||
- app.ini endret slik at DISABLE_REGISTRATION går tilbake til false eller ALLOW_ONLY_EXTERNAL_REGISTRATION endres.
|
- app.ini endret slik at registrering åpnes igjen.
|
||||||
- Logger viser sign_up / generate-access-token mønstre fra samme IP som tidligere ble flagget.
|
|
||||||
|
|
||||||
#### 3. Samspill mellom `automation`, `sentinel` og `chris`
|
#### 3. Samspill mellom `automation`, `sentinel` og `chris`
|
||||||
|
|
||||||
- `chris`:
|
- `chris`: Eneste Gitea-admin. Godkjenner større endringer.
|
||||||
- Fortsatt eneste Gitea-admin.
|
- `automation`: Utfører godkjente tekniske endringer via CLI/API.
|
||||||
- Godkjenner større endringer, branch protection, og eventuelle "fix"-operasjoner som `sentinel` foreslår.
|
- `sentinel`: Kjører periodiske analyser, skriver rapporter, kun lesetilgang.
|
||||||
- `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.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -196,12 +133,12 @@ Målet:
|
||||||
|
|
||||||
### Bekreftet drift
|
### Bekreftet drift
|
||||||
- `gitea-cpu-vm` er oppe i `us-central1-b`
|
- `gitea-cpu-vm` er oppe i `us-central1-b`
|
||||||
- VM kjører nå på `e2-highmem-4` (4 vCPU / 32 GB RAM)
|
- VM kjører på `e2-highmem-4` (4 vCPU / 32 GB RAM)
|
||||||
- Statisk IP beholdt: `34.170.51.84`
|
- Statisk IP: `34.170.51.84`
|
||||||
- Gitea svarer på port `3000`
|
- Gitea svarer på port `3000`
|
||||||
- Ollama svarer på port `11434`
|
- Ollama svarer på port `11434`
|
||||||
|
|
||||||
### Faktisk modeller lokalt per 2026-07-23
|
### Faktisk modeller lokalt per 2026-07-25
|
||||||
- `gemma3:4b`
|
- `gemma3:4b`
|
||||||
- `qwen2.5:3b`
|
- `qwen2.5:3b`
|
||||||
- `qwen2.5:7b`
|
- `qwen2.5:7b`
|
||||||
|
|
@ -245,20 +182,19 @@ Deploy verifisert: `get_connector_status` → `live`, `gitea: online`, `tool_cou
|
||||||
---
|
---
|
||||||
|
|
||||||
## ÅPNE PUNKTER
|
## ÅPNE PUNKTER
|
||||||
1. ⚠️ Roter GITEA_TOKEN (eksponert i chat)
|
1. GPG-signering — få commits verified
|
||||||
2. `git.vauco.no` HTTPS — firewall prioritet 500 + certbot
|
2. `automation`-bruker opprett i Gitea
|
||||||
3. Google OAuth2 innlogging i Gitea
|
3. Sentinel-implementering (lokal LLM periodisk sjekk)
|
||||||
4. GPG-signering — få commits verified
|
4. Test `qwen2.5-coder:7b` på konkret kode-/repo-oppgave
|
||||||
5. Test `qwen2.5-coder:7b` på konkret kode-/repo-oppgave
|
5. Mål RAM/swap under modell-last
|
||||||
6. Mål RAM/swap under modell-last
|
6. Emma derivat-dokument (tilsvarende GEMINI.md)
|
||||||
7. Emma derivat-dokument (tilsvarende GEMINI.md)
|
7. Fase 8: Snapshot-policy aktiveres
|
||||||
8. Fase 8: Snapshot-policy aktiveres
|
8. `opax.vauco.no` domain mapping (Cloud Run → custom domain)
|
||||||
9. opax.vauco.no domain mapping (Cloud Run → custom domain)
|
|
||||||
|
|
||||||
## FASTE SANNHETER
|
## FASTE SANNHETER
|
||||||
- Gitea er source of truth
|
- Gitea er source of truth
|
||||||
- Lokale modeller er hovedretning
|
- 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
|
- Bruk `localhost:3000` fra Gitea-VM, aldri ekstern IP mot seg selv
|
||||||
- Dev-snap er ikke lenger nødvendig for kjerneflyten
|
- Dev-snap er ikke lenger nødvendig for kjerneflyten
|
||||||
- CPU er primær flaskehals for tyngre lokale modeller
|
- 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
|
- ✅ VM oppgradert til e2-highmem-4 (32 GB RAM) — FERDIG
|
||||||
- ✅ Dev-snap uavhengighet verifisert — FERDIG
|
- ✅ Dev-snap uavhengighet verifisert — FERDIG
|
||||||
- ✅ OSVauco arbeidskopi på Gitea-VM — FERDIG
|
- ✅ OSVauco arbeidskopi på Gitea-VM — FERDIG
|
||||||
- ⏳ `git.vauco.no` live med HTTPS — neste
|
- ✅ git.vauco.no live med HTTPS — FERDIG
|
||||||
- ⏳ Google OAuth2 innlogging Gitea — etter HTTPS
|
- ✅ Google OAuth2 innlogging Gitea — FERDIG
|
||||||
- ⏳ GITEA_TOKEN rotert — kritisk
|
- ✅ GITEA_TOKEN rotert — FERDIG
|
||||||
|
- ✅ Sikkerhetsherding — FERDIG
|
||||||
|
- ✅ VM Access Scopes — FERDIG
|
||||||
- ⏳ GPG-signering verified — pågår
|
- ⏳ GPG-signering verified — pågår
|
||||||
|
- ⏳ automation-bruker i Gitea — neste
|
||||||
- ⏳ Fase 7: lokal hjerne verifisert — pågår
|
- ⏳ Fase 7: lokal hjerne verifisert — pågår
|
||||||
- ⏳ Fase 8: daglig snapshot-backup — planlagt
|
- ⏳ 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: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-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-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 |
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user