Files
microdao-daarion/ops/patch_node2_P0P1_20260227.md
Apple 7b8499dd8a node2: P0 vision restore + P1 security hardening + node-specific router config
P0 — Vision:
- swapper_config_node2.yaml: add llava-13b as vision model (vision:true)
  /vision/models now returns non-empty list; inference verified ~3.5s
- ollama.url fixed to host.docker.internal:11434 (was localhost, broken in Docker)

P1 — Security:
- Remove NODES_NODA1_SSH_PASSWORD from .env and docker-compose.node2-sofiia.yml
- SSH ED25519 key generated, authorized on NODA1, mounted as /run/secrets/noda1_ssh_key
- sofiia-console reads key via NODES_NODA1_SSH_PRIVATE_KEY env var
- secrets/noda1_id_ed25519 added to .gitignore

P1 — Router:
- services/router/router-config.node2.yml: new node2-specific config
  replaces all 172.17.0.1:11434 → host.docker.internal:11434
- docker-compose.node2-sofiia.yml: mount router-config.node2.yml (not root config)

P1 — Ports:
- router (9102), swapper (8890), sofiia-console (8002): bind to 127.0.0.1
- gateway (9300): keep 0.0.0.0 (Telegram webhook requires public access)

Artifacts:
- ops/patch_node2_P0P1_20260227.md — change log
- ops/validation_node2_P0P1_20260227.md — all checks PASS
- ops/node2.env.example — safe env template (no secrets)
- ops/security_hardening_node2.md — SSH key migration guide + firewall
- ops/node2_models_pull.sh — model pull script for P0/P1

Made-with: Cursor
2026-02-27 01:27:38 -08:00

4.6 KiB
Raw Blame History

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):

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 команди:

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:11434host.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 команди:

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 команди:

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)

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