[2026-09-14] eagle: family/how-to/truenas-infrastructure.md family/plans/t610-home-automation.md
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# TrueNAS — инфраструктура
|
||||
|
||||
> ✅ **ДОМАШНЯЯ АВТОМАТИЗАЦИЯ ПЕРЕНЕСЕНА НА HP t610 (2026-09-14).** HA, zigbee2mqtt, mosquitto, mbusd, modbus-bridge **и flows Node-RED** переехали на **t610** (HA OS, `192.168.2.176`). Единый документ по t610 — [[family/plans/t610-home-automation]]. **TrueNAS-стек автоматизации пока работает как есть — не отключён** (отключение = Этап 4). Причина переноса: TrueNAS на пределе RAM (17/21 ГБ).
|
||||
> ✅ **ДОМАШНЯЯ АВТОМАТИЗАЦИЯ ПЕРЕНЕСЕНА НА HP t610 (2026-09-14).** HA, zigbee2mqtt, mosquitto, mbusd, modbus-bridge **и flows Node-RED** переехали на **t610** (HA OS, `192.168.2.176`). Единый документ по t610 — [[family/plans/t610-home-automation]]. **✅✅ TrueNAS-стек автоматизации ПОГАШЕН 2026-09-14 (ночная сессия, §5-кватер-Л плана):** `homeassistant`, `mbusd`, `mosquitto`, `nodered`, `zigbee2mqtt`, `modbus-bridge`, `ser2net` → `docker stop` + `docker update --restart=no` (**НЕ удалены**, папки `docker/*` целы — откат = `docker start` + `--restart=unless-stopped`). Проверено: порты 502/1883/8123/1880 свободны, `mallexxx.*` = 200, MQTT на t610 живой. Причина переноса: TrueNAS на пределе RAM (17/21 ГБ).
|
||||
>
|
||||
> **2026-09-14 (вечер-2, обновлено вечер-13) — Caddy ПЕРЕКЛЮЧЁН, Node-RED ПЕРЕНЕСЁН:**
|
||||
> - **Caddy НЕ переносился и не будет:** 17 из 20 доменов `*.mallexxx.duckdns.org` — сервисы самого TrueNAS (immich, gitea, jellyfin, radarr, webdav, transmission, portainer…). Перенос Caddy на t610 положил бы их при падении t610. **✅ ПРАВКА ЗАВЕРШЕНА (факт-проверка 2026-09-14 вечер-13):** в `Caddyfile` остался **ОДИН** upstream на t610 — `mallexxx.duckdns.org` → `192.168.2.176:80` (HA, HTTP 200 ✅). **УБРАНЫ совсем:** `cam.mallexxx.duckdns.org` (камера на t610 по RTSP — домен не нужен) и `nodered.mallexxx.duckdns.org` (Node-RED — через ingress HA, решение Alex «оставляем так»). Caddyfile: `/mnt/RED_2TB/docker/caddy/Caddyfile` (root-owned — агент только стейджит в `/tmp/`, подменяет Alex), бэкап `Caddyfile.bak-20260914`. Порты контейнера: `8088:80`, `8443:443`; DNAT на роутере `192.168.2.2`: `wan:80→192.168.2.197:8088`, `wan:443→192.168.2.197:8443`.
|
||||
@@ -11,7 +11,7 @@
|
||||
> - **Результат:** ZONT пишет в mosquitto-**аддон на t610** (живой поток `modbus/sensors/kids/*`, `bedroom/*`). В настройках ZONT ничего не менялось (`mqtt://…@192.168.0.10:1883`, где `.0.10` = wan-интерфейс роутера `192.168.2.2`, не отдельный GPON-роутер).
|
||||
> - ✅ **`dining/*` тоже публикуется (2026-09-14, позже):** прежняя версия «ZONT не публикует / мёртвый upstream» — **❌ ОПРОВЕРГНУТА**. Причина была в **баге сборки RTU-кадров в `modbus-bridge`** (19-байтный кадр гостиной рвался), фикс `3748feb` → все 7 полей `dining` живы. Подробно — [[family/plans/t610-home-automation]] §5-кватер-З.
|
||||
> - **⚠️ «Камера на TrueNAS» — ИСПРАВЛЕНО (2026-09-14, вечер-10) + ✅ РЕШЕНО ОКОНЧАТЕЛЬНО (вечер-13):** прежняя запись «камера = USB-вебка на t610, upstream `cam.*:8090` к камере отношения не имеет» — **❌ НЕВЕРНА**. Поиск в `Caddyfile.bak` доказал: **`cam.mallexxx.duckdns.org → 192.168.2.197:8090` — ЭТО И БЫЛА камера** на TrueNAS: отдельный HTTP-MJPEG-сервис (`ustreamer`/`mjpg-streamer`, порт 8090 — канон для «USB-вебка → MJPEG»). **Контейнер УТРАЧЕН** при пересоздании пула (локальный образ не пережил `.ix-apps`; из живого Caddyfile строка удалена — `cam.*` больше нет). **✅ ФИНАЛ (вечер-13):** вебка `046d:0825` физически в **t610**, работает через **аддон `a889bffc_go2rtc-hardware`** → RTSP H.264 `rtsp://192.168.2.176:8554/usb_camera_h264` → **Generic Camera** `camera.192_168_2_176` (зона `kotelnaia`, `unique_id`, **WebRTC работает**, поворот `#rotate=90`). Схема `camera: platform: ffmpeg` в Core — **❌ ОТВЕРГНУТА** (`Resource busy` + нет `unique_id`). Подробно — [[family/plans/t610-home-automation]] §5-кватер-И-3/И-6.
|
||||
> - **Не перенесено с TrueNAS:** погашение TrueNAS-стека (Этап 4 п.6 — заблокировано: Caddy на TrueNAS держит точку входа). **⚠️ Обновлено (вечер-13):** Caddy-часть и ZONT MQTT **закрыты** (в `Caddyfile` на t610 ведёт только `mallexxx.*`, `cam.*`/`nodered.*` убраны; MQTT DNAT `.197`→`.176`). Осталась только остановка самого TrueNAS-стека.
|
||||
> - **Не перенесено с TrueNAS:** ~~погашение TrueNAS-стека (Этап 4 п.6 — заблокировано: Caddy на TrueNAS держит точку входа)~~ → **✅ ЗАКРЫТО 2026-09-14 (ночь): стек автоматизации ПОГАШЕН, Caddy остался на TrueNAS (так и задумано).** См. §5-кватер-Л в [[family/plans/t610-home-automation]].
|
||||
|
||||
> Обновлено: 2026-09-02 (vpn.mallexxx:443 = РАБОЧИЙ Xray-сервер, проверено end-to-end; vless-proxy outbound мёртв)
|
||||
|
||||
@@ -126,21 +126,21 @@ TrueNAS использует **NFSv4 ACL**, а не стандартный POSIX
|
||||
| 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 |
|
||||
| ~~homeassistant~~ ⛔ | home-assistant:stable | ~~8123~~ | **ПОГАШЕН 2026-09-14** — переехал на t610 |
|
||||
| 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 | — | — |
|
||||
| ~~nodered~~ ⛔ | nodered/node-red:latest | ~~1880~~ | **ПОГАШЕН 2026-09-14** — flows на t610 (ingress) |
|
||||
| ~~mosquitto~~ ⛔ | eclipse-mosquitto:latest | ~~1883~~ | **ПОГАШЕН 2026-09-14** — брокер на t610 |
|
||||
| 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 | — | — (переехал на t610) |
|
||||
| mbusd ⛔ | 3cky/mbusd:latest | 502 | Modbus (переехал на t610) |
|
||||
| modbus-bridge ⛔ | modbus-bridge | — | — (переехал на t610) |
|
||||
| ser2net ⛔ | ghcr.io/jippi/docker-ser2net | 502 | **ПОГАШЕН 2026-09-14** — spare-master, конфликт порта с mbusd |
|
||||
| cups-splix | cups-splix | 631 | принтер |
|
||||
| xray-admin | ghcr.io/mhsanaei/3x-ui:latest | 2053 (панель), 10095 (vless-ws), 443 (sub) | vpn-panel.mallexxx.duckdns.org, vpn.mallexxx.duckdns.org |
|
||||
| xray-reverse-portal | teddysun/xray:latest | 12345 (SOCKS), 12346 (VLESS-TCP REALITY interconn) | — (см. `personal/tech/xray-reverse-tunnel-kraken-truenas.md`) |
|
||||
@@ -184,9 +184,9 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
|
||||
|
||||
1. **docker engine:** `systemctl enable --now docker` (после создания data-root, см. шапку). Проверка: `docker info | grep -iE "Server Version|Docker Root Dir"`.
|
||||
2. **Инфраструктура/сеть:** mosquitto (MQTT) → zigbee2mqtt (нужен mosquitto) → nodered (MQTT) → caddy (прокси, тянет все домены) → vless-proxy (SOCKS5 для hermes).
|
||||
3. **Умный дом:** ⛔ **на TrueNAS БОЛЬШЕ НЕ ВОССТАНАВЛИВАТЬ** — переехало на t610 (см. «Декомиссия стека автоматизации»). mbusd (Modbus TCP:502) → modbus-bridge (через mbusd) → ha (homeassistant, нужен caddy для домена) — **всё это теперь аддоны на `192.168.2.176`**.
|
||||
3. **Умный дом:** ⛔ **на TrueNAS БОЛЬШЕ НЕ ВОССТАНАВЛИВАТЬ** — переехало на t610 (см. «Декомиссия стека автоматизации»), **стек ПОГАШЕН 2026-09-14**. `mbusd` (Modbus TCP:502) → `modbus-bridge` (через mbusd) → `ha` (homeassistant, нужен caddy для домена) — **всё это теперь аддоны на `192.168.2.176`**.
|
||||
4. **Медиа/хранилище:** transmission (нужен caddy) → arr (radarr/sonarr/prowlarr) → inpxer (books), inpx-web, library → rclone, syncthing, filebrowser, webdav, gitea. ⚠️ `inpxer`/`inpx-web`/`library` — на 2026-09-14 в циклическом краше (см. декомиссию).
|
||||
5. **Сервисы/свои:** hermes-taiga (нужен vless-proxy), portainer, portainer-mcp, watchtower, cups, ser2net.
|
||||
5. **Сервисы/свои:** hermes-taiga (нужен vless-proxy), portainer, portainer-mcp, watchtower, cups. ~~ser2net~~ — **погашен 2026-09-14** (конфликт порта 502 с mbusd).
|
||||
6. **Проверка:** `docker ps`. HA: `docker exec homeassistant python -m homeassistant --script check_config --config /config`.
|
||||
|
||||
### Transmission — детали
|
||||
@@ -281,7 +281,7 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
|
||||
|
||||
### Home Assistant на TrueNAS ⛔ **ХОЛОСТОЙ ЭКЗЕМПЛЯР (аудит 2026-09-14)**
|
||||
|
||||
> ⛔ **СТАТУС:** контейнер `homeassistant` `Up 5 дней`, но **рабочим не является** — `modbus.host` в `/mnt/RED_2TB/docker/ha/configuration.yaml` указывает на **`.197`** (сам TrueNAS), т.е. на шину, которой там больше нет (адаптеры на t610). Живая HA — **аддон на t610 `192.168.2.176`**, домен `mallexxx.duckdns.org` ведёт **туда** (Caddy → `192.168.2.176:80`). **Кандидат на снос (п.6 плана [[family/plans/t610-home-automation]]).**
|
||||
> ⛔ **СТАТУС (2026-09-14, ночь): КОНТЕЙНЕР ПОГАШЕН.** `docker stop homeassistant` + `docker update --restart=no`. Причина: `modbus.host` в `/mnt/RED_2TB/docker/ha/configuration.yaml` указывает на **`.197`** (сам TrueNAS) — шины там больше нет (адаптеры на t610), инстанс холостой. Живая HA — **аддон на t610 `192.168.2.176`**, домен `mallexxx.duckdns.org` ведёт **туда** (Caddy → `192.168.2.176:80`). **Папки и конфиги целы** — откат: `docker start homeassistant && docker update --restart=unless-stopped homeassistant`. Подробно — §5-кватер-Л в [[family/plans/t610-home-automation]].
|
||||
> 📌 Эталон конфига старой HA сохранён: `/mnt/RED_2TB/docker/ha/configuration.yaml` — modbus-блок построчно идентичен тому, что уехал на t610 (32 заслонки). Использовался как эталон при сверке зон/устройств.
|
||||
> ⚠️ Папки `docker/ha/` и `docker/homeassistant/` — **`homeassistant/` ПУСТАЯ**, рабочая — `ha/`.
|
||||
|
||||
@@ -311,7 +311,7 @@ ssh truenas_admin@mallexxx.duckdns.org "docker exec homeassistant python -m home
|
||||
### mbusd — Modbus RTU → TCP gateway ⛔ **ПЕРЕЕХАЛ НА t610 (2026-09-14)**
|
||||
|
||||
> ⛔ **СТАТУС (аудит 2026-09-14): контейнер на TrueNAS БОЛЬШЕ НЕ РАБОЧИЙ.** USB-адаптеры (CH340 ZONT/вентиляция) физически переехали на t610 → в `/sys/bus/usb` на TrueNAS только принтер Samsung `04e8:3425`. `/dev/ttyVent` **не существует**. Контейнер формально `Up` с `2026-08-25` (RestartCount=0), но спамит `tty_reopen(): can't open tty device /dev/ttyUSB0 (No such device or address)`. Маппинг `/dev/ttyVent` докер толерирует, пока device не пересоздавали. **Кандидат на снос (п.6 плана [[family/plans/t610-home-automation]]).**
|
||||
> 🔴 **Конфликт порта 502:** `mbusd` и `ser2net` **оба** публикуют `0.0.0.0:502` И оба просят `/dev/ttyVent`. `ser2net` в state `Created` (никогда не запущен). При попытке `start ser2net` будет конфликт портов. **Не поднимать оба одновременно.**
|
||||
> 🔴 **⚠️ ИСТОРИЯ (устранено 2026-09-14):** `mbusd` и `ser2net` **оба** публиковали `0.0.0.0:502` И оба просили `/dev/ttyVent`. `ser2net` был в state `Created` (никогда не запущен) — при `start ser2net` был бы конфликт портов. **✅ Оба погашены 2026-09-14** (`stop` + `--restart=no`), порт 502 на TrueNAS свободен. Не поднимать оба одновременно.
|
||||
|
||||
Мост Modbus RTU → TCP: пробрасывает серийный порт в TCP 502. ~~Используется и для вентиляции (AT2), и для ZONT-шины.~~ → **исторически**; на 2026-09-14 обе линии обслуживает mbusd **на t610**.
|
||||
|
||||
|
||||
@@ -1975,7 +1975,7 @@ curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
|
||||
| ~~5-нр~~ | ~~**Node-RED: flows перенесены с TrueNAS → t610**~~ — **✅ ЗАКРЫТО.** ~~Alex выбрал «выставить порт наружу»~~ → через API не удалось (`host_network` снимается только в UI, маппинг при нём игнорируется). **Alex: «ок. оставляем так»** — наружу НЕ выпущен, доступ через ingress. 68 узлов, `[server:Home Assistant] Connected to http://supervisor/core`, ошибок 0. Ключевая правка: узел `server` `addon: false` → `true`. Подробно — **§5-кватер-Г**. Остаётся на будущее (если понадобится домен): снять `host_network` в UI + Caddy → `:11880` | ✅ сделано |
|
||||
| 5-мк | **ZONT MQTT → t610** (остаток Этапа 4). Переключить на роутере `192.168.2.2` (OpenWrt) DNAT: `firewall.@redirect[0]` (name `MQTT`) `dest_ip` `.197`→`.176` **и** `firewall.@rule[3]` (name `allow-1883`) `dest_ip` `.197`→`.176`. В ZONT ничего не менять. Схема, питфоллы, проверки — **§5-кватер-Д**. ⚠️ Перед правкой: `uci export firewall > backup`. ⚠️ Порт 1883 t610 OPEN, юзер `zont` есть, пароль `mqtt1z3$` проверен | **✅ сделано 2026-09-14** — оба правила → `.176`, `uci commit` + firewall reload, ZONT пошёл в mosquitto t610 (живой поток kids/bedroom). Бэкап `/root/firewall.bak-20260914-092555` |
|
||||
| ~~5-арх~~ | ~~«Перенести Caddy на OpenWrt/t610»~~ — **❌ ОТВЕРГНУТО (§5-кватер-Б):** на OpenWrt 80/443 заняты `uhttpd`; у Caddy 17 доменов TrueNAS → при переносе падение t610 положит все медиасервисы. **Caddy остаётся на TrueNAS.** | — |
|
||||
| 6 | Остановить + отключить автозапуск сервисов на TrueNAS (не удалять — откат). **✅ РАЗБЛОКИРОВАНО 2026-09-14:** условие снято — п. **5-мк СДЕЛАН** (ZONT MQTT → t610). **Гасим ТОЛЬКО стек автоматизации:** `homeassistant` (8123), `mbusd` (502), `mosquitto` (1883), `nodered` (1880), + `zigbee2mqtt`/`modbus-bridge` если есть. **🔴 Caddy НЕ ГАСИТЬ и не переносить** — он не в списке, он рабочий элемент (17 доменов TrueNAS + `mallexxx.*` → t610) | **🔄 АУДИТ ПРОВЕДЁН 2026-09-14 (см. §5-кватер-Л).** Факты: `zigbee2mqtt` (Exited 2) и `modbus-bridge` (Exited 0) легли **синхронно 14.09 01:59** — сами, при переносе USB на t610; `mbusd` формально `Up` но спамит `can't open /dev/ttyUSB0` (адаптеров на TrueNAS НЕТ — в `/sys/bus/usb` только принтер Samsung `04e8:3425`); `homeassistant` Up, но `modbus.host=.197` → холостой. **Гасить (stop + `--restart=no`, НЕ `rm`):** `homeassistant`, `mbusd`, `mosquitto`, `nodered`, `zigbee2mqtt`, `modbus-bridge`. **Caddy НЕ трогать.** Побочная находка: `HA_TOKEN` открытым текстом в compose `modbus-bridge`. **Ждёт решения Alex:** `nodered` сразу или страховка 2 дня |
|
||||
| ~~6~~ | ~~Остановить + отключить автозапуск сервисов на TrueNAS (не удалять — откат). **✅ РАЗБЛОКИРОВАНО 2026-09-14:** условие снято — п. **5-мк СДЕЛАН** (ZONT MQTT → t610). **Гасим ТОЛЬКО стек автоматизации:** `homeassistant` (8123), `mbusd` (502), `mosquitto` (1883), `nodered` (1880), + `zigbee2mqtt`/`modbus-bridge` если есть. **🔴 Caddy НЕ ГАСИТЬ и не переносить** — он не в списке, он рабочий элемент (17 доменов TrueNAS + `mallexxx.*` → t610) | **🔄 АУДИТ ПРОВЕДЁН 2026-09-14 (см. §5-кватер-Л).** Факты: `zigbee2mqtt` (Exited 2) и `modbus-bridge` (Exited 0) легли **синхронно 14.09 01:59** — сами, при переносе USB на t610; `mbusd` формально `Up` но спамит `can't open /dev/ttyUSB0` (адаптеров на TrueNAS НЕТ — в `/sys/bus/usb` только принтер Samsung `04e8:3425`); `homeassistant` Up, но `modbus.host=.197` → холостой. **Гасить (stop + `--restart=no`, НЕ `rm`):** `homeassistant`, `mbusd`, `mosquitto`, `nodered`, `zigbee2mqtt`, `modbus-bridge`. **Caddy НЕ трогать.** Побочная находка: `HA_TOKEN` открытым текстом в compose `modbus-bridge`. **Ждёт решения Alex:** `nodered` сразу или страховка 2 дня | **✅✅ ВЫПОЛНЕНО 2026-09-14 (ночная сессия).** Alex: «Гасим nodered» + «ser2net тоже гасить» + «inpxer не трогай». **Погашено 7 контейнеров** (`docker stop` + `docker update --restart=no`, **НЕ `rm`**, папки `docker/*` целы): `homeassistant`, `mbusd`, `mosquitto`, `nodered`, `zigbee2mqtt`, `modbus-bridge`, **`ser2net`**. Все → `restart=no` / `exited`. **Проверено:** порты 502/1883/8123/1880 на TrueNAS **свободны**; `mallexxx.duckdns.org` **HTTP 200**; MQTT `modbus/#` на t610 живой (`23.11`/`25.04`); RTSP камеры `:8554` OPEN; `.197:502` CLOSED. **Caddy НЕ тронут.** `inpxer` / `inpx-web` / `library` по указанию Alex **НЕ трогались**. Полный разбор — **§5-кватер-Л** |
|
||||
| ~~7~~ | ~~Static IP для t610 на роутере (сейчас DHCP)~~ — **✅ ВЫПОЛНЕНО 2026-09-14 (вечер-8, §5-кватер-И-1):** `dhcp.@host[1]` = `t610` / MAC `9c:8e:99:ef:3f:c5` / `192.168.2.176`, бэкап `/root/dhcp.bak-20260914-104152` | ✅ закрыто |
|
||||
| 8 | Бэкап конфигов t610 → Mac + TrueNAS + git (Gitea `git.mallexxx.duckdns.org`). **📌 Добавить в бэкап:** `/config/.storage/http` (фикс `trusted_proxies`), сам `Caddyfile`, `/config/go2rtc.yaml` (камера + поворот `#rotate=90`), `/config/automations.yaml`, а также `data/config.template.tmpl` аддона `modbus-bridge` (там живёт маппинг реле котла) | **✅ СДЕЛАНА ЧАСТЬ 1/3 (2026-09-14):** git-синк в Gitea (`~/Automation/HA-ZONT-Modbus`, коммит `9d31118`, 4 файла: `configuration.yaml`, `automations.yaml`, `go2rtc.yaml`, `config.yml`). **✅ ЧАСТЬ 2/3 — АВТОБЭКАП НА TRUENAS РАБОТАЕТ** (см. §5-кватер-К). Осталась часть 3/3: копия на Mac. **⚠️ Caddyfile в автобэкап НЕ входит** — он на TrueNAS, не на t610 (учесть отдельно) |
|
||||
| ~~9~~ | ~~**Zigbee-реле котла → modbus-bridge**~~ — **✅✅ ВЫПОЛНЕНО + ПОДТВЕРЖДЕНО ALEX 2026-09-14 (вечер-13, §5-кватер-И-7):** `switch.boiler_controller_power` = **`slave 104, рег. 1`** (bidirectional). Бэкап `.bak-relay-20260914-200827` | ✅ закрыто |
|
||||
@@ -2041,6 +2041,85 @@ curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
|
||||
3. ~~**«Замерзание» лога bridge**~~ → **✅ РЕШЕНО:** тот же баг сборки кадров (байты-сироты копились в буфере, `[BUF-LEFT 1] 00` ×20). Устранён фиксом `3748feb`.
|
||||
4. **Этап 4 / погасить TrueNAS:** где живёт точка входа, если Caddy нельзя уносить с TrueNAS? (§5-кватер-Б) — **открыт**: Caddy оставлен на TrueNAS осознанно (17 из 20 доменов — сервисы TrueNAS).
|
||||
|
||||
### 5-кватер-Л. 🔻 Декомиссия дублирующего стека на TrueNAS (п.6) — АУДИТ (2026-09-14, поздняя)
|
||||
|
||||
**Триггер:** Alex — *«Переходим к сносу старых контейнеров на truenas?»*
|
||||
|
||||
**Подход:** не гасить «по списку из плана», а сначала **проверить фактом**, что реально живо, что мёртво само, и что нельзя трогать. Плановая формулировка п.6 («гасим `homeassistant`/`mbusd`/`mosquitto`/`nodered` + `zigbee2mqtt`/`modbus-bridge` если есть») оказалась верной по составу, но **не по причине** — половина уже мертва.
|
||||
|
||||
#### Л-1. 📋 Факты аудита (проверено, не гипотезы)
|
||||
|
||||
| Контейнер | Факт | Причина |
|
||||
|---|---|---|
|
||||
| `homeassistant` | `Up 5 дней` | **холостой**: `modbus.host` в `docker/ha/configuration.yaml` = `192.168.2.197` → шины на TrueNAS нет |
|
||||
| `mbusd` | `Up` с 2026-08-25, `RestartCount=0`, но лог 14:42: `tty_reopen(): can't open tty device /dev/ttyUSB0 (No such device or address)` | `/dev/ttyVent` **не существует** — USB-адаптеры уехали на t610 |
|
||||
| `mosquitto` | `Up 3 недели`, :1883 | ZONT переключён на `.176` (DNAT, п.5-мк) |
|
||||
| `nodered` | `Up 5 дней (healthy)`, :1880 | flows уже перенесены на t610 (68 узлов, п.5-нр) |
|
||||
| `zigbee2mqtt` | **`Exited (2)`, `FinishedAt=2026-09-14T01:59:03`** | `z2m: Adapter disconnected, stopping` — координатор на t610 |
|
||||
| `modbus-bridge` | **`Exited (0)`, `FinishedAt=2026-09-14T01:59:34`** | `/dev/ttyZONT` исчез |
|
||||
| `caddy` | `Up 4 часа` | **рабочий** — 17 доменов TrueNAS + `mallexxx.*` → `192.168.2.176:80` |
|
||||
| `ser2net` | **`Created`** (никогда не стартовал) | 🔴 конфликт: и `mbusd`, и `ser2net` публикуют `0.0.0.0:502` И оба просят `/dev/ttyVent` |
|
||||
| `library` | **`Restarting`, `RestartCount=29745`** | 🔴 циклический краш; Caddy на него ссылается → `library.mallexxx.duckdns.org` мёртв |
|
||||
| `inpx-web`, `inpxer` | `Exited (1)`, `RestartCount=13`, 3 недели | 🔴 циклический краш, к переезду не относятся |
|
||||
|
||||
> 🔑 **Маркер переезда:** `zigbee2mqtt` и `modbus-bridge` легли **синхронно в 01:59** — в момент физического переноса USB. Это доказывает: дубль перестал работать **сам**, а не «сломался от наших действий».
|
||||
|
||||
#### Л-2. 🔬 Методика аудита (для повторения)
|
||||
|
||||
```bash
|
||||
# кто жив + порты
|
||||
ssh truenas_admin@mallexxx.duckdns.org "docker ps -a --format '{{.Names}}\t{{.Status}}\t{{.Image}}\t{{.Ports}}'"
|
||||
# КТО ЧЕМ УПРАВЛЯЕТСЯ (ключевое — не Portainer-стек!)
|
||||
for c in $(docker ps -a --format '{{.Names}}'); do
|
||||
docker inspect $c --format '{{index .Config.Labels "com.docker.compose.project.config_files"}}'; done
|
||||
# почему умер: точное время/код + логи
|
||||
docker inspect zigbee2mqtt --format '{{.State.Status}} {{.State.ExitCode}} {{.State.FinishedAt}}'
|
||||
docker logs --tail 15 zigbee2mqtt
|
||||
# ЕСТЬ ЛИ ЖЕЛЕЗО (lsusb/dmesg недоступны truenas_admin!)
|
||||
ls /sys/bus/usb/devices/; cat /sys/bus/usb/devices/2-1.7/product; cat .../idVendor .../idProduct
|
||||
# кто ссылается — не сломать рабочие домены
|
||||
grep -nE '18080|18081|1880|8123|library|webdav' /mnt/RED_2TB/docker/caddy/Caddyfile
|
||||
```
|
||||
|
||||
**Установлено:**
|
||||
- **Все 31 контейнер — per-service compose** из `/mnt/RED_2TB/docker/<app>/`, НЕ Portainer-стеки. `/mnt/RED_2TB/docker/portainer/data/compose/` — **пусто**. Значит гасить надо `docker compose stop` из папки либо `docker stop` + `docker update --restart=no`.
|
||||
- На TrueNAS в `/sys/bus/usb/devices/` — только **Samsung CLX-216x `04e8:3425`** (принтер) и контроллеры Intel `8087:0024`. **CH340/координатора Zigbee физически нет.**
|
||||
- ❌ **ПИТФОЛЛ:** `lsusb` — `command not found`, `dmesg` — пусто без root. `midclt call app.query` → **`sudo: a terminal is required`**. Под `truenas_admin` работают **только `docker`-команды** и чтение `/sys`. Планировать аудит от этого.
|
||||
- ✅ Побочно: `/mnt/.ix-apps/app_configs` **пуста** → TRUE-Apps не установлены, всё ручной compose. Это норма для этого хоста.
|
||||
|
||||
#### Л-3. 🔴 Побочные находки (НЕ трогали, отдельные задачи)
|
||||
|
||||
1. **`library` — 29745 рестартов.** Caddy-блок `library.mallexxx.duckdns.org → library:8080` (basic_auth `books-admin`) ссылается на мертвяка → домен отдаёт 502. Нужно решать отдельно (чинить образ или убирать домен).
|
||||
2. **Конфликт порта 502:** `mbusd` (Up) и `ser2net` (`Created`) оба на `0.0.0.0:502` с одним и тем же `/dev/ttyVent`. **Не поднимать `ser2net`, пока жив `mbusd`.**
|
||||
3. **🔴 Секрет открытым текстом:** `HA_TOKEN` в `docker-compose.yml` контейнера `modbus-bridge` (env). Кандидат на ротацию — вместе с токеном в remote `nolvu-landing` (п. 3-гт).
|
||||
4. `inpx-web`/`inpxer` циклически падают с 24.08 — своя авария.
|
||||
|
||||
#### Л-4. ✅ Предложенный и принятый порядок (гасим, не удаляем)
|
||||
|
||||
```bash
|
||||
# 1) ОСТАНОВИТЬ (НЕ rm) — откат возможен
|
||||
ssh truenas_admin@mallexxx.duckdns.org \
|
||||
"docker stop homeassistant mbusd mosquitto nodered zigbee2mqtt modbus-bridge"
|
||||
# 2) снять автозапуск, чтобы не поднялись после ребута
|
||||
ssh truenas_admin@mallexxx.duckdns.org \
|
||||
"docker update --restart=no homeassistant mbusd mosquitto nodered zigbee2mqtt modbus-bridge"
|
||||
# 3) проверки живости (после гашения)
|
||||
curl -s -o /dev/null -w '%{http_code}\n' https://mallexxx.duckdns.org # 200 = t610 жив
|
||||
# ZONT MQTT: поток идёт в mosquitto на .176, а НЕ на .197
|
||||
```
|
||||
|
||||
**Правила (канон этого шага):**
|
||||
- ❌ **НЕ `docker rm`**, ❌ не удалять папки `/mnt/RED_2TB/docker/<app>/` — сначала «погасить»; откат = `docker start` + вернуть `restart: unless-stopped`.
|
||||
- ❌ **Caddy не гасить и не переносить** (17 из 20 доменов — сервисы TrueNAS).
|
||||
- ❌ `library` / `inpx-*` — **отдельным решением**, не в этом заходе.
|
||||
- ⏳ Папки удалять через 2–3 дня наблюдения — **отдельным шагом с подтверждением Alex**.
|
||||
|
||||
**⏳ Открытый вопрос к Alex:** `nodered` гасить сразу или оставить как страховку на 2 дня (flows уже на t610)?
|
||||
|
||||
**Детали инфраструктуры** продублированы в [[family/how-to/truenas-infrastructure]] → раздел «🔻 Декоммиссия стека автоматизации TrueNAS → t610».
|
||||
|
||||
---
|
||||
|
||||
### 5-кватер-К. 🔶 Бэкап конфигов t610 (п.8 / A3) — синк репо ✅ + план автобэкапа (2026-09-14, вечер-14)
|
||||
|
||||
**Триггер:** Alex — *«Поехали бэкап»*, затем уточнение — *«Нужно синкнуть в папку Automations то что изменилось по факту. Настроить автобэкап на truenas»*.
|
||||
@@ -3270,3 +3349,66 @@ ssh root@192.168.2.176 'ha apps rebuild local_modbus-bridge && ha apps restart l
|
||||
- [[family/how-to/nodered-ventilation]] — автоматика вентиляции в Node-RED (flows на t610)
|
||||
- [[family/how-to/truenas-sata-ports-and-zfs-pools]] — железо TrueNAS (диски/пулы, для контекста)
|
||||
- [[family/how-to/truenas-rclone-backup]] — rclone-бэкап TrueNAS → Mail.ru (куда ложить бэкапы t610, §5-кватер-К)
|
||||
|
||||
---
|
||||
|
||||
## §5-кватер-Л. 🔴 Снос/гашение стека автоматизации на TrueNAS (2026-09-14, ночная сессия)
|
||||
|
||||
**Триггер:** Alex — *«Переходим к сносу старых контейнеров на truenas?»* → уточнения: *«Inpxer не трогай»*, *«ser2net тоже гасить»*, *«Гасим nodered»*.
|
||||
|
||||
### Л-1. Аудит: почему гасим (факты, не гипотезы)
|
||||
|
||||
Стек на TrueNAS **уже был мёртв** — легли сами при переносе USB-адаптеров на t610:
|
||||
|
||||
| Контейнер | Состояние до | Факт-доказательство |
|
||||
|---|---|---|
|
||||
| `zigbee2mqtt` | `Exited (2)` с **14.09 01:59** | лог: `Adapter disconnected, stopping` → `Stopped Zigbee2MQTT`. Координатор уехал на t610 |
|
||||
| `modbus-bridge` | `Exited (0)` с **14.09 01:59** | `devices: /dev/ttyZONT:/dev/ttyUSB0` — узла `/dev/ttyZONT` на TrueNAS больше нет |
|
||||
| `mbusd` | формально `Up`, **фактически мёртв** | спамит `tty_reopen(): can't open tty device /dev/ttyUSB0 (No such device or address)` каждые 3 с. **USB-адаптеров на TrueNAS нет** — `ls /dev/ttyUSB*` пусто; в `/sys/bus/usb/devices` только Samsung-принтер `04e8:3425` (это `cups-splix`) |
|
||||
| `homeassistant` | `Up 5 days`, но **холостой** | `modbus.host: 192.168.2.197` (сам себя) → шина недостижима, инстанс не используется |
|
||||
| `mosquitto` | `Up 3 недели` | ZONT ушёл на `.176` (п.5-мк), :1883 TrueNAS больше никто не слушает |
|
||||
| `nodered` | `Up (healthy)`, :1880 | flows перенесены на t610 (68 узлов, §5-кватер-Г) |
|
||||
| `ser2net` | `Created` (никогда не стартовал) | **spare-master той же шины:** `connector: serialdev,/dev/ttyUSB0,9600n81` + `accepter: tcp,502` — при запуске подрался бы с `mbusd` за порт 502 |
|
||||
|
||||
**Момент истины — 14.09 01:59.** Всё синхронно: `homeassistant` `StartedAt=2026-09-09T03:06:19`, `nodered` `03:06:29`, `zigbee2mqtt` `03:06:40` — последняя волна рестарта 09.09, затем смерть 14.09 01:59.
|
||||
|
||||
### Л-2. Что сделано
|
||||
|
||||
```
|
||||
docker stop nodered homeassistant mbusd mosquitto zigbee2mqtt modbus-bridge ser2net
|
||||
docker update --restart=no <те же 7>
|
||||
```
|
||||
|
||||
**Результат:** все 7 → `restart=no`, `exited` (кроме `ser2net` → `created`, он и не стартовал).
|
||||
|
||||
- 🔴 **`rm` НЕ делали.** Папки `/mnt/RED_2TB/docker/{ha,mbusd,mosquitto,nodered,zigbee2mqtt,modbus-bridge,ser2net}/` **целы** — откат = `docker start` + `docker update --restart=unless-stopped`.
|
||||
- 🔴 **Caddy НЕ тронут** (17 доменов TrueNAS + `mallexxx.*` → t610).
|
||||
- **`inpxer` / `inpx-web` / `library` — НЕ трогались** (Alex: «inpxer не трогай»).
|
||||
|
||||
### Л-3. Верификация (после гашения)
|
||||
|
||||
| Проверка | Результат |
|
||||
|---|---|
|
||||
| `netstat` LISTEN на 502/1883/8123/1880 | **ни одного слушателя** ✅ |
|
||||
| `https://mallexxx.duckdns.org` (HA t610 через Caddy) | **HTTP 200** ✅ |
|
||||
| MQTT `modbus/#` на `192.168.2.176:1883` (`zont`/`mqtt1z3$`) | **живой поток** (`23.11`, `25.04`) ✅ |
|
||||
| RTSP камеры `192.168.2.176:8554` | **OPEN** ✅ |
|
||||
| `.197:502` | **CLOSED** ✅ |
|
||||
| Порт 80 на `192.168.2.176` | OPEN (Caddy ведёт сюда) |
|
||||
|
||||
> ⚠️ **Питфолл диагностики:** `curl http://192.168.2.176:8123` → **`HTTP 000`** — и это **НОРМА**, а не поломка. HA на t610 доступен **через Caddy**: `:80` (прокси) и `https://mallexxx.duckdns.org`; сам `:8123` на `.176` **закрыт**. Не принимать за регресс.
|
||||
|
||||
### Л-4. ⚠️ Найденные минные поля (НЕ трогались — отдельное решение Alex)
|
||||
|
||||
1. 🔴 **`library` рестартует циклически — `RestartCount=29745`.** Caddy на него ссылается (`library.mallexxx.duckdns.org → library:8080`, basic_auth `books-admin`) → **домен сейчас мёртв**. Создан 24.08 09:11, падает непрерывно.
|
||||
2. 🔴 **Конфликт порта 502 (устранён гашением).** До гашения: `mbusd` и `ser2net` **оба** мапили `0.0.0.0:502`, **оба** просили `/dev/ttyVent:/dev/ttyUSB0`. `ser2net` в `Created` → при старте **порт был бы занят**. Теперь оба `restart=no`, конфликт снят.
|
||||
3. 🔴 **`inpx-web` (порт 18081) и `inpxer` (порт 18080) — оба `Exited (1)`, `RestartCount=13`.** Caddy: `books.mallexxx.duckdns.org → 192.168.2.197:18080` → **ведёт в мёртвый `inpxer`**. По указанию Alex **не трогались**.
|
||||
4. ⚠️ **Секрет открытым текстом:** `HA_TOKEN` (long-lived HA, `eyJhbG...wkME`) прямо в `/mnt/RED_2TB/docker/modbus-bridge/docker-compose.yml` → `environment`. Кандидат на вынос в `.env` + ротацию. Также `MQTT_PASS: mqtt1z3$` там же.
|
||||
|
||||
### Л-5. Хвосты
|
||||
|
||||
- [ ] Откат при необходимости: `docker start <name>` + `docker update --restart=unless-stopped <name>`
|
||||
- [ ] **Удаление** — отдельным шагом, не раньше чем через 2–3 дня стабильной работы (Alex: сначала «остановить, не удалять»)
|
||||
- [ ] Разобраться с `library` / `inpx-web` / `inpxer` (минные поля Л-4)
|
||||
- [ ] Вынести `HA_TOKEN` из compose в `.env` + ротация
|
||||
- [ ] Ротация токена из remote `nolvu-landing` (хвост п.3-гт)
|
||||
|
||||
Reference in New Issue
Block a user