diff --git a/docs/backlog.md b/docs/backlog.md index c0ebe8b..96d7010 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -422,6 +422,14 @@ Ponizej te wymagajace akcji, pogrupowane wg ryzyka. Naprawa = osobny task/kilka. - **zigbee2mqtt** topology mowi chelsty-infra, biega na PIHA -> poprawic topology - **stability-agent / node_exporter** owner_node single, biegaja wielomiejscowo -> per-host +### Po odchudzaniu PIHA (2026-07-02, faza 2 modulu 0) +- **llm-gateway: zlokalizowac/zarchiwizowac zrodlo** — kod (wlasny FastAPI router -> + Ollama@SOLARIA) moze zyc TYLKO w `/opt/llm-gateway` na PIHA, bez gita; przeszukanie + PIHA i repo nie znalazlo innej kopii. Zarchiwizowac do repo/Forgejo zanim padnie nosnik. +- **Prometheus@PIHA: target llm-gateway blednie nazwany `watchtower`** — celuje w :8080 + i odpytuje `/v1/metrics`, dostaje wieczne 404 (llm-gateway nie serwuje metryk). + Naprawic nazwe/endpoint albo usunac target. + ### Tech debt SATURN (z gaszenia dysku 2026-06-30) - **`/opt/anaconda3` 16G** — najwiekszy pojedynczy zjadacz dysku (env-y Pythona). Decyzja Oskara kiedy/czy czyscic. - Dysk 91% -> 83% ugaszone (docker prune + journal + syslog), ale `/home` zaszyfrowany diff --git a/docs/infra/piha-slim-audit-2026-07-02.md b/docs/infra/piha-slim-audit-2026-07-02.md index 988d472..f299f1c 100644 --- a/docs/infra/piha-slim-audit-2026-07-02.md +++ b/docs/infra/piha-slim-audit-2026-07-02.md @@ -4,6 +4,11 @@ > Zadna akcja nie zostala wykonana — wylacznie `docker stats/inspect/logs`, `ss`, `curl` (odczyt). > Stan w momencie audytu: **RAM 7.9Gi total, 5.0Gi used, 2.9Gi available; swap 4Gi total, 2.0Gi uzyty.** > 41 kontenerow Up (inwentaryzacja 2026-06-30 liczyla 40; wszystkie nadal biega). +> +> **AKTUALIZACJA 2026-07-02 (FAZA 2):** czesc rekomendacji zostala skorygowana po review +> Oskara i wykonana — patrz sekcja [Korekta po review + egzekucja](#korekta-po-review--egzekucja-2026-07-02) +> na koncu dokumentu. W skrocie: ES+diskover UBITE; llm-gateway ZOSTAJE (wlasny kod); +> immich ZOSTAJE NA PIHA na stale. ## Podsumowanie: ile RAM da sie zwolnic @@ -99,12 +104,16 @@ nie brak definicji. Reszta shadow-stackow zyje w `/home/pi//` i `/opt/`. — zysk ~902Mi, ryzyko ~zero (jedyny konsument ES to diskover; indeks martwy od pazdziernika 2025). Przed usunieciem obrazow/wolumenow: zostawic wolumen ES na tydzien "na wszelki wypadek" (22MB danych; ewentualnie `elasticdump` do pliku). -2. **Stop: llm-gateway** (`/opt/llm-gateway`) — zysk 15Mi + porzadek: znika port 8080 - i wiecznie failujacy target `watchtower` w prom (albo poprawic prom config w kroku 5). -3. **Decyzja: migracja immich na SOLARIA** — zysk ~620Mi na PIHA. Wymaga osobnego planu +2. ~~**Stop: llm-gateway** (`/opt/llm-gateway`) — zysk 15Mi + porzadek: znika port 8080 + i wiecznie failujacy target `watchtower` w prom (albo poprawic prom config w kroku 5).~~ + **WYCOFANE po review** — llm-gateway to wlasny kod Oskara, czesc systemu agentowego; + zostaje. Patrz sekcja korekty. +3. ~~**Decyzja: migracja immich na SOLARIA** — zysk ~620Mi na PIHA. Wymaga osobnego planu migracji (biblioteka zdjec + postgres pgvecto-rs; reguly repo: "data paths stay in place at cutover" → to pelnoprawny projekt, nie quick-win). ML na GPU SOLARII to - dodatkowy bonus jakosciowy. + dodatkowy bonus jakosciowy.~~ + **WYCOFANE po review** — immich musi byc dostepny 24/7, a SOLARIA jest wlaczana + sesyjnie. Immich zostaje na PIHA na stale. 4. **Decyzja: forgejo_dind** — jesli CI nieaktywne: stop (36Mi). Sprawdzic w UI forgejo czy sa zarejestrowane runnery/ostatnie buildy. 5. **Porzadki po-usuwaniu (osobny task, poza faza 1):** wyczyscic target `watchtower` @@ -146,3 +155,76 @@ nie brak definicji. Reszta shadow-stackow zyje w `/home/pi//` i `/opt/`. osiagniety — czesc sensorow NIE jest eksportowana do prom od dluzszego czasu). - Na hoscie biegaja tez procesy poza Dockerem: RPi-Reporter-MQTT2HA-Daemon, `/opt/mqtt-exporter/exporter.py` (root) — host-level shadow, nieobjete inwentaryzacja. + +## Korekta po review + egzekucja (2026-07-02) + +FAZA 2 wykonana po review Oskara. Decyzje i korekty wzgledem fazy 1: + +### Korekta 1: llm-gateway ZOSTAJE (wlasny kod, system agentowy) + +Audyt oznaczyl llm-gateway jako "BEZPIECZNY USUN — zero konsumentow" na podstawie +chwilowego braku ruchu. **Za slabe kryterium dla wlasnego serwisu** — kontener zostaje. + +Udokumentowana rola (odczyt `/opt/llm-gateway` na PIHA, 2026-07-02): + +- **Co to jest**: wlasny FastAPI-router LLM Oskara (Python 3.12, fastapi+httpx+uvicorn), + ~90 linii w `app/main.py`. Compose project `llm-gateway`, katalog `/opt/llm-gateway` + (root, pliki z 2026-04-20/21), port `8080:8080`, `restart: unless-stopped`. +- **Co robi**: proxy/router do **Ollamy na SOLARIA** (`http://solaria:11434/api/generate`). + Dwa endpointy: `POST /api/chat` → model `deepcoder:14b`; `POST /api/code` → model + `deepseek-coder:latest` (z twardym promptem "return only code/command" + heurystyka + `looks_like_shell_command`). `GET /` = healthcheck (`{"status": "gateway ok"}`). +- **Kto go wola dzis**: zaden kontener agent-system-\* nie ma env wskazujacego na + llm-gateway (telegram-bot ma `CONTROL_PLANE_URL=http://webui:8080` — to WEWNETRZNY + webui w sieci compose, nie llm-gateway; jego `ENABLE_LLM_FALLBACK=false` uzywa + `OPENCLAW_BASE_URL`, nie gatewaya). Jedyny ruch: Prometheus (blednie, patrz nizej). + To infrastruktura "na zawolanie" dla agentow, nie martwy kod. +- **Gdzie zrodlo**: `/opt/llm-gateway` NIE jest repo git. Przeszukano PIHA + (`/opt`, `/home/pi`, `/home/oskar`, maxdepth) — **jedyna kopia `main.py` to + `/opt/llm-gateway/app/main.py`**. W repo homelab-codex brak zrodla (tylko wzmianki + w docs; `ollama_client.py` w korzeniu repo gada z Ollama bezposrednio, nie przez + gateway). **Status: kod tylko na dysku PIHA — DO ZARCHIWIZOWANIA** (backlog). +- Znany bug konfiguracyjny monitoringu: Prometheus na PIHA ma target nazwany + `watchtower` celujacy w :8080 i odpytujacy `/v1/metrics` → wieczne 404 w logach + gatewaya (backlog). + +### Korekta 2: immich ZOSTAJE NA PIHA NA STALE + +Rekomendacja "przenies na SOLARIA" wykreslona: immich musi byc dostepny **24/7** +(vhosty immich.okit.pl / foty.kapala.org), a SOLARIA jest wlaczana **sesyjnie** — +nie nadaje sie na hosting always-on. Wiersze immich_\* w tabeli glownej czytac jako +**ZOSTAW** (kategoria PRZENIES niewazna). + +### Korekta 3: reszta kandydatow "DECYZJA OSKARA" — ZOSTAJE + +forgejo_dind, code-server, portainer, mqtt-exporter (kontener) — wszystkie zostaja +bez zmian. Duplikat mqtt-exporter i limit 2000 metryk pozostaja w backlogu jako +osobny temat. + +### Egzekucja: elasticsearch + diskover UBITE (jedyne dwa) + +Wykonane 2026-07-02 ~16:28 CEST na PIHA, w kolejnosci z audytu (najpierw diskover): + +1. Oba kontenery = jeden compose project `diskover` (`/home/pi/diskover/docker-compose.yml`), + restart `unless-stopped`; brak jednostek systemd i wpisow cron — jedyny mechanizm + autostartu to same kontenery. +2. `docker stop diskover` → `docker stop elasticsearch` — czysto (Exited 0 / 143). +3. Obserwacja ~2 min: zero restart-loopow, logi wikijs ciche, nic nie krzyczy. +4. `docker compose -p diskover down` — kontenery usuniete, siec `diskover_default` + usunieta. Po reboocie nic ich nie wskrzesi (kontenery nie istnieja). +5. **Dane ES NIE skasowane**: bind mount `/home/pi/diskover/esdata` (indeks + `diskover-pimedia`, ~22MB) zostal na dysku nietkniety — `compose down` nie rusza + bind mountow. Obrazy tez zostawione (ewentualne `docker image prune` = osobna decyzja). + +### Zysk faktyczny + +| Metryka | Przed (16:27) | Po (16:31) | Delta | +|---|---|---|---| +| RAM available | 2.8Gi | **3.8Gi** | **+1.0Gi** | +| RAM used | 5.1Gi | 4.1Gi | −1.0Gi | +| Swap used | 2.0Gi | 1.9Gi | −0.1Gi (spadek presji; pelny efekt po czasie) | +| Kontenery Up | 41 | 39 | −2 (elasticsearch, diskover) | + +Kryterium modulu 0 (**>= 1.5Gi available stabilnie**) — **SPELNIONE** z zapasem +(3.8Gi), bez ruszania immich i llm-gateway. Zysk zgodny z prognoza audytu +(~902Mi rezydentne + strony ES wyswapowane). diff --git a/docs/kb/modules/00-piha-slim.md b/docs/kb/modules/00-piha-slim.md index 1a0f6a9..eea50ab 100644 --- a/docs/kb/modules/00-piha-slim.md +++ b/docs/kb/modules/00-piha-slim.md @@ -3,6 +3,26 @@ > Prerekwizyt modulow 2/4 (Paperless/Nextcloud na PIHA). Bez tego PIHA nie ma > komfortowego zapasu RAM. Laczy sie z backlogiem grupy C (audyt shadow-kontenerow). +## STATUS: prerekwizyt RAM SPELNIONY (2026-07-02) + +Faza 1 (audyt read-only) + faza 2 (egzekucja po review Oskara) wykonane — +szczegoly: `docs/infra/piha-slim-audit-2026-07-02.md` (sekcja "Korekta po review ++ egzekucja"). + +- **Kryterium >= 1.5Gi available: SPELNIONE.** Przed egzekucja: 2.8Gi available + (used 5.1Gi, swap 2.0Gi). Po ubiciu elasticsearch+diskover: **3.8Gi available** + (used 4.1Gi, swap 1.9Gi). Zapas ponad kryterium: +2.3Gi. +- Ubite (jedyne dwa): **elasticsearch** (~895Mi) + **diskover** (~7Mi) — stack + `/home/pi/diskover`, kontenery i siec usuniete, dane ES (bind mount `esdata`, + 22MB) zostawione na dysku. +- Decyzje po review: **llm-gateway ZOSTAJE** (wlasny kod Oskara, router LLM -> + Ollama@SOLARIA, czesc systemu agentowego; zrodlo tylko w `/opt/llm-gateway` na + PIHA — archiwizacja w backlogu); **immich ZOSTAJE NA PIHA na stale** (24/7, + SOLARIA sesyjna); forgejo_dind / code-server / portainer / mqtt-exporter — zostaja. +- Otwarte (nie blokuje Paperlessa): obserwacja stabilnosci swap pod normalnym + obciazeniem; GitOps-yzacja tego co zostaje (`hosts/piha/services.yaml`) wg + backlogu rozjazdow. + ## Cel Zwolnic RAM na PIHA (dzis: 3.1Gi available, swap 2G uzyty) tak, by lekki Paperless- serwis wszedl z zapasem, nie na styku swap.