Transmission — раздача торрентов со своего сервера
Опубликовано 22 10 2021
3 min на чтение
Опубликовано 27 09 2021
6 min на чтение
Все будет проделано из под Arch Linux, но суть везде одна, весь этот софт есть и под windows.
Задача: Максимально автоматизировать процесс скачивания как новых фильмов, так и существующих.
Конечный результат, заходим на Imdb(авторизация), добавляем нужный фильм в список и на выходе получаем нужное в директории Films. Второй вариант, заходим в телеграм, отправляем боту название фильма и на выходе получаем нужное.
Исследовав этот вопрос в могучем гугле, вырисовывается простой вариант с использованием связки в docker, статей на данную тему не много, но их достаточно, даже с примерами композ файлов, собственно америку не открываем, а используем и попутно вникаем в настройку, которая не раскрыта в полной мере.
Установим docker и веб морду для удобства администрирования. Об этом я уже писал.
sudo pacman -S docker-compose
sudo usermod -aG docker ${USER}
su - ${USER}
sudo systemctl start docker
docker volume create portainer_data
docker run -d --network host --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Портайнер работает на http://localhost:9000.
Создаем нужные директории, compos файл.
mkdir -p ~/docker-app/mediaserver
cd ~/docker-app/mediaserver
mkdir -p ./{downloadclient-downloads,radarr,sonarr,qbittorrent,jackett,gramarr,TV,Films}
Создаем докер сеть.
docker network create -d bridge --subnet=172.23.0.0/24 --gateway 172.23.0.1 media-proxy
Создаем сценарий. Узнаем PUID/PGID командой id и вставляем следующее заменив только id.
nano docker-compose.yml
---
version: "2"
services:
sonarr:
image: linuxserver/sonarr
networks:
default:
ipv4_address: 172.23.0.51
container_name: sonarr
environment:
- PUID=1000
- PGID=985
- TZ=Europe/Moscow
- UMASK_SET=022 #optional
volumes:
- ./sonarr:/config
- ./TV:/tv
- ./downloadclient-downloads:/downloads
ports:
- 6001:8989
restart: unless-stopped
radarr:
image: linuxserver/radarr
networks:
default:
ipv4_address: 172.23.0.52
container_name: radarr
environment:
- PUID=1000
- PGID=985
- TZ=Europe/Moscow
- UMASK_SET=022 #optional
volumes:
- ./radarr:/config
- ./Films:/movies
- ./downloadclient-downloads:/downloads
ports:
- 6002:7878
restart: unless-stopped
qbittorrent:
image: linuxserver/qbittorrent
networks:
default:
ipv4_address: 172.23.0.53
container_name: qbittorrent
environment:
- PUID=1000
- PGID=985
- TZ=Europe/Moscow
- UMASK_SET=022
- WEBUI_PORT=6003
volumes:
- ./qbittorrent:/config
- ./downloadclient-downloads:/downloads
ports:
- 6881:6881
- 6881:6881/udp
- 6003:6003
restart: unless-stopped
jackett:
image: linuxserver/jackett
networks:
default:
ipv4_address: 172.23.0.54
container_name: jackett
environment:
- PUID=1000
- PGID=985
- TZ=Europe/Moscow
# - RUN_OPTS=run options here #optional
volumes:
- ./jackett/config:/config
- ./downloadclient-downloads:/downloads
ports:
- 6004:9117
restart: unless-stopped
gramarrru:
image: memodota/gramarrru
networks:
default:
ipv4_address: 172.23.0.55
container_name: gramarrru
depends_on:
- sonarr
- radarr
volumes:
- ./gramarr/config.json:/config/config.json
restart: unless-stopped
networks:
default:
external: true
name: media-proxy
Создаем gramarr конфиг.
nano gramarr/config.json
Вставляем следующее. Токены будем заполнять по мере получения, пароли на ваше усмотрение. IP не меняем.
{
"telegram": {
"botToken": "123123123:BBCCVVf-As-2IPSUMQy2w_HnLoReMqk"
},
"bot": {
"password": "",
"adminPassword": "demo"
},
"radarr": {
"hostname": "172.23.0.52",
"apiKey": "6brandomfb3e23",
"port": 7878,
"urlBase": "",
"ssl": false,
"username": "admin",
"password": "pass_radarr",
"maxResults": 6
},
"sonarr": {
"hostname": "172.23.0.51",
"apiKey": "1b5random29546",
"port": 8989,
"urlBase": "",
"ssl": false,
"username": "admin",
"password": "pass_sonarr",
"maxResults": 6
}
}
Собственно можно запускать и открывать на указанных портах назначаем пароли и получаем apiKey(ключи). Порты как в докер файле слева локальные, справа внутри докера(не интересуют). Стартуем находясь в директории с docker-compose.yml.
docker-compose up -d
Переходим в portainer http://localhost:9000, на вкладку stacks и видим mediaserver, перейдя в который увидим все приложения, возможно gramarr не запустился и это нормально, просто отсюда возможно удобней делать перезапуск всех разом и видеть их статус.
Sonarr я рассматривать не буду, только базовая доступность, но он почти похож на radarr думаю разберетесь.
Попутно добавляем данные в gramarr/config.json.
Открываем бота @BotFather и в нем создаем своего для грамарра.
Имя может быть занято, пробуйте различные вариации. В итоге должны увидеть “Done! …”, ссылка http://t.me/mudazvonbot и api ключ, копировать полностью выделенный ключ и вставить в config.json. password оставляем пустым, а adminPassword назначаем он нужен в самом боте mudazvonbot, для авторизации.
"telegram": {
"botToken": "123123123:BBCCVVf-As-2IPSUMQy2w_HnLoReMqk"
},
"bot": {
"password": "",
"adminPassword": "demo"
},
Собственно с ботом все и его конфигом, пока он не работает, так как связка еще не полна.
Тут только добавляем трекеры, add indexer и в поиск по очереди: Rutor, RuTracker, NoNaMe. Добавляем публичные, а еще лучше и приватные с логином и паролем semi-private(nnmclub/rutracker).
Меняем язык settings - ui, включаем вверху Show Advanced, сохраняем Save и обновляем стр.
Регаем акк на www.imdb.com, создаем и делаем список публичным, копируем ид в адресной строке ls503478540.
Идем в Настройки - Списки и добавляем список Imdb. Вставляем полученный UserId ls503478540, выбрать предпочтительный профиль качества. Остальное вроде по умолчанию, тест и сохранить. Если выставить удалить фильм и его файлы в Очистить уровень библиотеки, то когда убираем отслеживание в imdb фильм удаляется с radarr и Films, но в qbit остается.
Идем в Настройки - Клиенты для скачивания, добавляем qbit, указав логин и пароль от него, обязательно внутренний ip: 172.23.0.53 и порт: 6003. Остальное по умолчанию, тест - сохранить.
Настройки - Индексаторы, копируем листы по очередно Torznab Feed из Jackett. Один feed - одна запись в индексатор. Заполняем имя(любое, по имени трекера например - rutor), в URL вставляем скопированный feed и обязательно меняем в ссылке ip и порт на внутренний: 172.23.0.54:9117. По аналогии и с другими трекерами.
Jackett http://localhost:6004. Настройки - Профили тут просто везде поменял язык на Русский.
Перезапустить контейнеры в portainer, при добавление в список imdb(синхронит каждые 6 часов). Если все правильно, то добавление должно появиться и в радаре и в qbit.
Авторизация у бота /auth SUPERPASS, а возможности п /help. Бот также должен ответить с выборам качества и с сохранением в /movies. Да в докере это директория /movies, а локально мы ее смонтировали в Films, также и с /downloads - локально downloadclient-downloads.
После удаления из списка imdb, фильм удаляется, но вот торрент нужно удалить в qbit и он удалиться и из downloadclient-downloads, qbit http://localhost:6003/.
Принудительно считать imdb list, можно повесить на крон. В apikey= поставить ключ radarr.
curl -X POST "http://localhost:6002/api/v3/command?apikey=6random132loremasd23" -H "Content-Type: application/json" -d '{"name":"ImportListSync"}'
Настройка и запуск крона на 5 мин #5_*_*_*_*
.
yay -S cronie
EDITOR=nano crontab -e
5 * * * * curl -X POST "http://localhost:6002/api/v3/command?apikey=6random132loremasd23" -H "Content-Type: application/json" -d '{"name":"ImportListSync"}'
sudo systemctl enable --now cronie
Только поиск в qbittorrent youtu.be/DK-hcczVwq0.
mkdir ~/qbit
cd ~/qbit
nano docker-compose.yml
---
version: "2"
services:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1000
- PGID=985
- TZ=Europe/Moscow
- UMASK_SET=022
- WEBUI_PORT=6003
volumes:
- ./qbittorrent:/config/qBittorrent
- ./downloads:/downloads
ports:
- 6881:6881
- 6881:6881/udp
- 6003:6003
restart: unless-stopped
jackett:
image: linuxserver/jackett
container_name: jackett
environment:
- PUID=1000
- PGID=985
- TZ=Europe/Moscow
volumes:
- ./jackett:/config/Jackett
ports:
- 6004:9117
restart: unless-stopped
docker compose up -d
PSS:) Вопросы и предложения можно оставить в чате @ctlos.