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, нужно две вещи:
- Модуль загружен (уже включён:
loaded module: DLNA). - Флаг
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(cookieaccspasswd, живёт 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: маппинг LXC0→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.
Ссылки
- Репозиторий форка: https://github.com/lampac-nextgen/lampac
- Документация: https://docs.lampac.dev
- Быстрый старт: https://docs.lampac.dev/quickstart
- Docker: https://docs.lampac.dev/deployment/docker
- Конфигурация: https://docs.lampac.dev/configuration/overview
- Релизы: https://github.com/lampac-nextgen/lampac/releases