Lampac NextGen — self-hosted backend для Lampa (Docker)

Локальное развёртывание Lampac NextGen — активного форка оригинального Lampac, чей основной репозиторий больше не поддерживается.

Почему этот форк

Оригинальный Lampac (Mirrowol/Lampac) давно не обновляется. Из форков наибольшую популярность набрал lampac-nextgen/lampac:

Показатель Значение
Репозиторий https://github.com/lampac-nextgen/lampac
Stars / Forks ~347 / ~80 (самый популярный форк Lampac)
Активность ежедневные коммиты, релизы (последний v1.61.2 — 30.09.2026)
Стек ASP.NET Core, .NET 10, AGPL-3.0
Docker-образ ghcr.io/lampac-nextgen/lampac (amd64 + arm64)
Документация https://docs.lampac.dev
Чат https://t.me/LampacTalks/13998

Что умеет: агрегация ссылок с 70+ VOD/аниме/18+ источников, встроенный TorrServer, DLNA, JacRed, транскодинг (GStreamer/FFmpeg), синхронизация закладок, хостинг Lampa UI, Telegram-уведомления, WAF и многое другое.

Структура проекта

Lampac/
├── docker-compose.yaml            # Единственный compose-файл (порт 9118)
├── config/
│   ├── init.conf                  # Конфигурация сервера (JSON, hot-reload)
│   └── passwd                     # Пароль root (СЕКРЕТ, не коммитить)
├── modules/                       # Резервные копии manifest-файлов (НЕ монтируются, см. ниже)
├── mods/                          # Копии модулей с enable: true (том ./mods:/lampac/mods)
├── cache/                         # Кеш (монтируется в /lampac/cache)
├── database/                      # SQLite-БД: Sync, TimeCode, SISI (→ /lampac/database)
├── dlna/                          # Данные DLNA (медиа/превью, → /lampac/data/dlna)
├── README.md                      # Эта документация
├── AGENT.md                       # Инструкции для AI-агента
└── .gitignore

Важно: том ./mods:/lampac/mods в docker-compose.yaml обязателен — без него копии модулей не попадают в контейнер, и 10 модулей (Tracks, Music, Tg-notify.bot, WatchTogether, AdminPanel, ExternalBind, LogUserRequest-Lite, Telemetry, Transcoding, DatabaseEditor) не загружаются (в логах нет loaded module: <Name>, роуты вроде /tracks.js отдают 404, в Lampa при установке из магазина/по URL — ошибка «модуль нет»).

Быстрый старт

Требования: Docker 24+ с Compose v2 (проверка: docker compose version).

# 1. Запуск
docker compose up -d

# 2. Проверка
curl -fsS "http://localhost:9118/version?type=hash"   # должен вернуть hash
curl -fsS -o /dev/null -w '%{http_code}\n' http://localhost:9118/online.js  # 200

# 3. Логи / статус
docker compose logs -f lampac
docker compose ps

Доступ

Сервис URL
Веб-интерфейс (Lampa UI) http://localhost:9118/
Плагин Online для Lampa http://localhost:9118/online.js
Плагин SISI (18+) http://localhost:9118/sisi.js
Плагин DLNA для Lampa http://localhost:9118/dlna.js
Проверка версии http://localhost:9118/version?type=hash

Чтобы подключить сервер к Lampa: откройте Lampa → Настройки → «Другие сервисы» (или вставьте адрес вручную) → http://IP_МАШИНЫ:9118.

Для доступа с других устройств локальной сети используйте LAN-IP машины, например http://192.168.x.x:9118 (порт уже проброшен на 0.0.0.0).

Конфигурация

config/init.conf

Основной конфиг (JSON). Перечитывается автоматически без перезапуска контейнера (watcher каждую секунду, бэкапы — внутри контейнера в /lampac/database/backup/init/). После правки достаточно сохранить файл.

Ключевые разделы:

{
  "listen": { "ip": "0.0.0.0", "port": 9118, "scheme": "http" },
  "BaseModule": {
    "SkipModules": [/* выключенные модули, см. ниже */]
  },
  "LampaWeb": { "initPlugins": { "dlna": true } },  // флаги клиентских плагинов в /lampainit.js (online, sisi, torrserver, jacred, cubProxy и др. уже true в base.conf)
  "TorrServer": { "enable": true, "tsport": 9085, "releases": "latest" },
  "TelegramBot": { "enable": true, "bot_token": "", "lampac_host": "http://127.0.0.1:9118" },
  "chromium": { "enable": true },   // Playwright для обхода JS-защит
  "online": { "name": "Lampac NextGen" },
  "sisi": { "NextHUB": true }
}

Текущий набор модулей

Включены все модули (проверка: docker logs lampac | grep -c "loaded module" → 117):

  • BaseModule.SkipModules в init.conf — пуст ([]): ни один модуль и ни одна группа (OnlineAnime, OnlinePaid, OnlineGEO...) не исключён.
  • 10 модулей, которые в образе идут с "enable": false (AdminPanel, DatabaseEditor, ExternalBind, LogUserRequest-Lite, Music, Telemetry, Tg-notify.bot, Tracks, Transcoding, WatchTogether), подняты штатным способом по docs: копии их каталогов с "enable": true лежат в mods/ на хосте и смонтированы одним томом ./mods:/lampac/mods.

Клиентские плагины (что подключается в Lampa автоматически через /lampainit.js) управляются флагами LampaWeb.initPlugins в init.conf. Сейчас подключены: dlna (флаг в init.conf), а из base.conf: online, sisi, torrserver (/ts.js), jacred (записывает jackett_url — отдельного /jacred.js у модуля нет), cubProxy, tmdbProxy, timecode, pirate_store.

Установка плагинов через веб (Настройки → Плагины)

  • По URL (работает всегда): «Добавить вручную» → http://IP:9118/tracks.js, http://IP:9118/music.js, http://IP:9118/tg-notify.js, http://IP:9118/watchtogether.js и т.д. Полный список плагинов модулей: https://docs.lampac.dev/modules/overview
  • Внешние URL из каталога магазина — работают.
  • Дефект образа: 15 записей каталога магазина ссылаются на 127.0.0.1:9118/plugins/*.js (pubtorr, checker, hotkeys, torrents...) — таких файлов не существует (HTTP-роута /plugins/ нет в коде). Такие записи из магазина не устанавливайте — используйте прямой внешний URL (для PubTorr это https://lampame.github.io/main/pubtorr.js, подключён через LampaWeb.customPlugins).

Список всех модулей и маршрутов: https://docs.lampac.dev/modules/overview

TorrServer

Включён (TorrServer в init.conf, бинарник сам скачивается с GitHub в /lampac/data/ts/). Доступ только из локальной сети:

  • внутренний порт TorrServer 9085 не проброшен на хост — снаружи он недоступен;
  • внешний доступ идёт только через прокси http://LAN_IP:9118/ts/ (порт 9118 в compose);
  • из интернета сервер не доступен, пока порт 9118 закрыт файрволом/роутером (см. «Безопасность»).

Пароль (tspass) генерируется при старте; Web-UI — http://LAN_IP:9118/ts/.

Tg-notify (Telegram-бот)

Модуль Tg-notify.bot загружен (включён через mods/Tg-notify.bot), но long polling не стартует, пока не задан токен: впишите bot_token (от @BotFather) в секцию TelegramBot файла init.conf — конфиг подхватится автоматически. Опционально: tmdb_api_key, trakt_client_id, kp_api_key (описание полей — в README модуля). Клиентский плагин — http://IP:9118/tg-notify.js.

DLNA в интерфейсе Lampa

Чтобы плагин DLNA появился в Lampa, нужно две вещи:

  1. Модуль загружен (уже включён: loaded module: DLNA).
  2. Флаг LampaWeb.initPlugins.dlna в init.conf — именно он решает, попадёт ли DLNA в список плагинов, который Lampac отдаёт клиенту (/lampainit.js). Сейчас выставлен true; без него Lampa плагин не увидит (модуль работает, а пункт в меню не появляется).
"LampaWeb": { "initPlugins": { "dlna": true } }

Аналогично включаются флаги tracks, catalog, dorama, sync, backup, watch_together и др. (список — LampaWeb/Models/InitPlugins.cs, дефолты — в current.conf).

После правки перезагрузите страницу Lampa — lampainit.js сам добавит плагин (Lampa.Plugins.add) и он появится в Настройки → Плагины (со статусом включён). Ручное добавление по ссылке тоже работает: http://IP_МАШИНЫ:9118/dlna.js. Прямой UI модуля — http://IP_МАШИНЫ:9118/dlna.

В магазине плагинов (Настройки → Плагины/«Магазин») каталог отдаётся из /extensions — образного файла LampaWeb/plugins/extensions.json (DLNA по умолчанию нет, но плагин и так подключается автодобавлением из initPlugins). Магазин кешируется (Staticache) — после любых правок образного файла кеш надо сбросить: удалить cache/static/63/* (каталог по хешу URL) или весь cache/static/.

AdminPanel

Веб-админка Lampac: правка init.conf/current.conf, пользователи users.json. Модуль включён (через mods/AdminPanel).

  • Вход: http://IP_МАШИНЫ:9118/adminpanel/auth — пароль из config/passwd (cookie accspasswd, живёт 180 дней).
  • Панель: http://IP_МАШИНЫ:9118/adminpanel (без входа — 302 на страницу auth).
  • Доступ к админке не открывайте в интернет без защиты — см. README модуля AdminPanel.

config/passwd

Пароль учётной записи root в одну строку (используется для служебных функций и WebLog). Сгенерирован при установке; для смены отредактируйте файл и перезапустите контейнер: docker compose restart lampac.

Обновление

docker compose pull
docker compose up -d

Данные (init.conf, passwd, mods/, cache/, database/, dlna/) переживают обновление, т.к. смонтированы томами. Внимание: содержимое mods/ — копии из образа, при обновлении образа его вручную не переносят (при расхождении версий модуль может не скомпилироваться — тогда пересоздать копию из свежего контейнера, см. AGENT.md).

Перенос на другой сервер

Игнорируемые пути (.gitignore): config/passwd, cache/, database/, dlna/, .DS_Store.

Копировать обязательно:

docker-compose.yaml
config/init.conf     # вся конфигурация
config/passwd        # СЕКРЕТ — переносить вне git (scp/rsync)
mods/                # копии модулей с enable: true (иначе 10 модулей не загрузятся)
README.md AGENT.md .gitignore

Копировать по желанию (данные пользователя, иначе создадутся заново):

database/            # закладки Sync, позиции TimeCode, SISI, библиотека Music
dlna/                              # медиа/превью DLNA

Не копировать — регенерируется автоматически: cache/, содержимое /lampac/data внутри контейнера (GeoLite2, ffmpeg/ffprobe, бинарник TorrServer, Lampa UI).

Порядок переноса: скопировать файлы → docker compose up -d → health-check: curl "http://localhost:9118/version?type=hash". Порт 9118 и пути в compose относительные — правок не требуется.

Развёртывание на Proxmox (LXC)

Постоянный продакшн: LXC-контейнер 121 (lampac) на Proxmox 192.168.88.254, IP контейнера 192.168.88.23 (DHCP).

Параметр Значение
Шаблон local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst
Тип unprivileged, features: nesting=1,keyctl=1 (нужно Docker), onboot: 1
Ресурсы 2 cores / 4096 MB / 32 GB (local-lvm), swap 512
Сеть vmbr0, DHCP → 192.168.88.23
Docker docker.io + compose v2-плагин в /usr/local/lib/docker/cli-plugins/docker-compose
Проект /opt/lampac (rsync с рабочей машины, .git не копируется)
Доступ SSH по ключу ~/.ssh/id_rsa_prodik (pubkey в /root/.ssh/authorized_keys контейнера)

SMB для DLNA — \\10.6.0.1\Torrents:

  • Монтируется на хосте Proxmox в /mnt/torrents (fstab, credentials=/root/.smb_cred, umask 600 на креды) и пробрасывается в контейнер как mp0: /mnt/torrents.
  • Причина: unprivileged LXC не может монтировать cifs сам — ядро требует CAP_SYS_ADMIN в init user namespace (mount error: Operation not permitted, не AppArmor).
  • uid=101000,gid=101000 в fstab: маппинг LXC 0→100000, поэтому в контейнере файлы видны как 1000:1000 — приложение (lampac, uid 1000) может писать превью в thumbs/.
  • Том подключён через docker-compose.override.yml (не в git): services.lampac.volumes: [/mnt/torrents:/lampac/data/dlna] — базовый docker-compose.yaml остаётся с ./dlna, rsync-обновления его не ломают.

Проверка после развёртывания:

ssh root@192.168.88.23
cd /opt/lampac && docker compose up -d
docker ps --filter name=lampac        # healthy
for u in "/version?type=hash" /online.js /ts/ /dlna /extensions; do
  curl -s -o /dev/null -w "%{http_code} $u\n" "http://127.0.0.1:9118$u"; done   # все 200

Полезные команды

docker compose restart lampac    # перезапуск
docker compose stop lampac       # остановить
docker compose down              # остановить и удалить контейнер (тома сохраняются)
docker compose logs -f --tail 100 lampac   # логи
docker compose exec lampac sh    # шелл внутри контейнера
docker compose pull && docker compose up -d   # обновление до свежего latest

Безопасность

  • Порт 9118 проброшен на все интерфейсы — при выходе в интернет закройте его файрволом или поднимите reverse proxy с аутентификацией. Внутренний порт TorrServer (9085) не проброшен вовсе: он доступен только контейнеру, внешний доступ к TorrServer идёт исключительно через /ts/ на 9118.
  • Модули DLNA, Tracks, Transcoding, GStreamer, Catalog не экранируют входящие запросы — не открывайте их публично без защиты.
  • config/passwd содержит секрет — файл добавлен в .gitignore.

Git-репозиторий

Код проекта хранится в Gitea: ssh://git@gitea.prodik.ru:222/prodik/lampac.git.

  • main (эта ветка) — относительные пути томов (подходит для любого сервера).
  • synology — то же содержимое, но docker-compose.yaml адаптирован под Synology NAS: абсолютные пути /volume1/docker/lampac/..., тома /volume4/Torrents и Курсы.
git remote -v        # origin должен указывать на этот репозиторий
git add -A           # секреты/данные не попадут (.gitignore)
git commit -m "описание"
git push origin main

В git попадают только: docker-compose.yaml, config/init.conf, mods/** (включённые модули), modules/** (резервные копии манифестов, не монтируются), README.md, AGENT.md, .gitignore. Секреты (passwd), cache/, database/, dlna/ — в .gitignore.

Ссылки

S
Description
No description provided
Readme
39 MiB
Languages
JavaScript 80.4%
CSS 9.5%
C# 6.4%
HTML 3.5%
Python 0.1%