9.8 KiB
TrueNAS — инфраструктура
Обновлено: 2026-05-29
Доступ
- 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 с них недоступен
- ⚠️ Кра́кен и TrueNAS — разные сети (192.168.1.x vs 192.168.2.x). Доступ с Кракена на TrueNAS по локальному IP не работает
- Host (external):
mallexxx.duckdns.org(DuckDNS) — единственный способ SSH/API из 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 <path>- Добавить запись:
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 🔒 basicauth (user: books-admin) |
| library.mallexxx.duckdns.org | library-app :8080 🔒 basicauth (user: books-admin) |
| 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 | через общий токен, SOCKS5 прокси vless-proxy:1080 |
| Модель | DeepSeek Chat (deepseek/deepseek-chat) |
| Auxiliary | OpenRouter (openrouter/auto) |
| Vault (хост) | /mnt/RED_2TB/storage/obsidian |
| Vault (контейнер) | /vault:rw |
| obsidian-mcp | /opt/data/.local/bin/mcpvault /vault |
| Scope | sparse: personal/ + family/ |
| Toolsets | hermes-cli, file, web, browser |
| web_search | Tavily (TAVILY_API_KEY в .env) |
| web_extract | ✅ HTTP-парсинг |
| browser | ✅ Playwright/Chromium (headless, JS-heavy сайты) |
| Прокси | SOCKS5 vless-proxy:1080 (HTTP/HTTPS/Telegram — все через прокси) |
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
# Запустить 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)