# NODA2 P0+P1 Patch Report **Date:** 2026-02-27 **Node:** NODA2 (MacBook Pro M4 Max) **Commit tag:** `node2: P0 vision restore + P1 security hardening + node-specific router config` --- ## Зміни ### P0 — Vision Repair | Файл | Що змінено | |------|-----------| | `services/swapper-service/config/swapper_config_node2.yaml` | Додано `llava-13b` як vision model (`type: vision`, `vision: true`). Виправлено `ollama.url` з `localhost:11434` на `host.docker.internal:11434`. Додано секцію `vision.default_model`. | **Деталі:** - `llava:13b` вже присутня в Ollama на NODA2 → P0 без pull - `/vision/models` тепер поверне непорожній список - `qwen3-vl:8b` залишена закоментована — увімкнути після `ollama pull qwen3-vl:8b` **Deploy команди (після git pull на NODA2):** ```bash docker compose -f docker-compose.node2-sofiia.yml up -d --no-deps swapper-service # або якщо swapper вже running — достатньо restart (конфіг читається при старті): docker restart swapper-service-node2 ``` --- ### P1 — Security: SSH Key замість пароля | Зміна | Деталі | |-------|--------| | SSH ED25519 key згенерований | `~/.ssh/noda1_ed25519` (на NODA2 MacBook) | | Public key доданий на NODA1 | `/root/.ssh/authorized_keys` на `144.76.224.179` | | Private key скопійований | `secrets/noda1_id_ed25519` (chmod 600) | | `.env` | `NODES_NODA1_SSH_PASSWORD` замінено на коментар | | `docker-compose.node2-sofiia.yml` | `NODES_NODA1_SSH_PASSWORD` видалено з env; додано `NODES_NODA1_SSH_PRIVATE_KEY=/run/secrets/noda1_ssh_key` + volume mount `secrets/noda1_id_ed25519:/run/secrets/noda1_ssh_key:ro` | | `.gitignore` | Додано `secrets/noda1_id_ed25519` та `secrets/*.key` | **Deploy команди:** ```bash docker compose -f docker-compose.node2-sofiia.yml up -d --no-deps sofiia-console ``` --- ### P1 — Router: node2-specific config (без 172.17.0.1) | Файл | Що змінено | |------|-----------| | `services/router/router-config.node2.yml` | Новий файл: копія `router-config.yml` з заміною `172.17.0.1:11434` → `host.docker.internal:11434`. `node.id` = `noda2-macbook-pro-m4max`. | | `docker-compose.node2-sofiia.yml` (router volume) | Змінено mount з `./router-config.yml` на `./services/router/router-config.node2.yml` | **Deploy команди:** ```bash docker compose -f docker-compose.node2-sofiia.yml up -d --no-deps router ``` --- ### P1 — Port Binding: 127.0.0.1 для внутрішніх сервісів | Сервіс | До | Після | |--------|-----|-------| | `dagi-router-node2` port 9102 | `0.0.0.0:9102:8000` | `127.0.0.1:9102:8000` | | `swapper-service-node2` port 8890 | `0.0.0.0:8890:8890` | `127.0.0.1:8890:8890` | | `sofiia-console` port 8002 | `0.0.0.0:8002:8002` | `127.0.0.1:8002:8002` | | `dagi-gateway-node2` port 9300 | `0.0.0.0:9300:9300` | `0.0.0.0:9300:9300` (Telegram webhook — потрібен зовні) | **Deploy команди:** ```bash docker compose -f docker-compose.node2-sofiia.yml up -d ``` --- ## Файли змінені ``` services/swapper-service/config/swapper_config_node2.yaml — vision model added services/router/router-config.node2.yml — NEW: node2-specific config docker-compose.node2-sofiia.yml — security + port binding docker-compose.node2.yml — port binding .env — SSH password removed .gitignore — secrets/ added ops/node2_models_pull.sh — NEW: model pull script ops/node2.env.example — NEW: safe env template ops/security_hardening_node2.md — NEW: security guide ``` --- ## Одна команда "apply all" (після git pull) ```bash cd /Users/apple/github-projects/microdao-daarion # 1. Restart swapper (P0 vision) docker restart swapper-service-node2 # 2. Recreate sofiia-console (P1 security) і router (P1 config) docker compose -f docker-compose.node2-sofiia.yml up -d --no-deps sofiia-console router # 3. Verify curl -s http://localhost:8890/vision/models | jq . curl -s http://localhost:8890/health | jq .status docker inspect sofiia-console --format '{{range .Config.Env}}{{println .}}{{end}}' | grep -v SSH_PASSWORD ```