Один Docker-образ, в котором развёрнуты сразу четыре сервиса:
| Сервис | Порт | Назначение | Проект |
|---|---|---|---|
| Jackett | 9117 |
Прокси-индексатор торрент-трекеров | github.com/Jackett/Jackett |
| Prowlarr | 9696 |
Менеджер индексаторов (*arr-стек) | github.com/Prowlarr/Prowlarr |
| FlareSolverr | 8191 |
Обход защиты Cloudflare (Chromium) | github.com/FlareSolverr/FlareSolverr |
| TorrServer | 8090 |
Торрент-сервер с веб-интерфейсом | github.com/YouROK/TorrServer |
Образ на Docker Hub: alexex1993/darkcast
Поддерживаемые архитектуры: linux/amd64, linux/arm64.
Ничего собирать не нужно — образ скачивается с Docker Hub.
Создайте файл docker-compose.yml:
services:
darkcast:
image: alexex1993/darkcast:latest
container_name: darkcast
restart: unless-stopped
environment:
TZ: Europe/Moscow
PUID: 1000
PGID: 1000
ports:
- "9117:9117" # Jackett
- "9696:9696" # Prowlarr
- "8191:8191" # FlareSolverr
- "8090:8090" # TorrServer
volumes:
- ./config:/config
shm_size: "1gb"Запуск:
docker compose pull
docker compose up -d
docker compose logs -fdocker run -d --name darkcast --restart unless-stopped \
-e TZ=Europe/Moscow -e PUID=1000 -e PGID=1000 \
-p 9117:9117 -p 9696:9696 -p 8191:8191 -p 8090:8090 \
-v "$(pwd)/config:/config" \
--shm-size=1g \
alexex1993/darkcast:latest- Jackett — http://localhost:9117
- Prowlarr — http://localhost:9696
- FlareSolverr — http://localhost:8191
- TorrServer — http://localhost:8090
Первый старт занимает 20–40 секунд: FlareSolverr прогревает Chromium. Проверить, что всё поднялось:
docker exec darkcast supervisorctl statusВсе данные (конфиги, БД, кэш) хранятся на хосте в ./config/<сервис>/ и
переживают обновление контейнера.
Все четыре сервиса живут в одном контейнере и видят друг друга по localhost.
При первом запуске Jackett автоматически настраивается на FlareSolverr
(http://localhost:8191, таймаут 120000) — вручную ничего прописывать не нужно.
Для Prowlarr адрес указывается один раз в Settings → Indexers → FlareSolverr:
http://localhost:8191
docker compose pull && docker compose up -ddocker compose logs -f # логи всех сервисов
docker exec -it darkcast supervisorctl status # статус 4 процессов
docker exec -it darkcast supervisorctl restart jackett
docker exec darkcast printenv DARKCAST_VERSION # версия сборки| Переменная | Описание |
|---|---|
TZ |
часовой пояс (Europe/Moscow) |
PUID / PGID |
владелец файлов в ./config (по умолчанию 1000) |
Этот раздел нужен, только если вы хотите собрать образ сам — например, зафиксировать свои версии приложений или опубликовать под своим аккаунтом.
За основу взят официальный образ flaresolverr/flaresolverr — в нём уже
корректно настроены Debian 12, Chromium и chromedriver (самая сложная
зависимость). Остальные три приложения докладываются сверху как бинарники,
подходящие под архитектуру сборки. Внутри контейнера все четыре процесса
запускаются и контролируются через supervisord (авто-рестарт при падении,
единые логи в docker logs).
⚠️ Объединять несколько сервисов в один контейнер — это компромисс (обычно рекомендуется по контейнеру на сервис). Здесь это сделано осознанно ради «поставил один контейнер — получил всё сразу». Если позже захотите разнести — каждый сервис уже изолирован в своём supervisor-конфиге.
DarkCast/
├── Dockerfile # FROM flaresolverr + Jackett/Prowlarr/TorrServer
├── docker-compose.yml # запуск, порты, тома, build-args
├── .env / .env.example # версии приложений + TZ/PUID/PGID/имя образа
├── Makefile # make build / up / logs / update / push ...
├── rootfs/ # копируется в корень образа
│ ├── etc/supervisor/
│ │ ├── supervisord.conf
│ │ └── conf.d/*.conf # по одному конфигу на сервис
│ └── usr/local/bin/entrypoint.sh
├── scripts/
│ └── check-updates.sh # проверка новых релизов -> обновление .env
└── .github/workflows/
└── build.yml # авто-проверка версий + сборка + пуш в Docker Hub
git clone https://github.com/alexex1993/DarkCast.git && cd DarkCast
cp .env.example .env # поправьте TZ / IMAGE_NAME / версии
docker compose build # или: make build
docker compose up -d # или: make upСобирается нативно под архитектуру хоста. Нужные бинарники Jackett, Prowlarr и
TorrServer подбираются автоматически по TARGETARCH.
| Переменная | Описание |
|---|---|
JACKETT_VERSION |
тег релиза Jackett (например v0.24.2307) |
PROWLARR_VERSION |
тег релиза Prowlarr (например v2.4.0.5397) |
FLARESOLVERR_VERSION |
тег образа FlareSolverr (например v3.5.0) |
TORRSERVER_VERSION |
тег релиза TorrServer (например MatriX.141.7) |
IMAGE_NAME |
имя образа для сборки/пуша (логин/darkcast) |
DARKCAST_VERSION |
версия своей сборки — тег образа (например 26.8) |
TZ |
часовой пояс (Europe/Moscow) |
PUID / PGID |
владелец файлов в ./config |
Своя версия проекта задаётся в .env:
DARKCAST_VERSION=26.8
Она используется как тег образа, прописывается внутрь образа OCI-меткой
org.opencontainers.image.version и печатается в лог при старте контейнера.
Публикация (собирает сразу amd64 + arm64 — один тег работает и на Apple
Silicon, и на x86-сервере):
docker login
make pushБудет запушено два тега: логин/darkcast:26.8 и логин/darkcast:latest.
Для следующего релиза поменяйте DARKCAST_VERSION в .env и снова выполните
make push. Разовый вариант без правки файла:
make push VERSION=26.9Реализованы два способа — локальный и автоматический.
1. Локально (ручной контроль). Скрипт scripts/check-updates.sh опрашивает
GitHub API по всем четырём приложениям, сравнивает с .env и подставляет
новые версии.
make check # проверить и обновить .env (покажет, что изменилось)
make build # пересобрать образ под новые версии
make up # перезапустить
make update # всё сразу: check -> build -> upТребуется jq и curl. Чтобы не упереться в лимит анонимных запросов GitHub,
можно задать токен: GITHUB_TOKEN=ghp_xxx make check.
2. Автоматически (GitHub Actions → Docker Hub). Workflow
.github/workflows/build.yml:
- запускается ежедневно (cron
0 4 * * *), а также вручную и приpush; - вызывает тот же
check-updates.sh; - если появилась новая версия любого из приложений — пересобирает образ
(amd64 + arm64) и пушит в Docker Hub с тегами
:latest,:26.8,:26.8-ГГГГММДД; - коммитит обновлённый
.envобратно в репозиторий ([skip ci]).
Нужно один раз задать секреты в Settings → Secrets and variables → Actions:
| Секрет | Значение |
|---|---|
DOCKERHUB_USERNAME |
логин Docker Hub |
DOCKERHUB_TOKEN |
access token из Docker Hub |
GITHUB_TOKEN доступен автоматически.
MIT — см. LICENSE.
Проект лишь упаковывает сторонние приложения; каждое распространяется под собственной лицензией (см. ссылки в таблице выше).