# TrueNAS — инфраструктура > Обновлено: 2026-04-30 ## Доступ - **Host (local):** `192.168.2.197` — локальный IP TrueNAS в подсети роутера (192.168.2.x) - ⚠️ Eagle (Mac, 192.168.1.x) и Kraken (192.168.1.14) находятся в **другой подсети** → прямой доступ по 192.168.2.197 с них **недоступен** - Для SSH/API с Орла и Кракена — только через `mallexxx.duckdns.org` - **Host (external):** `mallexxx.duckdns.org` (DuckDNS) — основной способ доступа извне и из 192.168.1.x - **SSH:** `truenas_admin@mallexxx.duckdns.org -i ~/.ssh/id_rsa` - **Web UI:** http://truenas.mallexxx.duckdns.org - **Portainer:** https://portainer.mallexxx.duckdns.org ## Пользователи и группы (ключевые) | uid | Имя | gid | Назначение | |-----|-----|-----|------------| | 950 | truenas_admin | 950 | SSH-пользователь, управление docker | | 911 | transdamon | 911 | Процесс Transmission внутри контейнера | | 921 | transmission | 921 | Старый пользователь (не используется контейнером) | | 3000 | nas_users | 3000 | Общая группа доступа к NAS | ## Структура папок ``` /mnt/RED_2TB/ ├── docker/ ← конфиги docker-контейнеров (бэкапятся → mailru-crypt:) │ ├── caddy/ │ ├── filebrowser/ │ ├── ha/ ← Home Assistant │ ├── hermes/ ← Hermes-Taiga │ ├── homeassistant/ │ ├── immich/ │ ├── inpx-web/ │ ├── inpxer/ │ ├── mbusd/ │ ├── modbus-bridge/ │ ├── mosquitto/ │ ├── nodered/ │ ├── portainer/ │ ├── python/ │ ├── rclone/ │ ├── ser2net/ │ ├── transmission/ ← конфиг Transmission (settings.json, torrents, resume...) │ ├── vless-proxy/ │ ├── watchtower/ │ ├── webdav/ │ └── zigbee2mqtt/ ├── storage/ │ ├── Downloads/ ← данные торрентов (монтируется в контейнер как /mnt/storage) │ │ ├── transmission/ ← старый путь конфига (больше не используется) │ │ └── [медиафайлы] │ └── obsidian/ ← vault (read-only для hermes-taiga) ├── backup/ ← ручные бэкапы (бэкапятся → mailru-crypt:) │ └── transmission-config/ ← снапшот конфига от 2026-04-30 ├── Photos/ ← фото (бэкапятся → mailru:Photos/Photos) ├── old-bu/ ← старый архив (бэкапятся → mailru:Photos/old-bu) └── immich-photos-upload/ ← библиотека Immich (бэкапятся → mailru:Photos/immich) ``` ## NFSv4 ACL — важно TrueNAS использует **NFSv4 ACL**, а не стандартный POSIX chmod/chown. - `ls -la` показывает `----------` даже если ACL есть → всегда проверять через `midclt call filesystem.getacl ` - Добавить запись: `midclt call filesystem.setacl '{...}'` - `truenas_admin` не имеет passwordless sudo → root-операции только через midclt или TrueNAS UI ## Docker-контейнеры | Контейнер | Image | Порт | Домен | |-----------|-------|------|-------| | transmission | linuxserver/transmission:latest | 9091, 51413 | transmission.mallexxx.duckdns.org | | hermes-taiga | hermes-taiga:latest | — | — | | vless-proxy | teddysun/xray:latest | — | — | | filebrowser | filebrowser/filebrowser:latest | — | — | | webdav | hacdias/webdav:latest | — | webdav.mallexxx.duckdns.org | | homeassistant | home-assistant:stable | 8123 | mallexxx.duckdns.org | | immich-server | immich-app/immich-server:release | 2283 | immich.mallexxx.duckdns.org | | immich-postgres | tensorchord/pgvecto-rs:pg14-v0.2.0 | — | — | | immich-redis | redis:7 | — | — | | nodered | nodered/node-red:latest | 1880 | nodered.mallexxx.duckdns.org | | mosquitto | eclipse-mosquitto:latest | — | — | | caddy | caddy:latest | 80, 443 | reverse proxy для всего | | rclone | rclone/rclone:latest | — | бэкап по cron | | portainer | portainer/portainer-ce:latest | 9000 | portainer.mallexxx.duckdns.org | | watchtower | containrrr/watchtower:latest | — | авто-обновление образов | | inpxer | ghcr.io/hedger/inpxer:latest | 18080 | books.mallexxx.duckdns.org | | nodered | node-red:latest | 1880 | nodered.mallexxx.duckdns.org | | zigbee2mqtt | koenkk/zigbee2mqtt:latest | — | — | | mbusd | 3cky/mbusd:latest | — | Modbus | | modbus-bridge | modbus-bridge | — | — | | cups-splix | cups-splix | — | принтер | ### Transmission — детали - **Config:** `/mnt/RED_2TB/docker/transmission/` (монтируется как `/config`) - **Данные:** `/mnt/RED_2TB/storage` (монтируется как `/mnt/storage`) - **Download dir:** `/mnt/storage/Downloads` - **UID/GID:** 911/911 (пользователь `transdamon`) - **RPC whitelist:** `172.16.6.*` - **Web:** https://transmission.mallexxx.duckdns.org - **Порты:** 9091 (RPC/web), 51413 (TCP/UDP peers) ### Caddy — домены | Домен | → | |-------|---| | mallexxx.duckdns.org | Home Assistant :8123 | | transmission.mallexxx.duckdns.org | Transmission :9091 | | immich.mallexxx.duckdns.org | Immich :2283 | | nodered.mallexxx.duckdns.org | Node-RED :1880 | | webdav.mallexxx.duckdns.org | WebDAV | | books.mallexxx.duckdns.org | Inpxer :18080 | | portainer.mallexxx.duckdns.org | Portainer :9000 | | truenas.mallexxx.duckdns.org | TrueNAS UI :80 | | cam.mallexxx.duckdns.org | Камера :8090 | | docs.mallexxx.duckdns.org | Docs :8000 | ## Hermes-Taiga агент | Параметр | Значение | |----------|----------| | Контейнер | `hermes-taiga` | | Telegram | через общий токен | | Vault (хост) | `/mnt/RED_2TB/storage/obsidian` | | Vault (контейнер) | `/vault:rw` | | obsidian-mcp | `/opt/data/.local/bin/mcpvault /vault` | | Scope | sparse: `personal/ + family/` | | Toolsets | hermes-cli, discord, file, web, **browser** | | web_search | Tavily (`TAVILY_API_KEY` в .env) | | web_extract | ✅ HTTP-парсинг | | browser | ✅ Playwright/Chromium (headless, JS-heavy сайты) | ### SOUL.md — identity & persona (обновлено 2026-05-13) Файл: `/opt/data/SOUL.md` (монтируется в контейнер, читается Hermes на каждый тёрн). **Ключевые изменения 2026-05-13:** - Добавлен блок `## Identity` — Тайга не ассистент, а лес: не извиняется, не суетится, говорит прямо - Добавлен uncertainty posture: при отсутствии данных говорит "не знаю" / "нет данных в vault", не строит истории - Тон исправлен: убрано "тёплая" (активировало female-helper архетип), оставлено "спокойная, уверенная, немногословная" - Добавлена обязанность читать и писать в Obsidian (RULE 2, Vault Access с правильными MCP-командами) - `display.personality` в config.yaml изменён с `helpful` на `neutral` — убирает Hermes-level "helpful" прайминг поверх soul **Почему важно:** `display: personality: helpful` в config.yaml инжектировался поверх soul.md и был основным источником извинений и гиперкомпенсации. ### Починка root-проблемы (2026-05-13) Hermes обновился — появилась проверка на root. Контейнер падал с `Refusing to run as root`. Фикс: `HERMES_ALLOW_ROOT_GATEWAY=1` + `UV_CACHE_DIR=/tmp/uv-cache` в docker-compose.yml + пересборка с `--no-cache`. > ⚠️ При обновлении образа — всегда `docker build --no-cache`, иначе `.venv` остаётся от root-слоя и ломает permissions. ## Obsidian Sync (Taiga) **Скрипт:** `~/sync-vault.sh` (запускается на **хосте**, не в контейнере) **Крон:** Hermes cron job `0 * * * *` **Bare repo:** `file:///mnt/RED_2TB/storage/git/obsidian-vault.git` **Лог:** `/tmp/vault-sync.log` ```bash # Запустить sync вручную: bash ~/sync-vault.sh # Посмотреть лог: tail -20 /tmp/vault-sync.log # История коммитов: git -C /mnt/RED_2TB/storage/git/obsidian-vault.git log --oneline -10 ``` > ⚠️ Скрипт запускается от `truenas_admin` — только этот пользователь имеет ZFS ACL доступ к bare repo и vault папке. Подробности: [[obsidian-sync]] ## Связанные заметки - [[truenas-access]] — SSH-доступ - [[truenas-rclone-backup]] — система бэкапов - [[obsidian-sync]] — Obsidian sync Eagle ↔ Taiga ↔ Kraken - [[openmediavault-rpi5]] — Kraken NAS (Hermes агент, sync)