Add torrent client integration and downloads management: introduce qbittorrent service in Docker setup, implement downloads endpoint in API, and enhance media storage to handle imported files. Update frontend routes and translations for downloads management.

This commit is contained in:
Leonid Pershin
2026-07-24 16:42:14 +03:00
parent 5853009d71
commit e7840ba919
18 changed files with 382 additions and 6 deletions
+27 -2
View File
@@ -100,10 +100,10 @@ findmnt /srv/telewave/media
## 5. Рабочие каталоги и права
Создать структуру, ожидаемую приложением:
Создать структуру, ожидаемую приложением (`downloads` — для торрент-клиента qBittorrent, см. ниже):
```bash
sudo mkdir -p /srv/telewave/media/{inbox,uploads,originals,assets}
sudo mkdir -p /srv/telewave/media/{inbox,uploads,originals,assets,downloads}
```
**Владелец.** Контейнер сейчас работает под `root` (в Dockerfile нет `USER`), а bind-mount
@@ -188,6 +188,31 @@ docker compose exec app sh -c 'touch /media/.wtest && ls -l /media/.wtest && rm
---
## 8. Торрент-клиент qBittorrent (опционально)
Сервис `qbittorrent` уже описан в `docker-compose.yml`. Он качает в `/downloads` → это хостовый
`/srv/telewave/media/downloads`, который приложение видит как `/media/downloads`. TeleWave по API с
клиентом не общается: торренты добавляются в его WebUI, а готовые файлы импортируются в разделе
**«Загрузки»** админки (копированием — торрент продолжает сидироваться).
После `docker compose up -d --build`:
1. Узнать временный пароль WebUI первого входа:
```bash
docker compose logs qbittorrent | grep -i password
```
2. Открыть WebUI: `http://<хост>:8090`, логин `admin` + пароль из логов. Сменить пароль в настройках.
3. В настройках qBittorrent задать пути (важно, чтобы недокачанное не мозолило глаза в «Загрузках»):
- **Save files to**: `/downloads`
- **Keep incomplete torrents in**: `/downloads/incomplete` (включить) — приложение пропускает
этот подкаталог и маркеры `.!qB`.
Права: контейнер qBittorrent работает с `PUID/PGID=0`, поэтому файлы создаются root-владельцем — как
и у `app`, и импорт-копирование их читает без проблем. Порты `6881` (TCP/UDP) — для входящих
пиров; при NAT пробросьте их на роутере, иначе будет только исходящий обмен.
---
## Приложение: если диск нужно расширить в будущем
Если VM отдаст диску больше места (например `sdb` вырастет с 700G), после увеличения на стороне