Files
obsidian-vault/personal/tech/lampac-truenas.md
T

89 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Lampac на TrueNAS и Konka Q85 — рабочая схема
created: '2026-10-30'
updated: '2026-10-30'
type: tech
namespace: personal
tags:
- lampac
- truenas
- konka
- webos
- timecode
related:
- '[[personal/tech/lampac-deployment]]'
- '[[personal/tech/konka-q85-novosibirsk]]'
- '[[family/how-to/truenas-infrastructure]]'
---
# Lampac на TrueNAS и Konka Q85 — рабочая схема
Проверено 2026-10-30. Lampac развёрнут на TrueNAS, клиент установлен на Konka Q85 в Новосибирске. Это аддон к официальному серверу, не форк Lampac.
## Серверы и исходники
- TrueNAS: `truenas_admin@mallexxx.duckdns.org`, каталог `/mnt/RED_2TB/docker/lampac`, адрес приложения `http://192.168.2.197:9118`.
- Обычный Docker Compose, не TrueNAS Apps. Контейнер `lampac`: официальный образ `ghcr.io/lampac-nextgen/lampac:1.87.3`, amd64, лимиты 2 ГБ RAM / 1 CPU, порт опубликован только на LAN-адресе. GPU-транскодирование не настроено.
- Kraken остаётся на официальном arm64-образе 1.87.3 и прежнем адресе `http://192.168.1.14:9118`.
- Mac: `/Users/admin/Developer/lampac-scripts`, ветка `main`, [Gitea](https://git.mallexxx.duckdns.org/git_admin/lampac-scripts).
- Генератор: `/Users/admin/Developer/watchlist-sync`, ветка `main`, [GitHub](https://github.com/mallexxx/watchlist-sync).
- Точные Compose, init.conf, шаблоны и инструкция восстановления — [deploy/README.md](https://git.mallexxx.duckdns.org/git_admin/lampac-scripts/src/branch/main/deploy/README.md). Приватные ключи и рабочие конфиги с секретами в git не добавляются.
## Konka и встроенные постеры
Konka Q85: `192.168.2.124`, webOS 7.5.6; приложение `com.lampac.tv` версии 1.0.0 установлено через существующий Homebrew Channel с проверкой SHA256 пакета. Его `lampac_url` в localStorage: `http://192.168.2.197:9118`. Настройку root/privacy не меняли; Developer Mode не устанавливали.
Пустые постеры имели два отдельных условия: NAS не получал TMDB напрямую, а клиентская автоматика могла выключать прокси. На ТВ сохранены **`proxy_tmdb=true` и `proxy_tmdb_auto=false`**. Одной настройки серверного poster fetcher недостаточно: при выключенном клиентском флаге CUB обращается к `image.tmdb.org` напрямую.
На NAS отдельный контейнер `lampac-egress` предоставляет SOCKS только внутри сети Lampac, без опубликованного порта. Он использует существующий авторизованный маршрут `kraken-user` через Caddy/VLESS и Kraken. Его приватный конфиг: `config-module/egress.json`, mode0640, group1000; шаблон без клиентского ID — в репозитории.
Прокси `socks5://lampac-egress:1080` включён в:
- `tmdb.proxyapi` и `tmdb.proxyimg` — встроенные TMDB/CUB;
- `posterApi` — постеры карточек Catalog;
- `serverproxy.image` — обработчик изображений.
**Глобальный прокси для HTTP/видео не включён.** Проверенный тестовый видеопоток шёл напрямую с LAN-адреса NAS. Общий `vless-proxy` не меняли; при проверке его исходящие TLS-соединения обрывались. Это наблюдение на дату настройки, а не установленная причина отказа общей инфраструктуры.
Внутренний вход Caddy — `192.168.2.197:8443`, TLS-имя `vpn.mallexxx.duckdns.org`. На `192.168.2.197:443` находится интерфейс TrueNAS: использовать его вместо 8443 нельзя, сертификат другой.
## Единая история без синхронизации SQLite
Рабочая TimeCode находится на TrueNAS в постоянном `database/TimeCode.sql`. Kraken-клиент обращается к тому же серверу через HTTPS API. **Двусторонней репликации SQLite, rsync БД или общего сетевого файла БД нет.**
История из Kraken перенесена один раз штатными `/timecode/dump` → `/timecode/set`; сохранены все 9 записей и их прогресс. Оба сервера используют одинаковый серверный `instance.uid`; профили остаются отдельными областями. Старая БД Kraken оставлена для отката.
В существующем HTTPS-сайте Caddy выделен префикс `https://git.mallexxx.duckdns.org/lampac-history` с точным списком TimeCode-маршрутов. Без правильного `history_key` — 404; прочие маршруты Lampac наружу через него не открыты. Gitea продолжает работать. Выполнен reload Caddy, не перезапуск общего сервиса.
Ключ транспорта называется **`history_key`, не `token`**: `token` в Lampac меняет владельца данных. В сгенерированном клиенте и чтение, и запись должны независимо передавать `uid`; это проверяется исполнением реальных URL-методов в тесте.
Kraken: приватный результат `scripts/build_timecode.py` установлен в `config-module/timecode-plugin.js`, примонтирован в `/lampac/module/Sync/TimeCode/plugin.js:ro`. NAS использует штатный локальный TimeCode-клиент. Межсайтовые WebSocket-уведомления не добавлялись; прогресс читается при обновлении карточки/таймлайна.
## Каталог и отметки Obsidian
Единственный генератор и писатель Obsidian остаётся на Kraken. Ночной `/home/kraken/scripts/watchlist-nightly.sh` после сборки каталога публикует готовые JSON на NAS через `publish_feed.py`.
На NAS ключ приёма ограничен `restrict` и forced command `receive_feed.py --root /mnt/RED_2TB/docker/lampac`. Принимаются только файлы каталога; SQL, ссылки, пути вне разрешённого списка и код отклоняются. Файлы заменяются атомарно по одному, карточки раньше основного манифеста. Проверена публикация 544 файлов.
`watchlist-sync` читает общий HTTPS dump через `LAMPAC_TIMECODE_DB` в приватном `.env`. Проверен dry-run: 9 записей, изменений списка не внесено. Второй генератор/писатель на NAS не запущен. Порог отметки фильма — 90%; существующее поведение сериалов этим изменением не расширялось.
## Данные и бэкапы
Постоянные `wwwroot` и `data` при первой установке нужно заполнить из образа до запуска. Пустые bind mounts скрывают и frontend, и резервные Cloudflare IP-файлы; при недоступной сети это приводило к падению старта. Конфиги должны читаться uid1000: режим0600 после SCP для `init.conf` не подходит.
Контейнер пишет от uid1000/gid1000, администратор NAS — uid950 в группе1000. **`TimeCode.sql`, `-wal`, `-shm` должны иметь mode0664 и group1000.** Read-only SQLite-подключение тоже может создавать WAL/SHM. Первый бэкап от uid950 создал их с0644, после чего сервер не мог записывать прогресс. Владельцы/права исправлены, старые подключения закрыты перезапуском только Lampac.
`scripts/backup_history.py` перед открытием проверяет group write, закрывает подключения, использует SQLite online backup и проверку целостности. NAS crontab: ежедневно04:27 по времени хоста, хранение30 дней в `backups/timecode`. Часовой пояс приложения — Asia/Novosibirsk; расписание cron не следует автоматически считать этим часовым поясом. Это локальный бэкап, не синхронизация БД.
После исправления проверена API-запись **до и после повторного бэкапа**; все 9 записей и значения прогресса сохранены. Для отката сохранены прежние Compose/Caddy/настройки и снимки истории. Живую БД обычным копированием не подменять.
## Что проверено
- HTTP200 и окончание запуска `Configure complete`; одного Docker healthcheck недостаточно.
- Реальный поиск «дюна» на Konka через экранную клавиатуру: результаты получены, JavaScript-ошибок нет, вкладка watchlist одна.
- На видимом экране: 7 встроенных и28 каталожных постеров загружены, сломанных0; настройки прокси подтверждены после перезагрузки приложения.
- Плеер Lampac декодировал тестовый H.264-поток640×360 с NAS: время увеличивалось, `readyState=4`, ошибки отсутствовали. Непрерывный пяти-/десятиминутный тест, реальная онлайн-раздача и звук на слух отдельно не подтверждены.
- 10 автоматических тестов: 5 поиска, 3 развёртывания/истории/бэкапа, 2 чтения TimeCode API.
- Изменения запушены в обе репозитории; локальные копии в Developer обновлены. Временный установщик на роутере18085, ролик и диагностические SSH-перенаправления удалены.
Связано: [[personal/tech/lampac-deployment]], [[personal/tech/konka-q85-novosibirsk]], [[family/how-to/truenas-infrastructure]], [[personal/plans/lampac-watched-to-watchlist]].