Перенос lampac-docker/* в корень репозитория

- config/, modules/, cache/, database/ теперь в корне
- обновлены пути в docker-compose.yaml, .gitignore, README.md, AGENT.md
This commit is contained in:
2026-10-01 16:29:13 +03:00
parent f809efbf90
commit 7bb1d5b494
10 changed files with 46 additions and 47 deletions
+3 -3
View File
@@ -1,9 +1,9 @@
# Секреты # Секреты
lampac-docker/config/passwd config/passwd
# Локальные данные и кеш # Локальные данные и кеш
lampac-docker/cache/ cache/
lampac-docker/database/ database/
# Медиа DLNA (том ./dlna -> /lampac/data/dlna) # Медиа DLNA (том ./dlna -> /lampac/data/dlna)
dlna/ dlna/
+11 -11
View File
@@ -17,12 +17,12 @@
| Файл | Назначение | Правила | | Файл | Назначение | Правила |
| --- | --- | --- | | --- | --- | --- |
| `docker-compose.yaml` | Единственный compose-файл | тома обязательны; фиксированной сети/subnet нет (дефолтная сеть compose) | | `docker-compose.yaml` | Единственный compose-файл | тома обязательны; фиксированной сети/subnet нет (дефолтная сеть compose) |
| `lampac-docker/config/init.conf` | Конфиг сервера (JSON) | hot-reload для большинства ключей (кроме `BaseModule.SkipModules` — нужен рестарт); строго валидный JSON | | `config/init.conf` | Конфиг сервера (JSON) | hot-reload для большинства ключей (кроме `BaseModule.SkipModules` — нужен рестарт); строго валидный JSON |
| `lampac-docker/config/passwd` | Пароль root, **секрет** | не выводить в чат/логи/коммиты, в `.gitignore` | | `config/passwd` | Пароль root, **секрет** | не выводить в чат/логи/коммиты, в `.gitignore` |
| `lampac-docker/modules/*/manifest.json` | Manifest-оверрайды (`enable: true`) | монтируются поверх `/lampac/module/<Name>/manifest.json`; для модулей, у которых в образе `enable: false` (сейчас: `Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel`) | | `modules/*/manifest.json` | Manifest-оверрайды (`enable: true`) | монтируются поверх `/lampac/module/<Name>/manifest.json`; для модулей, у которых в образе `enable: false` (сейчас: `Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel`) |
| `lampac-docker/modules/LampaWeb/plugins/extensions.json` | Каталог магазина плагинов (`/extensions`) | override образного файла, добавлена секция «Lampac» (DLNA); после правки сбросить кеш `lampac-docker/cache/static/63/` | | `modules/LampaWeb/plugins/extensions.json` | Каталог магазина плагинов (`/extensions`) | override образного файла, добавлена секция «Lampac» (DLNA); после правки сбросить кеш `cache/static/63/` |
| `lampac-docker/cache/` | Кеш | монтируется в `/lampac/cache` | | `cache/` | Кеш | монтируется в `/lampac/cache` |
| `lampac-docker/database/` | SQLite-БД (Sync, TimeCode, SISI) | монтируется в `/lampac/database`, не удалять | | `database/` | SQLite-БД (Sync, TimeCode, SISI) | монтируется в `/lampac/database`, не удалять |
| `dlna/` | Медиа/превью DLNA | монтируется в `/lampac/data/dlna`, не удалять | | `dlna/` | Медиа/превью DLNA | монтируется в `/lampac/data/dlna`, не удалять |
| `.gitignore` | Игнорируемые пути | в игноре: `config/passwd` (секрет), `cache/`, `database/`, `dlna/`, `.DS_Store`; остальное (init.conf, modules/, compose, доки) — переносимое | | `.gitignore` | Игнорируемые пути | в игноре: `config/passwd` (секрет), `cache/`, `database/`, `dlna/`, `.DS_Store`; остальное (init.conf, modules/, compose, доки) — переносимое |
| `README.md` / `AGENT.md` | Документация | обновлять при любых изменениях развёртывания | | `README.md` / `AGENT.md` | Документация | обновлять при любых изменениях развёртывания |
@@ -45,13 +45,13 @@ curl -fsS -o /dev/null -w '%{http_code}\n' http://localhost:9118/online.js # о
1. **Отвечать по-русски.** 1. **Отвечать по-русски.**
2. После любых изменений в проекте — дополнять `README.md` и `AGENT.md`. 2. После любых изменений в проекте — дополнять `README.md` и `AGENT.md`.
3. Конфиг менять только в `lampac-docker/config/init.conf`; валидность проверять: `python3 -m json.tool lampac-docker/config/init.conf`. 3. Конфиг менять только в `config/init.conf`; валидность проверять: `python3 -m json.tool config/init.conf`.
4. Включение/выключение модулей — через `BaseModule.SkipModules` в `init.conf` (добавить имя = выключить; имя = имя папки в `/lampac/module/`, группы вроде `OnlineAnime` выключаются целиком). `SkipModules` **не hot-reload** — после правки нужен `docker compose restart lampac`. Модули, у которых в образе `manifest.json: enable: false` (`Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel`), включаются только manifest-оверрайдом: копия манифеста с `enable: true` в `lampac-docker/modules/<Name>/manifest.json` + монтирование в compose. Список модулей: https://docs.lampac.dev/modules/overview 4. Включение/выключение модулей — через `BaseModule.SkipModules` в `init.conf` (добавить имя = выключить; имя = имя папки в `/lampac/module/`, группы вроде `OnlineAnime` выключаются целиком). `SkipModules` **не hot-reload** — после правки нужен `docker compose restart lampac`. Модули, у которых в образе `manifest.json: enable: false` (`Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel`), включаются только manifest-оверрайдом: копия манифеста с `enable: true` в `modules/<Name>/manifest.json` + монтирование в compose. Список модулей: https://docs.lampac.dev/modules/overview
- Текущее состояние: выключены `OnlineAnime`, `OnlineUKR`, `OnlinePaid`, `OnlineGEO`, `Transcoding`, `WebLog`; включены все остальные (TorrServer, Sync/TimeCode/Storage/SyncEvents, Catalog, JacRed, DLNA, SISI, Tracks, Music, Tg-notify.bot, AdminPanel). - Текущее состояние: выключены `OnlineAnime`, `OnlineUKR`, `OnlinePaid`, `OnlineGEO`, `Transcoding`, `WebLog`; включены все остальные (TorrServer, Sync/TimeCode/Storage/SyncEvents, Catalog, JacRed, DLNA, SISI, Tracks, Music, Tg-notify.bot, AdminPanel).
- Плагины Lampa: `/online.js`, `/sisi.js`, `/dlna.js` и т.д. Большинство Lampac сам подключает клиенту через `/lampainit.js` (см. ниже про `initPlugins`); при необходимости плагин можно добавить вручную по URL. - Плагины Lampa: `/online.js`, `/sisi.js`, `/dlna.js` и т.д. Большинство Lampac сам подключает клиенту через `/lampainit.js` (см. ниже про `initPlugins`); при необходимости плагин можно добавить вручную по URL.
- **Два уровня включения модуля:** (1) `SkipModules`/manifest — модуль скомпилирован и работает на сервере; (2) `LampaWeb.initPlugins.<name>` в `init.conf` — плагин попадает в список, который `/lampainit.js` добавляет клиенту Lampa (`Lampa.Plugins.add`). Без второго флага сервер отвечает, но пункт в Lampa не появится (так было с `dlna` — флаг `initPlugins.dlna` добавлен в init.conf). Дефолты флагов — в `current.conf` секция `LampaWeb.initPlugins`. - **Два уровня включения модуля:** (1) `SkipModules`/manifest — модуль скомпилирован и работает на сервере; (2) `LampaWeb.initPlugins.<name>` в `init.conf` — плагин попадает в список, который `/lampainit.js` добавляет клиенту Lampa (`Lampa.Plugins.add`). Без второго флага сервер отвечает, но пункт в Lampa не появится (так было с `dlna` — флаг `initPlugins.dlna` добавлен в init.conf). Дефолты флагов — в `current.conf` секция `LampaWeb.initPlugins`.
- **Магазин плагинов** в Lampa (Настройки → Плагины) читает `/extensions` → `LampaWeb/plugins/extensions.json` (каталог образа). Свои записи добавляются через override-файл в `lampac-docker/modules/LampaWeb/plugins/extensions.json` (монтирован в compose). Ответ кешируется `Staticache` на диске: `lampac-docker/cache/static/<bucket>/` — после правки удалить соответствующий файл (`grep -rl secuses lampac-docker/cache/static/`) или весь каталог static, затем перезапросить. - **Магазин плагинов** в Lampa (Настройки → Плагины) читает `/extensions` → `LampaWeb/plugins/extensions.json` (каталог образа). Свои записи добавляются через override-файл в `modules/LampaWeb/plugins/extensions.json` (монтирован в compose). Ответ кешируется `Staticache` на диске: `cache/static/<bucket>/` — после правки удалить соответствующий файл (`grep -rl secuses cache/static/`) или весь каталог static, затем перезапросить.
5. Новые пользовательские модули класть в `lampac-docker/mods/<Name>/` (монтировать в `/lampac/mods/<Name>`), переопределения плагинов — `lampac-docker/plugins/lampainit.js` → `/lampac/plugins/override/lampainit.js`. 5. Новые пользовательские модули класть в `mods/<Name>/` (монтировать в `/lampac/mods/<Name>`), переопределения плагинов — `plugins/lampainit.js` → `/lampac/plugins/override/lampainit.js`.
6. Не раскрывать пароль из `passwd`, не коммитить его, не выводить в логи. 6. Не раскрывать пароль из `passwd`, не коммитить его, не выводить в логи.
7. Не открывать порт 9118 в интернет без файрвола/reverse proxy; модули `DLNA`, `Tracks`, `Transcoding`, `GStreamer`, `Catalog` не предназначены для публичного доступа. 7. Не открывать порт 9118 в интернет без файрвола/reverse proxy; модули `DLNA`, `Tracks`, `Transcoding`, `GStreamer`, `Catalog` не предназначены для публичного доступа.
8. Образ пиннить по тегу при необходимости воспроизводимости (в compose сейчас `:latest`). 8. Образ пиннить по тегу при необходимости воспроизводимости (в compose сейчас `:latest`).
@@ -75,7 +75,7 @@ curl -fsS -o /dev/null -w '%{http_code}\n' http://localhost:9118/online.js # о
## Troubleshooting ## Troubleshooting
- **Контейнер нестабилен / Chromium падает** — проверить `shm_size: 1024mb` в compose (обязательно для Playwright). - **Контейнер нестабилен / Chromium падает** — проверить `shm_size: 1024mb` в compose (обязательно для Playwright).
- **Не стартует после правки init.conf** — проверить JSON: `python3 -m json.tool lampac-docker/config/init.conf`; бэкапы в `/lampac/database/backup/init/`. - **Не стартует после правки init.conf** — проверить JSON: `python3 -m json.tool config/init.conf`; бэкапы в `/lampac/database/backup/init/`.
- **Модуль не загрузился** — смотреть `docker compose logs lampac | grep -E "skip compilation|loaded module"`; для модулей с `enable: false` в образе проверить manifest-оверрайд и его монтирование в compose. - **Модуль не загрузился** — смотреть `docker compose logs lampac | grep -E "skip compilation|loaded module"`; для модулей с `enable: false` в образе проверить manifest-оверрайд и его монтирование в compose.
- **Tg-notify молчит** — нужен `bot_token` в секции `TelegramBot` init.conf (без него long polling не стартует, в логе предупреждение). - **Tg-notify молчит** — нужен `bot_token` в секции `TelegramBot` init.conf (без него long polling не стартует, в логе предупреждение).
- **Занят порт 9118** — `lsof -i :9118` или сменить порт в `init.conf` (`listen.port`) и в `ports` compose-файла одновременно. - **Занят порт 9118** — `lsof -i :9118` или сменить порт в `init.conf` (`listen.port`) и в `ports` compose-файла одновременно.
+23 -24
View File
@@ -23,18 +23,17 @@
```text ```text
Lampac/ Lampac/
├── docker-compose.yaml # Единственный compose-файл (порт 9118) ├── docker-compose.yaml # Единственный compose-файл (порт 9118)
├── lampac-docker/ ├── config/
│ ├── config/ │ ├── init.conf # Конфигурация сервера (JSON, hot-reload)
│ │ ├── init.conf # Конфигурация сервера (JSON, hot-reload) │ └── passwd # Пароль root (СЕКРЕТ, не коммитить)
│ │ └── passwd # Пароль root (СЕКРЕТ, не коммитить) ├── modules/ # Overridе-файлы, монтируемые поверх файлов образа
│ ├── modules/ # Overridе-файлы, монтируемые поверх файлов образа │ ├── Tracks/manifest.json
│ │ ├── Tracks/manifest.json │ ├── Music/manifest.json
│ │ ├── Music/manifest.json │ ├── Tg-notify.bot/manifest.json
│ │ ├── Tg-notify.bot/manifest.json │ ├── AdminPanel/manifest.json
│ │ ├── AdminPanel/manifest.json │ └── LampaWeb/plugins/extensions.json # каталог магазина плагинов (+DLNA)
│ │ └── LampaWeb/plugins/extensions.json # каталог магазина плагинов (+DLNA) ├── cache/ # Кеш (монтируется в /lampac/cache)
│ ├── cache/ # Кеш (монтируется в /lampac/cache) ├── database/ # SQLite-БД: Sync, TimeCode, SISI (→ /lampac/database)
│ └── database/ # SQLite-БД: Sync, TimeCode, SISI (→ /lampac/database)
├── dlna/ # Данные DLNA (медиа/превью, → /lampac/data/dlna) ├── dlna/ # Данные DLNA (медиа/превью, → /lampac/data/dlna)
├── README.md # Эта документация ├── README.md # Эта документация
├── AGENT.md # Инструкции для AI-агента ├── AGENT.md # Инструкции для AI-агента
@@ -75,7 +74,7 @@ docker compose ps
## Конфигурация ## Конфигурация
### `lampac-docker/config/init.conf` ### `config/init.conf`
Основной конфиг (JSON). **Перечитывается автоматически без перезапуска** контейнера (watcher каждую секунду, бэкапы — внутри контейнера в `/lampac/database/backup/init/`). После правки достаточно сохранить файл. Основной конфиг (JSON). **Перечитывается автоматически без перезапуска** контейнера (watcher каждую секунду, бэкапы — внутри контейнера в `/lampac/database/backup/init/`). После правки достаточно сохранить файл.
@@ -103,7 +102,7 @@ docker compose ps
**Включены дополнительно к стартовому набору:** **Включены дополнительно к стартовому набору:**
- `Catalog`, `JacRed`, `Sync` (вместе с `Storage`, `SyncEvents`, `TimeCode`), `TorrServer`, `DLNA`, `SISI` — убраны из `SkipModules`. - `Catalog`, `JacRed`, `Sync` (вместе с `Storage`, `SyncEvents`, `TimeCode`), `TorrServer`, `DLNA`, `SISI` — убраны из `SkipModules`.
- `Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel` — включены через manifest-оверрайды в `lampac-docker/modules/*/manifest.json` (в образе у них `enable: false`; файлы монтируются поверх `/lampac/module/<Name>/manifest.json`). - `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`. Чтобы выключить/включить любой другой модуль — добавьте или уберите его имя в `SkipModules` (имя = имя папки в `/lampac/module/`, включая группы вроде `OnlineAnime`). Изменение применяется после `docker compose restart lampac` (SkipModules не hot-reload). Убрать из списка группу `Sync` целиком отключит и `TimeCode`/`Storage`/`SyncEvents`.
@@ -138,17 +137,17 @@ docker compose ps
После правки перезагрузите страницу Lampa — `lampainit.js` сам добавит плагин (`Lampa.Plugins.add`) и он появится в Настройки → Плагины (со статусом включён). Ручное добавление по ссылке тоже работает: `http://IP_МАШИНЫ:9118/dlna.js`. Прямой UI модуля — `http://IP_МАШИНЫ:9118/dlna`. После правки перезагрузите страницу Lampa — `lampainit.js` сам добавит плагин (`Lampa.Plugins.add`) и он появится в Настройки → Плагины (со статусом включён). Ручное добавление по ссылке тоже работает: `http://IP_МАШИНЫ:9118/dlna.js`. Прямой UI модуля — `http://IP_МАШИНЫ:9118/dlna`.
**В магазине плагинов** (Настройки → Плагины/«Магазин») каталог отдаётся из `/extensions` — файла `LampaWeb/plugins/extensions.json` внутри образа, где DLNA по умолчанию нет. Добавлена запись через override: `lampac-docker/modules/LampaWeb/plugins/extensions.json` (секция «Lampac» в начале каталога) монтируется поверх образного файла. Магазин кешируется (`Staticache`) — после правки этого файла кеш надо сбросить: удалить `lampac-docker/cache/static/63/*` (каталог по хешу URL) или перезапустить контейнер. **В магазине плагинов** (Настройки → Плагины/«Магазин») каталог отдаётся из `/extensions` — файла `LampaWeb/plugins/extensions.json` внутри образа, где DLNA по умолчанию нет. Добавлена запись через override: `modules/LampaWeb/plugins/extensions.json` (секция «Lampac» в начале каталога) монтируется поверх образного файла. Магазин кешируется (`Staticache`) — после правки этого файла кеш надо сбросить: удалить `cache/static/63/*` (каталог по хешу URL) или перезапустить контейнер.
### AdminPanel ### AdminPanel
Веб-админка Lampac: правка `init.conf`/`current.conf`, пользователи `users.json`. Веб-админка Lampac: правка `init.conf`/`current.conf`, пользователи `users.json`.
- Вход: `http://IP_МАШИНЫ:9118/adminpanel/auth` — пароль из `lampac-docker/config/passwd` (cookie `accspasswd`, живёт 180 дней). - Вход: `http://IP_МАШИНЫ:9118/adminpanel/auth` — пароль из `config/passwd` (cookie `accspasswd`, живёт 180 дней).
- Панель: `http://IP_МАШИНЫ:9118/adminpanel` (без входа — 302 на страницу auth). - Панель: `http://IP_МАШИНЫ:9118/adminpanel` (без входа — 302 на страницу auth).
- Доступ к админке не открывайте в интернет без защиты — см. README модуля AdminPanel. - Доступ к админке не открывайте в интернет без защиты — см. README модуля AdminPanel.
### `lampac-docker/config/passwd` ### `config/passwd`
Пароль учётной записи `root` в одну строку (используется для служебных функций и WebLog). Сгенерирован при установке; для смены отредактируйте файл и перезапустите контейнер: `docker compose restart lampac`. Пароль учётной записи `root` в одну строку (используется для служебных функций и WebLog). Сгенерирован при установке; для смены отредактируйте файл и перезапустите контейнер: `docker compose restart lampac`.
@@ -169,20 +168,20 @@ docker compose up -d
```bash ```bash
docker-compose.yaml docker-compose.yaml
lampac-docker/config/init.conf # вся конфигурация config/init.conf # вся конфигурация
lampac-docker/config/passwd # СЕКРЕТ — переносить вне git (scp/rsync) config/passwd # СЕКРЕТ — переносить вне git (scp/rsync)
lampac-docker/modules/ # override-файлы (manifest ×4, extensions.json) modules/ # override-файлы (manifest ×4, extensions.json)
README.md AGENT.md .gitignore README.md AGENT.md .gitignore
``` ```
**Копировать по желанию** (данные пользователя, иначе создадутся заново): **Копировать по желанию** (данные пользователя, иначе создадутся заново):
```bash ```bash
lampac-docker/database/ # закладки Sync, позиции TimeCode, SISI, библиотека Music database/ # закладки Sync, позиции TimeCode, SISI, библиотека Music
dlna/ # медиа/превью DLNA dlna/ # медиа/превью DLNA
``` ```
**Не копировать** — регенерируется автоматически: `lampac-docker/cache/`, содержимое `/lampac/data` внутри контейнера (GeoLite2, ffmpeg/ffprobe, бинарник TorrServer, Lampa UI). **Не копировать** — регенерируется автоматически: `cache/`, содержимое `/lampac/data` внутри контейнера (GeoLite2, ffmpeg/ffprobe, бинарник TorrServer, Lampa UI).
Порядок переноса: скопировать файлы → `docker compose up -d` → health-check: `curl "http://localhost:9118/version?type=hash"`. Порт 9118 и пути в compose относительные — правок не требуется. Порядок переноса: скопировать файлы → `docker compose up -d` → health-check: `curl "http://localhost:9118/version?type=hash"`. Порт 9118 и пути в compose относительные — правок не требуется.
@@ -201,7 +200,7 @@ docker compose pull && docker compose up -d # обновление до све
- Порт 9118 проброшен на все интерфейсы — при выходе в интернет закройте его файрволом или поднимите reverse proxy с аутентификацией. Внутренний порт TorrServer (9085) не проброшен вовсе: он доступен только контейнеру, внешний доступ к TorrServer идёт исключительно через `/ts/` на 9118. - Порт 9118 проброшен на все интерфейсы — при выходе в интернет закройте его файрволом или поднимите reverse proxy с аутентификацией. Внутренний порт TorrServer (9085) не проброшен вовсе: он доступен только контейнеру, внешний доступ к TorrServer идёт исключительно через `/ts/` на 9118.
- Модули `DLNA`, `Tracks`, `Transcoding`, `GStreamer`, `Catalog` не экранируют входящие запросы — не открывайте их публично без защиты. - Модули `DLNA`, `Tracks`, `Transcoding`, `GStreamer`, `Catalog` не экранируют входящие запросы — не открывайте их публично без защиты.
- `lampac-docker/config/passwd` содержит секрет — файл добавлен в `.gitignore`. - `config/passwd` содержит секрет — файл добавлен в `.gitignore`.
## Git-репозиторий ## Git-репозиторий
@@ -214,7 +213,7 @@ git commit -m "описание"
git push origin main git push origin main
``` ```
В git попадают только: `docker-compose.yaml`, `lampac-docker/config/init.conf`, `lampac-docker/modules/**`, `README.md`, `AGENT.md`, `.gitignore`. Секреты (`passwd`), `cache/`, `database/`, `dlna/` — в `.gitignore`. В git попадают только: `docker-compose.yaml`, `config/init.conf`, `modules/**`, `README.md`, `AGENT.md`, `.gitignore`. Секреты (`passwd`), `cache/`, `database/`, `dlna/` — в `.gitignore`.
## Ссылки ## Ссылки
+9 -9
View File
@@ -13,13 +13,13 @@ services:
options: options:
tag: "{{.Name}}" tag: "{{.Name}}"
volumes: volumes:
- ./lampac-docker/config/passwd:/lampac/passwd - ./config/passwd:/lampac/passwd
- ./lampac-docker/config/init.conf:/lampac/init.conf - ./config/init.conf:/lampac/init.conf
- ./lampac-docker/cache:/lampac/cache - ./cache:/lampac/cache
- ./lampac-docker/database:/lampac/database - ./database:/lampac/database
- ./lampac-docker/modules/Tracks/manifest.json:/lampac/module/Tracks/manifest.json:ro - ./modules/Tracks/manifest.json:/lampac/module/Tracks/manifest.json:ro
- ./lampac-docker/modules/Music/manifest.json:/lampac/module/Music/manifest.json:ro - ./modules/Music/manifest.json:/lampac/module/Music/manifest.json:ro
- ./lampac-docker/modules/Tg-notify.bot/manifest.json:/lampac/module/Tg-notify.bot/manifest.json:ro - ./modules/Tg-notify.bot/manifest.json:/lampac/module/Tg-notify.bot/manifest.json:ro
- ./lampac-docker/modules/AdminPanel/manifest.json:/lampac/module/AdminPanel/manifest.json:ro - ./modules/AdminPanel/manifest.json:/lampac/module/AdminPanel/manifest.json:ro
- ./lampac-docker/modules/LampaWeb/plugins/extensions.json:/lampac/module/LampaWeb/plugins/extensions.json:ro - ./modules/LampaWeb/plugins/extensions.json:/lampac/module/LampaWeb/plugins/extensions.json:ro
- ./dlna:/lampac/data/dlna - ./dlna:/lampac/data/dlna