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

15 KiB
Raw Blame History

title, created, updated, type, namespace, tags, related
title created updated type namespace tags related
Lampac на TrueNAS и Konka Q85 — рабочая схема 2026-10-30 2026-10-31 tech personal
lampac
truenas
konka
webos
timecode
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.

Дисковый кэш TorrServer — обновление 2026-10-31

Текущая настройка: 2 ГиБ кэша на диске, не в RAM: UseDisk=true, CacheSize=2147483648, TorrentsSavePath=/lampac/cache/torrserver, RemoveCacheOnDrop=true. На хосте это /mnt/RED_2TB/docker/lampac/cache/torrserver, существующий постоянный cache bind mount. Лимит памяти контейнера возвращён с4 к 2 ГиБ. После перехода фактическое потребление контейнера было около1 ГиБ. ОС/ZFS могут использовать освобождаемую память для файлового кэша; это не отдельная обязательная RAM-буферизация2 ГиБ в TorrServer.

Первоначально оставлен стандартный RAM-кэш96 МиБ, затем просьба увеличить его была неверно интерпретирована как2 ГиБ RAM. Владелец уточнил, что не хотел занимать столько оперативной памяти. После проверки исходников MatriX.135 включён штатный дисковый backend; ограничения, мешающего писать кэш на диск, нет.

Применение через оболочку Lampac /ts/settings вернуло500 и не изменило настройку. Повтор через авторизованный локальный API TorrServer 127.0.0.1:9085 внутри контейнера с приватными данными data/ts/accs.db сработал. Порт9085 наружу не открывался. Штатный SetSettings сбрасывает активные торренты/подключает движок заново, поэтому воспроизведение при смене режима может потребовать повторного открытия. Не обещать применение без сброса активного буфера.

Проверено фактически: UseDisk=true в API и сохранённом data/ts/settings.json; появились4 файла фрагментов,16 МиБ на диске; HTTP Range-запрос видеопотока получил206 и прочитал1 МиБ. Контейнер не пересоздавался. Прежние настройки: backups/torrserver-before-disk-cache.json, Compose: backups/compose-before-disk-cache.yml.

Фильм «Красота по-американски» — Remux31,37 ГиБ, средний битрейт36,9 Мбит/с. Замеры скачивания25–43 Мбит/с, запас в буфере ТВ4,8–6с. Поток шёл напрямую с 192.168.2.197:9118/ts/stream/…; прокси обслуживал TMDB. Увеличение кэша сглаживает временные просадки после заполнения, но не устраняет постоянную нехватку скорости раздачи. Файлы кэша вручную при активном потоке не удалять.

Серверы и исходники

  • 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; кэш TorrServer — 2 ГиБ на диске, порт опубликован только на LAN-адресе. GPU-транскодирование не настроено.
  • Kraken остаётся на официальном arm64-образе 1.87.3 и прежнем адресе http://192.168.1.14:9118.
  • Mac: /Users/admin/Developer/lampac-scripts, ветка main, Gitea.
  • Генератор: /Users/admin/Developer/watchlist-sync, ветка main, GitHub.
  • Точные Compose, init.conf, шаблоны и инструкция восстановления — 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.