Содержимое ветки заменено на актуальное из main: - docker-compose.yaml (ghcr.io/lampac-nextgen/lampac, относительные пути) - config/init.conf, modules/ (override-файлы) - README.md, AGENT.md, .gitignore Старый деплой (immisterio/lampac, configs/, plugins/, update.sh) удалён.
226 lines
14 KiB
Markdown
226 lines
14 KiB
Markdown
# Lampac NextGen — self-hosted backend для Lampa (Docker)
|
||
|
||
Локальное развёртывание **[Lampac NextGen](https://github.com/lampac-nextgen/lampac)** — активного форка оригинального 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 и многое другое.
|
||
|
||
## Структура проекта
|
||
|
||
```text
|
||
Lampac/
|
||
├── docker-compose.yaml # Единственный compose-файл (порт 9118)
|
||
├── config/
|
||
│ ├── init.conf # Конфигурация сервера (JSON, hot-reload)
|
||
│ └── passwd # Пароль root (СЕКРЕТ, не коммитить)
|
||
├── modules/ # Overridе-файлы, монтируемые поверх файлов образа
|
||
│ ├── Tracks/manifest.json
|
||
│ ├── Music/manifest.json
|
||
│ ├── Tg-notify.bot/manifest.json
|
||
│ ├── AdminPanel/manifest.json
|
||
│ └── LampaWeb/plugins/extensions.json # каталог магазина плагинов (+DLNA)
|
||
├── cache/ # Кеш (монтируется в /lampac/cache)
|
||
├── database/ # SQLite-БД: Sync, TimeCode, SISI (→ /lampac/database)
|
||
├── dlna/ # Данные DLNA (медиа/превью, → /lampac/data/dlna)
|
||
├── README.md # Эта документация
|
||
├── AGENT.md # Инструкции для AI-агента
|
||
└── .gitignore
|
||
```
|
||
|
||
## Быстрый старт
|
||
|
||
Требования: Docker 24+ с Compose v2 (проверка: `docker compose version`).
|
||
|
||
```bash
|
||
# 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 |
|
||
| AdminPanel (вход) | http://localhost:9118/adminpanel/auth |
|
||
| Проверка версии | 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/`). После правки достаточно сохранить файл.
|
||
|
||
Ключевые разделы:
|
||
|
||
```jsonc
|
||
{
|
||
"listen": { "ip": "0.0.0.0", "port": 9118, "scheme": "http" },
|
||
"BaseModule": {
|
||
"SkipModules": [/* выключенные модули, см. ниже */]
|
||
},
|
||
"LampaWeb": { "initPlugins": { "dlna": true } }, // попадание плагина в список клиента Lampa
|
||
"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 }
|
||
}
|
||
```
|
||
|
||
### Текущий набор модулей
|
||
|
||
**Выключены** (`BaseModule.SkipModules`): `OnlineAnime`, `OnlineUKR`, `OnlinePaid`, `OnlineGEO`, `Transcoding`, `WebLog`.
|
||
|
||
**Включены дополнительно к стартовому набору:**
|
||
|
||
- `Catalog`, `JacRed`, `Sync` (вместе с `Storage`, `SyncEvents`, `TimeCode`), `TorrServer`, `DLNA`, `SISI` — убраны из `SkipModules`.
|
||
- `Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel` — включены через manifest-оверрайды в `modules/*/manifest.json` (в образе у них `enable: false`; файлы монтируются поверх `/lampac/module/<Name>/manifest.json`).
|
||
|
||
Чтобы выключить/включить любой другой модуль — добавьте или уберите его имя в `SkipModules` (имя = имя папки в `/lampac/module/`, включая группы вроде `OnlineAnime`). Изменение применяется после `docker compose restart lampac` (SkipModules не hot-reload). Убрать из списка группу `Sync` целиком отключит и `TimeCode`/`Storage`/`SyncEvents`.
|
||
|
||
Список всех модулей и маршрутов: 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` загружен, но long polling не стартует, пока не задан токен: впишите `bot_token` (от [@BotFather](https://t.me/BotFather)) в секцию `TelegramBot` файла `init.conf` — конфиг подхватится автоматически. Опционально: `tmdb_api_key`, `trakt_client_id`, `kp_api_key` (описание полей — в README модуля).
|
||
|
||
### DLNA в интерфейсе Lampa
|
||
|
||
Чтобы плагин DLNA появился в Lampa, нужно две вещи:
|
||
|
||
1. **Модуль** загружен (уже включён: `loaded module: DLNA`).
|
||
2. **Флаг `LampaWeb.initPlugins.dlna`** в `init.conf` — именно он решает, попадёт ли DLNA в список плагинов, который Lampac отдаёт клиенту (`/lampainit.js`). Сейчас выставлен `true`; без него Lampa плагин не увидит (модуль работает, а пункт в меню не появляется).
|
||
|
||
```jsonc
|
||
"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 по умолчанию нет. Добавлена запись через override: `modules/LampaWeb/plugins/extensions.json` (секция «Lampac» в начале каталога) монтируется поверх образного файла. Магазин кешируется (`Staticache`) — после правки этого файла кеш надо сбросить: удалить `cache/static/63/*` (каталог по хешу URL) или перезапустить контейнер.
|
||
|
||
### AdminPanel
|
||
|
||
Веб-админка Lampac: правка `init.conf`/`current.conf`, пользователи `users.json`.
|
||
|
||
- Вход: `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`.
|
||
|
||
## Обновление
|
||
|
||
```bash
|
||
docker compose pull
|
||
docker compose up -d
|
||
```
|
||
|
||
Данные (`init.conf`, `passwd`, `cache/`, `database/`, `modules/`, `dlna/`) переживают обновление, т.к. смонтированы томами.
|
||
|
||
## Перенос на другой сервер
|
||
|
||
Игнорируемые пути (`.gitignore`): `config/passwd`, `cache/`, `database/`, `dlna/`, `.DS_Store`.
|
||
|
||
**Копировать обязательно:**
|
||
|
||
```bash
|
||
docker-compose.yaml
|
||
config/init.conf # вся конфигурация
|
||
config/passwd # СЕКРЕТ — переносить вне git (scp/rsync)
|
||
modules/ # override-файлы (manifest ×4, extensions.json)
|
||
README.md AGENT.md .gitignore
|
||
```
|
||
|
||
**Копировать по желанию** (данные пользователя, иначе создадутся заново):
|
||
|
||
```bash
|
||
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 относительные — правок не требуется.
|
||
|
||
## Полезные команды
|
||
|
||
```bash
|
||
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` — старая, не используется).
|
||
|
||
```bash
|
||
git remote -v # origin должен указывать на этот репозиторий
|
||
git add -A # секреты/данные не попадут (.gitignore)
|
||
git commit -m "описание"
|
||
git push origin main
|
||
```
|
||
|
||
В git попадают только: `docker-compose.yaml`, `config/init.conf`, `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
|