Каталог плагинов: полный локальный mirror в ./plugins (один directory-mount в wwwroot/plugins), доки и вычистка неиспользуемых модулей

- plugins/: скачаны все 30 плагинов store локально (sources.json - карта исходных URL);
  патчи: showy.js (абсолютный хост подгрузки), pubtorr/td/torrentmanager - тела вместо лоадеров,
  modss.js - local-patched копия (из каталога исключена, upstream мёртв)
- extensions.json: 32 позиции, все ссылки {localhost}/plugins/<файл>.js, удалены мёртвые
  (Skaz TV x3, export.js, hotkeys/gold_theme/select_weapon/want/mult, MODS's, o.js, др.)
- compose: ./plugins:/lampac/wwwroot/plugins (один маунт вместо 30 file-mount)
- вычистка: удалены неиспользуемые mods (DatabaseEditor, ExternalBind, LogUserRequest-Lite,
  Telemetry, Transcoding, WatchTogether) и дубль каталога modules/
- config/init.conf: секции Tracks/AdminPanel/Music, customPlugins без gst.js
- mods/Tracks: правки Controller.cs/plugin.js
- README.md / AGENT.md: mirror, кеш static, правила mount
This commit is contained in:
2026-10-02 16:37:30 +03:00
parent 7b8e28b3bf
commit 257b42f518
98 changed files with 62636 additions and 21113 deletions
+115 -227
View File
@@ -1,260 +1,148 @@
# Lampac NextGen — self-hosted backend для Lampa (Docker)
# Lampac NextGen — локальный 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/ # Резервные копии 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 — ошибка «модуль нет»).
Локальное развёртывание [Lampac NextGen](https://github.com/lampac-nextgen/lampac) — самохостируемого бекенда для Lampa — в Docker. Официальная документация: [docs.lampac.dev](https://docs.lampac.dev).
## Быстрый старт
Требования: 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
docker compose up -d # первый запуск
docker compose logs -f # логи (строки compilation / configure module / loaded module)
docker compose restart # после правки config/init.conf или манифестов в mods/
```
## Доступ
- Веб-клиент Lampa: **http://localhost:9118**
- Админ-панель: **http://localhost:9118/adminpanel** (root-пароль из `config/passwd`)
- TorrServer-прокси: `http://localhost:9118/ts/*` (порт TorrServer — 9085)
| Сервис | 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 |
По умолчанию сервер слушает порт **9118**; если порт занят — меняй `listen.port` в `config/init.conf` до первого запуска.
Чтобы подключить сервер к Lampa: откройте Lampa → Настройки → «Другие сервисы» (или вставьте адрес вручную) → `http://IP_МАШИНЫ:9118`.
## Структура проекта
Для доступа с других устройств локальной сети используйте LAN-IP машины, например `http://192.168.x.x:9118` (порт уже проброшен на `0.0.0.0`).
| Путь | Назначение |
|---|---|
| `docker-compose.yaml` | Основной сервис (образ закреплён на `ghcr.io/lampac-nextgen/lampac:1.68.0`) |
| `config/init.conf` | Конфигурация сервера (JSON, монтируется в `/lampac/init.conf`) |
| `config/passwd` | Пароль root для `/adminpanel` и `/weblog` (не в git) |
| `cache/` | Кеш (`/lampac/cache`) |
| `database/` | SQLite-базы Sync, TimeCode, Music, tg-notify (`/lampac/database`) |
| `dlna/` | Локальные медиа для DLNA (`/lampac/data/dlna`) |
| `plugins/extensions.json` | Каталог плагинов для веб-клиента (раздел «Плагины»), отдаётся через `/extensions` |
| `mods/<Имя>/` | Пользовательские копии встроенных модулей с `enable: true` |
> `docker-compose.override.yml` (в .gitignore) — серверное override для Proxmox (том DLNA -> `/mnt/torrents`), живёт только на сервере.
## Включённые модули из `mods/`
Встроенные модули с `"enable": false` в `manifest.json` внутри образа **нельзя включать правкой файла в контейнере** — файлы пропадут при обновлении. Механика по официальной документации ([модули Lampac](https://docs.lampac.dev/modules/overview), [пользовательские модули](https://docs.lampac.dev/maintenance/custom-modules)):
1. Скопировать модуль из образа в `mods/<Имя>/` на хосте:
```bash
docker cp lampac:/lampac/module/<Имя> "mods/<Имя>"
```
2. В `mods/<Имя>/manifest.json` поставить `"enable": true`.
3. Добавить том в `docker-compose.yaml`:
```yaml
- ./mods/<Имя>:/lampac/mods/<Имя>
```
4. При необходимости добавить секцию модуля в `config/init.conf` (runtime-флаг).
5. `docker compose up -d` (при добавлении тома) или `restart` (при правке манифеста с `dynamic: true`).
### Сейчас подключены
| Модуль | Что даёт | Секция в init.conf |
|---|---|---|
| `Tracks` | `/tracks.js`, `/ffprobe` — субтитры и дорожки | `"Tracks": { "enable": true }` |
| `AdminPanel` | `/adminpanel` — редактор init.conf, current.conf, users.json | `"AdminPanel": { "enable": true }` |
| `Music` | `/music.js`, `/music/*` — музыкальный каталог, плейлисты, стримы | секция `"Music"` (базовые дефолты) |
| `Tg-notify.bot` | `/tg-notify.js`, `/api/tg/*` — уведомления о новых сериях в Telegram | секция `"TelegramBot"` |
Клиентские плагины `music.js` и `tg-notify.js` зарегистрированы в `LampaWeb.customPlugins`; `{localhost}` в URL автоматически подставляется сервером.
### Ещё можно включить тем же способом
В образе выключены также: `DatabaseEditor`, `ExternalBind`, `LogUserRequest-Lite`, `Transcoding`, `WatchTogether`, `TelegramAuth`, `TelegramAuthBot`.
## Конфигурация
### `config/init.conf`
- `config/init.conf` — JSON. После правки: `docker compose restart`. Следи за валидностью JSON (лишняя запятая ломает парсинг).
- `BaseModule.SkipModules` / `BaseModule.LoadModules` — фильтры загрузки модулей (имя, группа, regex). `SkipModules` имеет приоритет над `LoadModules`.
- `LampaWeb.initPlugins` — флаги встроенных плагинов веб-клиента; `LampaWeb.customPlugins` — дополнительные плагины (`status: 1`).
- `LampaWeb.autoupdate: true` — Lampa Web-клиент автообновляется из `yumata/lampa` (раз в 90 минут).
Основной конфиг (JSON). **Перечитывается автоматически без перезапуска** контейнера (watcher каждую секунду, бэкапы — внутри контейнера в `/lampac/database/backup/init/`). После правки достаточно сохранить файл.
## Установка плагинов по ссылке через веб (AdminPanel)
Ключевые разделы:
Список плагинов, который сервер раздаёт всем клиентам через `/lampainit.js` и `/on.js`, собирается по `LampaWeb.initPlugins` + `LampaWeb.customPlugins`. Watcher перечитывает `init.conf` без перезапуска (интервал ~1 с, runtime-параметры применяются на лету).
```jsonc
{
"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 }
}
1. Открой **http://localhost:9118/adminpanel**, введи root-пароль (содержимое `config/passwd`) — пароль сохраняется в cookie `accspasswd` (штатный механизм root-авторизации).
2. В редакторе `init.conf` открой секцию **`LampaWeb`** → **`customPlugins`** и добавь запись:
```json
{ "url": "https://example.com/plugin.js", "status": 1, "name": "ИмяПлагина" }
```
Поддерживается плейсхолдер `{localhost}` — сервер подставит свой адрес.
3. Сохрани — перезапуск не нужен. Проверка: `curl -s http://localhost:9118/lampainit.js | grep <имя>`.
Нюансы:
- `status: 1` — активная запись.
- Family-dedup: `name.js` и `name/js/{token}` считаются одним плагином; если в registry клиента уже есть один вариант, второй из серверного списка не добавляется.
- Внешние URL должны быть доступны из браузеров клиентов и отдавать CORS-заголовки.
- Альтернатива без сервера: вставить ссылку напрямую в веб-клиенте Lampa (настройки → «Плагины») — тогда плагин живёт только в localStorage этого браузера и грузится браузером напрямую.
API (для скриптов): `GET/POST /adminpanel/api/init`, `POST /adminpanel/api/init/section/{key}` с cookie `accspasswd=<root-пароль>`.
## Каталог плагинов (раздел «Плагины» в веб-клиенте)
В веб-клиенте Lampa раздел «Плагины» грузит каталог (store) с маршрута **`/extensions`** (включается при `LampaWeb.initPlugins.pirate_store: true`). Содержимое берётся из файла `LampaWeb/plugins/extensions.json` модуля — у нас он переопределён файловым mount из `./plugins/extensions.json` (см. `docker-compose.yaml`). Плейсхолдер `{localhost}` в ссылках сервер заменяет своим адресом.
**Все плагины каталога размещены локально** (mirror): `.js`-файлы лежат в `./plugins/`, каталог целиком смонтирован в `/lampac/wwwroot/plugins/` (одна строка в compose) и ссылки в каталоге ведут на `{localhost}/plugins/<имя>.js`. (Целиком в корень `wwwroot` монтировать нельзя — перекроется веб-клиент `lampa-main`.) Сами файлы плагинов всегда локальные; исключение — плагин-лоадеры, подгружающие основной код с внешнего хоста: «Клубничка 18+» (rc.bwa.ad) и Showy (showy.online/online.js — файл локально патчен под абсолютный URL, иначе он бы подгружал `/online.js` с нашего сервера). Остальные скачаны целиком (для pubtorr / torrentmanager / td скачано тело, а не лоадер).
- `plugins/sources.json` — карта «локальный файл → исходный URL». Для обновления плагина: скачать файл по исходному URL, перезаписать локальный, перезапуск не нужен.
- `plugins/modss.js` — локальная patched-копия MODS's (заменён вызов `Lampa.Utils.isPWA()`), раздаётся как `/plugins/modss.js`, но из каталога исключена (upstream мёртв: загрузчик отвечает stub-ошибкой «Используйте: lampa.mx»). Вернуть карточку можно, добавив запись с `link: "{localhost}/plugins/modss.js"`.
Удалены из каталога (мёртвы upstream, проверено по факту выдачи):
- «MODS's» (`lampa.stream/modss`) — загрузчик отвечает stub-ошибкой;
- «Отзывы и рецензии» (`lampaplugins.github.io/store/o.js`) — файл заменён автором на пустой stub;
- «Вторая кнопка Торренты», «Поиск локального TorrServer», «Горячие кнопки», «Золотая Тема», «Тип управления», «Старый стиль», «Мультфильмы» — публичных копий нет;
- «Телевидение by Skaz» / «ТВ by skaz» / «ТВ by skaz 2.0» — файлы заменены placeholder-заглушками;
- «Импорт/Экспорт закладок, истории» (`skaz.tv/export.js`) — 404.
Важный нюанс — **диск-кеш ответа**: маршруты LampaWeb кешируют ответы в `cache/static/<bucket>/<id>.json` (том `./cache`), кеш переживает рестарт контейнера. После правки `extensions.json` для мгновенного применения удалить закешированную запись:
```bash
rm -rf cache/static/59 # bucket /extensions; либо rm -rf cache/static
```
### Текущий набор модулей
Перезапуск контейнера при этом **не требуется** (маршрут читает файл при каждом запросе, если нет кеш-записи).
**Включены все модули** (проверка: `docker logs lampac | grep -c "loaded module"` → 117):
## Tg-notify.bot: настройка бота
- `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`.
Секция `TelegramBot` в `config/init.conf`:
Клиентские плагины (что подключается в 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`.
| Поле | Назначение |
|---|---|
| `bot_token` | Токен от [@BotFather](https://t.me/BotFather). **Обязателен** — без него long polling не стартует (в логе будет предупреждение, сервер продолжит работать) |
| `tmdb_api_key` | Ключ TMDB v3 для обложек и описаний эпизодов |
| `trakt_client_id` | Client ID Trakt (основной источник новых серий; если пуст — только TMDB) |
| `lampac_host` | Базовый URL Lampac, по умолчанию `http://127.0.0.1:9118` |
| `lampac_token` | Токен `accsdb`, нужен если включена защита |
| `check_interval_minutes` | Период фоновой проверки (дефолт 60, первый прогон через 2 минуты) |
| `data_dir` | Каталог подписок, дефолт `database/tgnotify` |
### Установка плагинов через веб (Настройки → Плагины)
Привязка аккаунта: в Lampa во вкладке «TG Подписки» — deep-link `/start link_{uid}`. Команды бота: `/start`, `/list`, `/check`, `/help`, `/unlink`.
- **По 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](https://t.me/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 плагин не увидит (модуль работает, а пункт в меню не появляется).
```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 по умолчанию нет, но плагин и так подключается автодобавлением из `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`.
## Обновление
## Обновление Lampac
```bash
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`.
**Копировать обязательно:**
```bash
docker-compose.yaml
config/init.conf # вся конфигурация
config/passwd # СЕКРЕТ — переносить вне git (scp/rsync)
mods/ # копии модулей с enable: true (иначе 10 модулей не загрузятся)
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 относительные — правок не требуется.
## Развёртывание на 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-обновления его не ломают.
**Проверка после развёртывания:**
```bash
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
```
## Полезные команды
```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
```
Перед обновлением проверить, что в `docker-compose.yaml` раскомментированы нужные тома. Данные сохраняются в примонтированных томах: `config/`, `cache/`, `database/`, `dlna/`, `mods/`. Изображение закреплено на конкретном теге — при обновлении поменяй тег в `docker-compose.yaml`.
## Безопасность
- Порт 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` и `Курсы`.
```bash
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
- Не публикуй в интернет без аутентификации, WAF и ограничения сети: `/adminpanel`, `/weblog`, `/database-editor`, `Tracks`, `Transcoding`, `Catalog`, `DLNA`, proxy-модули.
- Нигде не раскрывай `config/passwd`, cookie `accspasswd`, заголовок `lcrqpasswd`.
- Для публикации за reverse proxy: [deployment/reverse-proxy](https://docs.lampac.dev/deployment/reverse-proxy) (HTTPS в ответах, реальный IP клиента, WebSocket, SSE, streaming).
- `shm_size: 4096mb` — рекомендованный минимум для Playwright/Chromium.