Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DarkCast

image

Один 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.

Вариант 1: docker compose (рекомендуется)

Создайте файл 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 -f

Вариант 2: одной командой

docker 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

После запуска

Первый старт занимает 20–40 секунд: FlareSolverr прогревает Chromium. Проверить, что всё поднялось:

docker exec darkcast supervisorctl status

Все данные (конфиги, БД, кэш) хранятся на хосте в ./config/<сервис>/ и переживают обновление контейнера.

FlareSolverr уже подключён

Все четыре сервиса живут в одном контейнере и видят друг друга по localhost. При первом запуске Jackett автоматически настраивается на FlareSolverr (http://localhost:8191, таймаут 120000) — вручную ничего прописывать не нужно.

Для Prowlarr адрес указывается один раз в Settings → Indexers → FlareSolverr:

http://localhost:8191

Обновление

docker compose pull && docker compose up -d

Полезные команды

docker 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.

Настройки (.env)

Переменная Описание
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

Версия сборки и публикация в Docker Hub

Своя версия проекта задаётся в .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.

Проект лишь упаковывает сторонние приложения; каждое распространяется под собственной лицензией (см. ссылки в таблице выше).

About

4 in 1 for torrent streaming

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages