Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE

Приветствую, уважаемые читатели на четвертой части цикла!

В прошлый раз мы установили и настроили локальные доменные имена на базе сервиса BIND9 в LXC контейнере.
Список цикла статей:

 

  1. Домашний Сервер: Часть 1 – Предисловие, аппаратная и софтовая начинка
  2. Домашний Сервер: Часть 2 – Установка системы виртуализации Proxmox
  3. Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
  4. Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE (вы тут)
  5. Домашний Сервер: Часть 5 – Установка и настройка Plex Media Server в контейнере LXC Proxmox-VE

Предисловие

 

По аналогии с предыдущей статьей, мы установим LXC контейнер и в нем установим и настроим «торрент качалку» Transmission
Официальный сайт: transmissionbt.com

 

Вы спросите: «А чем не устраивает торрент на обычном ПК?»
Так вот тем, что это не удобно при работе с локальным сервером. Да, варианты есть, но если честно… такое себе.
Гораздо удобнее, когда скачивание идет сразу на сервере и более того, я могу подключаться к своей системе не только через Desktop приложение, но и через мобильное приложение.
Т.е. фактически из любого места где есть интернет. А про локальную сеть я уже молчу )
Также в моей топологии сети, при этом, не задействуется Wi-Fi, все скачивание и раздача идет по кабельному каналу. (У меня тариф 500 Мбит/сек)

 

Это значит, что я также расскажу, как использовать приложение Transmission GUI на ПК и Transmission Remote на Android.
Ну и как бонус покажу немного автоматизации обработки торрентов. Мы ведь не хотим сами создавать все эти папки согласно иерархии хранения? 🙂
Кому стало интересно, приятного чтения !!!

 

Be careful! Много текста и работы с терминалом!

 

Установка и настройка Torrent сервиса Transmission-daemon

 

Процесс установки контейнера я опущу т.к. он разбирался в статье: Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
Принцип аналогичен, разве что параметры контейнера можно немного изменить:
Memory — 2.00 GiB
DNS — 192.168.88.7, 192.168.88.1 (помним, что мы запустили свой DNS)

 

Самый важный момент!
Нам необходимо сохранять файлы на RAID массив, который мы создали в процессе установки и настройки основной хост системы.

 

Домашний Сервер: Часть 2 – Установка системы виртуализации ProxmoxПункт: Подключение четырех дисков как ZFS массив RAID-5 (raidz1)

 

Но перед этим необходимо определиться со структурой хранения данных.
Для себя я определил следующую структуру:

 

rpoolz
├─data
| └─media
|   ├─serials
|   | ├─serial_name_1
|   | | ├─season_1
|   | | └─season_2
|   | └─serial_name_2
|   └─films
|     ├─2D
|     | ├─year_2019
|     | └─year_2020
|     └─3D
|       ├─year_2019
|       └─year_2020
└─root
  └─backup

 

Далее будем следовать данной структуре.

 

Как можно видеть, я создал специальную папку media для хранения всей мультимедиа информации.

 

И пока мы не запустили наш контейнер вопрос: «Как подключить массив к контейнеру?»
Делается это достаточно просто. Переходим в консоль основного сервера pve1

 

gost-proxmox-1
Основная консоль сервера PVE1

 

Настройки LXC контейнеров лежат по пути:
/etc/pve/lxc/

 

А там уже файлы конфигураций согласно номеру контейнера 100.conf, 101.conf и т.д.
Открываем файл настроек нашего контейнера:

 

nano /etc/pve/lxc/101.conf

 

Номер 100.conf это наш контейнер под DNS, а новый созданный это 101.conf

 

Добавляем в него такую строку:

 

mp0: /rpoolz/data,mp=/mnt/data

 

Т.е. у нас будет доступ из контейнера в файловую систему хостовой машины через точку монтирования(mp = Mount Point), при этом нам самим не нужно ничего монтировать, система сама обо всем позаботится.
В контейнере файлы мы будем сохранять по пути /mnt/data
Вы можете указать свой путь, как вам нравится.
Я же, создал базовую папку /rpoolz/data в которой будут храниться мои файлы

 

mkdir -m 777 /rpoolz/data

 

Финальные настройки LXC контейнера TORRENT

 

#*) transmission-daemon
#*) snmpd
arch: amd64
cores: 1
hostname: TORRENT
memory: 2048
mp0: /rpoolz/data,mp=/mnt/data
nameserver: 192.168.88.7 192.168.88.1
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=7A:DD:6F:14:34:5B,ip=dhcp,type=veth
onboot: 1
ostype: debian
rootfs: local-zfs:subvol-102-disk-0,size=8G
searchdomain: gregory-gost.ru
swap: 2048
unprivileged: 1

 

 

Запустим контейнер и перейдем к установке и настройке Transmission уже непосредственно внутри контейнера

 

Проверим смонтированную папку

 

ls -l /mnt/

 

Создадим базовые папки

 

mkdir -m 777 -p /mnt/data/media/serials
mkdir -m 777 -p /mnt/data/media/films/2D
mkdir -m 777 /mnt/data/media/films/3D

 

Обновим контейнер и установим transmission-daemon

 

apt update && apt full-upgrade -y

 

apt install -y transmission-daemon net-tools

 

Остановим сервис, для изменения настроек

 

service transmission-daemon stop

 

Производим настройки transmission-daemon
Открываем файл настроек:

 

nano /etc/transmission-daemon/settings.json

 

Файл настроек settings.json при запущенном сервисе не сохраняет изменения. Для корректного редактирования, сервис transmission-daemon должен быть обязательно остановлен!

 

Файл настроек представлен в формате JSON, необходимо поправить ряд параметров:

 

settings.json

 

{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": false,
    "blocklist-url": "http://www.example.com/blocklist",
    "cache-size-mb": 100,
    "dht-enabled": true,
    "download-dir": "/mnt/data/download",
    "download-limit": 100,
    "download-limit-enabled": false,
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/mnt/data/download/incomplete",
    "incomplete-dir-enabled": true,
    "lpd-enabled": false,
    "max-peers-global": 200,
    "message-level": 1,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 13003,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 2,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": true,
    "rename-partial-files": true,
    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-host-whitelist": "",
    "rpc-host-whitelist-enabled": false,
    "rpc-password": "123456",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "user",
    "rpc-whitelist": "127.0.0.1,192.168.88.*",
    "rpc-whitelist-enabled": false,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": true,
    "script-torrent-done-filename": "/opt/torrentdone/dist/main.js",
    "seed-queue-enabled": true,
    "seed-queue-size": 5,
    "speed-limit-down": 100,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 100,
    "speed-limit-up-enabled": false,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 0,
    "upload-limit": 100,
    "upload-limit-enabled": false,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true
}

 

 

Описание настраиваемых параметров (ENG)

Официальная страница с описанием параметров: github.com/transmission/wiki/Editing-Configuration-FilesВот список параметров, которые мне пришлось изменить:

    • «cache-size-mb»: 100

 

    • «download-dir»: «/mnt/data/download» — директория, куда будут сохраняться загружаемые файлы

 

    • «download-queue-enabled»: true

 

    • «download-queue-size»: 5

 

    • «incomplete-dir»: «/mnt/data/download/incomplete» — директория, где будут располагаться скачанные файлы не завершенных торрентов

 

    • «incomplete-dir-enabled»: true

 

    • «peer-port»: 13003

 

    • «preallocation»: 2

 

    • «ratio-limit»: 2

 

    • «ratio-limit-enabled»: true

 

    • «rpc-password»: «123456» — пароль для программ удаленного доступа

 

    • «script-torrent-done-enabled»: true

 

    • «script-torrent-done-filename»: «/etc/transmission-daemon/torrentdone.sh» — для чего это нужно читайте в отдельном разделе ниже Скрипты обработки торрентов для Transmission-daemon

 

    • «seed-queue-enabled»: true

 

    • «seed-queue-size»: 5

 

    • «umask»: 0 — Файлы будут сохраняться с маской 777, т.е. будут доступны для всех (чтение, удаление). Это важно!

 

 

 

Сохраняем настройки и запускаем transmission-daemon

 

service transmission-daemon start

 

Проверяем работу

 

service transmission-daemon status

 

netstat -nltp4

 

Если видим в ответе netstat слова «transmission«, значит сервис точно запущен и работает.

 

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:13003           0.0.0.0:*               LISTEN      782/transmission-da 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9440/nginx: master  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      137/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      292/master          
tcp        0      0 0.0.0.0:9091            0.0.0.0:*               LISTEN      782/transmission-da 

 

На этом настройку можно считать завершенной.

 

Дополнительная настройка nginx для Transmission

 

Стандартно ставим nginx

 

apt install nginx

 

Удаляем базовый сайт

 

rm /etc/nginx/sites-enabled/default

 

Настраиваем основной файл конфигурации

 

nano /etc/nginx/nginx.conf

 

error_log               /var/log/nginx/error.log crit;
pid                     /var/run/nginx.pid;
worker_rlimit_nofile    8192;
timer_resolution        100ms;
include                 /etc/nginx/modules-enabled/*.conf;

events {
        multi_accept    on;
        accept_mutex    off;
        use             epoll;
}

http {
        include         /etc/nginx/mime.types;
        include         /etc/nginx/fastcgi.conf;
        default_type    application/octet-stream;

        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     on;

        #ssl_session_cache      shared:SSL:10m;
        #ssl_session_timeout    10m;

        include         /etc/nginx/conf.d/*.conf;

}

 

 

Добавляем отдельную конфигурацию для transmission

 

nano /etc/nginx/conf.d/transmission.conf

 

upstream transmission_backend {
        server          127.0.0.1:9091;
        keepalive       32;
}

server {
        listen          80;
        server_name     torrent.gregory-gost.ru;

        send_timeout    100m;

        gzip            on;
        gzip_vary       on;
        gzip_min_length 1000;
        gzip_proxied    any;
        gzip_types      text/plain text/css text/xml application/xml text/javascript application/x-javascript image/svg+xml;
        gzip_disable "MSIE [1-6].";

        client_max_body_size 100M;

        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        proxy_redirect off;
        proxy_buffering off;

        location / {
                rewrite ^/$ http://$http_host;
                proxy_pass http://transmission_backend;
        }

}

 

 

Перезапускаем nginx

 

service nginx restart

 

После этого можно обращаться к transmission и rpc по доменному имени.

 

Теперь перейдем к средствам удаленного управления.

 

Удаленное управление Transmission

 

Transmission удобен тем, что работает на сервере в виде службы и потребляет минимум ресурсов. Также основной ПК освобождается от торрента и хранимых медиа файлов )
Для управления можно использовать утилиту для Windows x86, Windows x64, Linux x86, Linux x64, Linux на ARM6L, Linux на ARM7L, MacOS (.dmg пакет)
Для Android и iOS также существуют приложения разработанные сторонними разработчиками
Даже на мощных роутерах таких компаний как Asus иногда можно встретить Torrent качалку на базе Transmission.

 

Т.е. это говорит о высокой интеграции данного сервиса во все известные системы и эта кроссплатформенность дает нужное удобство.
Рассмотрим приложения на базе Windows и Android. С остальными системами полагаю будет аналогично.

 

Применение Transmission Remote GUI

 

Что такое Transmission Remote GUI?

 

gost-transgui-1
Transmission Remote GUI на Windows 10

 

Transmission Remote GUI — это многофункциональный кроссплатформенный интерфейс для удаленного управления демоном Transmission через его протокол RPC. Он быстрее и обладает большей функциональностью, чем встроенный веб-интерфейс Transmission.
Transmission Remote GUI разработан с использованием Lazarus RAD и компилятора Free Pascal.
Обладает интерфейсом почти как у uTorrent (uTorrent-like interface)
Transmission Remote GUI можно скачать на гитхабе в разделе с релизами:
github.com/transmission-remote-gui/transgui/releases
По той же ссылке располагаются варианты для других систем, они там все скопом.

 

Установка и настройка выполняется как с обычной программой.
Я скачиваю exe файл, устанавливаю, запускаю и иду в настройки приложения.

 

gost-transgui-2
Путь к настройкам приложения

 

gost-transgui-3
Настройки для transmission с настроенным nginx

 

Далее вы уже можете производить индивидуальные настройки аналогично обычному торрент клиенту по типу того же uTorrent.
И еще, как вы могли заметить программа поддерживает Русский язык, что конечно радует 🙂

 

Теперь перейдем к мобильной части…

 

Применение приложения на Android, iOS

 

Я опишу одно приложение, которым пользуюсь сам и т.к. у меня телефон на дройде, то прошу владельцев iOS не переживать. Полагаю для яблочных систем должно быть аналогично.
Оно так и называется Transmission Remote.
Чтобы не ошибиться, вот ссылка на приложение: Transmission Remote
Вот немного скриншотов

 

 

Мне достаточно зайти на нужный сайт, скачать торрент файл и запустить его выбрав это приложение. Сервер далее уже сам все сделает.
Можно спокойно закрыть приложение, по окончании скачивания придет push уведомление об окончании.
За время скачивания можно налить чаю, устроиться поудобнее и запустить кино/сериал на просмотр 🙂

 

Скрипты обработки торрентов для Transmission-daemon

 

А теперь настала пора автоматизации.
Скажите, вам ведь не хочется самостоятельно раскладывать каждый файл фильма или сериала по папкам? Если не хочется, то вы можете либо свалить все в кучу и тогда в один прекрасный день будет такая же история, как у многих с музыкой в начале 2000х 🙂
Было бы здорово, чтобы фильмы хранились с определенной иерархией. В начале статьи мы определили иерархию для хранения фильмов в 2D, в 3D и сериалов, но как заставить Transmission самостоятельно их переносить в нужные папки сразу после окончания и при этом не переставать раздавать в самой программе?
Как заставить торренты удаляться после наступления определенных условий, скажем рейтинг скачал/отдал был бы равен 2, а если рейтинг никогда не доберется до значения 2, то удалить торрент через 7 дней после добавления?

 

Как видим задач для автоматизации не много. Приступить к созданию автоматической обработки торрентов меня подтолкнула строка в настройках transmission-daemon
«script-torrent-done-filename»: «»
Тут мы можем указать путь к файлу, который transmission-daemon исполнит по окончании загрузки торрента, при этом он передаст скрипту некоторые переменные окружения, чтобы в скрипте ими можно было пользоваться.

 

Скажу сразу, приложение можно дорабатывать, возможно с некоторыми пунктами в нем вы будете не согласны, но написание красивого кода я своей целью не ставил, целью было выполнение нужных функций и скрипт с этим прекрасно справляется.

 

Я загрузил файлы на Github. Там вы можете скачать последние версии данных файлов.

 

Приложение TorrentDone: https://github.com/GregoryGost/transmission-torrentdone
Приложение TorrentClear: https://github.com/GregoryGost/transmission-torrentclear

 

Кратко опишу, какое приложение, что делает:

 

Приложение TorrentDone

 

Данное приложение ранее было написано на простом Bash, но мне захотелось рюшечек и некоторого ООП в придачу. И вот свет увидела версия написанная на NodeJS (тут вы тоже можете со мной не согласиться, но я писал на том, что знаю лучше всего)

 

Все инструкции и тонкости по установке находятся прям в репозитории в README.md файле.
Достаточно следовать им (ну или делать что-то под себя)

 

Приложение определяет, что мы скачиваем, файл или папку с файлами. Далее переносит файл(файлы) по месту их корректного хранения.

 

Из определений, есть определение сериал это или фильм. И для фильмов есть разделение 2D или 3D фильм.
Приложение также создает все необходимые пути согласно принятой мной системе хранения.

 

Краткое описание алгоритма обработки

 

── Check File or Directory
  ├─ IS FILE
  | └─ Check file extensions (mkv,avi,mp4)
  |   └─ Check Releaser (LostFilm, NovaFilm, etc ...)
  |     └─ Check Serial or Film
  |       ├─ IS SERIAL => serialProcess()
  |       | ├─ If season directory (DIR_FLAG) - copy torrent files
  |       | └─ Else simple file - move torrent file
  |       └─ IS FILM   => filmProcess()
  |         └─ Check 2D or 3D
  |           ├─ If directory (DIR_FLAG) - copy torrent files
  |           └─ Else simple file - move torrent file
  └─ IS DIRECTORY (set DIR_FLAG)
    └─ Foreach directory
      └─ Repeat until we find the File in the directory (back to IS FILE processing)

 

Замечательно, фильмы и сериалы сами складываются в нужные папки, скачивание идет, мы можем удаленно управлять всем этим.
Осталось сделать так, чтобы торренты сами еще и удалялись, но конечно без удаления самого скачанного файла!

 

Приложение TorrentClear

 

Тут произошла аналогичная история. Я решил и этот сервис переписать на NodeJS, получилось довольно гибко.

 

Проверка каждого торрента проводится с помощью консольной утилиты transmission-remote
Приложение перебирает все активные торренты и проверяет каждый медиа файл (mkv,mp4,avi) на соответствие рейтинга скачал/отдал >= 2 (двум, т.е. отдал в два раза больше чем скачал), либо прошло ли 7 дней с момента добавления торрента (по умолчанию). Эти параметры конечно можно менять, ratio в конфигурации самого transmission, кол-во дней в конфигурации приложения.
Если одно из условий выполнено, торрент удаляется, но при этом сам скачанный файл остается не тронутым.
Для целой папки торрент удаляется вместе с файлами т.к. в TorrentDone данные файлы просто копируются, а не переносятся.

 

Вот мы и закончили с автоматизацией обработки торрентов.
Теперь торренты будут удаляться автоматически и у нас не будет болеть голова об этом. Просто добавили и все.

 

Куда сохраняются сами файлы торрента? Нужно ли их удалять?Торрент файлы с расширением «.torrent» сохраняются по пути:

/var/lib/transmission-daemon/.config/transmission-daemon/torrents/

и удаляются при удалении торрента из программы.

Отдельно контролировать их нет необходимости.

 

Ротация логов logrotate.d/transmission

 

Дополнительно можно автоматизировать обработку создаваемых лог файлов. Т.е. обеспечить их ротацию.
Скачиваем файл с настройками

 

cd /etc/logrotate.d
wget https://raw.githubusercontent.com/GregoryGost/Transmission/master/logrotate.d/transmission

 

logrotate будет следить за тем, чтобы лог файл не превышал размер 10 Mb. А если и превысит, то он создаст отдельный файл со старым логом.
А еще позже будет уже сжимать совсем старые логи в архивы.

 

Заключение

 

Что хотелось бы сказать в заключении — а сказать особо и нечего, я все постарался описать в самой статье.
С помощью функционала Proxmox я реализовал торрент качалку в LXC контейнере, в которую можно добавлять торренты по дороге домой с работы, чтобы вечером с женой/детьми/родственниками/друзьями сесть за хороший фильм или сериал.
Такое решение сильно упрощает управление скачиванием и сохранением медиа файлов. Она работает автоматически в том числе на распределение файлов по нужным папкам, чистит торренты, чтобы они не занимали ресурсы системы.
В общем и целом я считаю, что своей цели в этой статье я достиг. Буду ждать от вас интересных идей для развития данной системы, в особенности скриптов по автоматизации 😉

 

Ну и конечно делитесь своими фишками, хаками, способами использования Transmission в комментариях!

 

Благодарю за ваше время!
Всего хорошего на просторах Интернета 😉

 

UPD 29.11.2022:

 

Изменен раздел «Скрипты обработки торрентов для Transmission-daemon» т.к. скрипты были обновлены до состояния NodeJS приложений.

 

UPD 21.03.2020:

 

Изменен раздел «Скрипты обработки торрентов для Transmission-daemon» т.к. были обновлены скрипты.

 

Выразить благодарность автору
Если Вам не безразлична судьба блога или Вы просто хотите отблагодарить Автора за его труд, смело переходите на страницу Поддержки, там описана вся информация, по тому, как это сделать. Заранее благодарен вам за данную инициативу!

 

Хочешь получать уведомления о выходе новых статей?







Loading

 

 

2019-11-20T22:49:59