rtorrent+rutorrent+nginx+php-fpm. Подводные камни

    Предыдущая статья про связку rtorrent+rutorrent+nginx+php-fpm была написана сразу после успешной установки и начальной настройки этой связки. В процессе эксплуатации выявились некоторые подводные камни, о которых я и хочу рассказать.

    RPC


    Как оказалось, чтобы связка nginx с rutorrent+rtorrent работала нормально, достаточно в файле conf/config.php в дереве каталогов установки rutorrent прописать такие строчки:

    $scgi_port = 33333;
    $scgi_host = "127.0.0.1";


    При этом в файле настроек rtorrent ~/.rtorrent.rc достаточно прописать сетевой сокет:

    scgi_port = 127.0.0.1:33333

    В nginx больше не нужно писать backend для /RPC2, а из скриптов запуска rtorrent нужно убрать работу с локальным UNIX-сокетом для управления rtorrent.

    Права доступа


    Естественно, для того, чтобы rutorrent успешно работал, нужно пользователю, от имени которого работают демоны nginx и php-fpm, дать права на все файлы и каталоги установки rutorrent. В моём случае это делает команда:

    sudo chown -R http:http /srv/http/nginx/rutorrent.eternity/htdocs

    Сокет php-fpm


    При локальном использовании php-fpm лучше посадить на UNIX-сокет. Для этого в файле /etc/php/php-fpm.conf необходимо закомментировать строчку с сетевым сокетом:

    ;listen = 127.0.0.1:9000

    И вписать ниже строчку с UNIX-сокетом:

    listen = /var/run/php-fpm/php-fpm.sock

    После этого необходимо перенастроить nginx. В файле /etc/nginx/conf/nginx.conf приводим блок backend'а к такому виду:

    upstream backend {
    	server unix:/var/run/php-fpm/php-fpm.sock;
    }


    Использование UNIX-сокетов уменьшает нагрузку на систему, так как не вычисляются контрольные суммы, а поток данных направляется непосредственно в принимающий буфер. Критично только для встраиваемых решений.

    Безопасность


    При локальном использовании nginx лучше всего посадить на 127.0.0.1. Для этого в файле /etc/nginx/conf/sites-enabled/rutorrent.eternity строчку listen следует привести к такому виду:

    listen 127.0.0.1:80;

    Если этого не сделать, веб-интерфейсом сможет воспользоваться тот, кто знает IP-адрес компьютера. Чтобы иметь возможность удалённо управлять rtorrent'ом, следует позаботиться об аутентификации (хотя бы через базовую аутентификацию nginx).

    geoip


    Для того, чтобы заработал модуль rutorrent под названием geoip, необходимо установить соответствующее расширение для PHP. В моём случае (Arch Linux) это действие выглядит так:

    sudo pacman -S php-geoip

    Потом в файле /etc/php/conf.d/geoip.ini необходимо снять комментарий с единственной строчки, чтобы она выглядела так:

    extension=geoip.so

    Также необходимо активировать плагин JSON. Делается это созданием в каталоге /etc/php/conf.d файла json.ini с таким содержимым:

    extension=json.so

    Без плагина json ничего работать не будет.

    Вспомогательные программы


    Для того, чтобы rutorrent нашёл дополнительные программы (curl, stat, mediainfo), во-первых, их нужно установить:

    sudo pacman -S curl mediainfo

    Во-вторых, необходимо разрешить их выполнение. Для этого в файле /etc/php/php.ini нужно закомментировать строчку open_basedir:

    ;open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/

    И, в-третьих, требуется дополнительные программы прописать в конфигурации rutorrent. CURL и stat прописываются в файле conf/config.php дерева каталогов установки rutorrent таким образом:

    $pathToExternals = array(
    		"php" 	=> '',
    		"curl"	=> '/usr/bin/curl',
    		"gzip"	=> '',
    		"id"	=> '',
    		"stat"	=> '/usr/bin/stat',
    	);


    Путь к программе mediainfo указывается в файле plugins/mediainfo/conf.php дерева каталогов установки rutorrent таким образом:

    $pathToExternals['mediainfo'] = '/usr/bin/mediainfo';

    Эти пути можно и не указывать, если для пользователя, от имени которого работают демоны веб-части связки, установлена переменная окружения PATH.

    Вкусняшки


    Лично для себя я сделал скрипт с таким содержимым:

    #!/usr/bin/env bash
    
    delay="1000"
    pid1=`pidof rtorrent`
    
    if [[ $pid1 != "" ]]
    then
    	notify-send -t $delay "Останавливаю rtorrentd…"
    	sudo rc.d stop rtorrentd
    	notify-send -t $delay "rtorrentd остановлен"
    else
    	notify-send -t $delay "Запускаю rtorrentd…"
    	sudo rc.d start rtorrentd
    	notify-send -t $delay "rtorrentd запущен"
    fi


    Этому скрипту даются права на выполнение:

    sudo chown root:root x-rtorrentd-wrapper.sh
    sudo chmod 755 x-rtorrentd-wrapper.sh


    А сам скрипт перемещается в /usr/bin:

    sudo mv x-rtorrentd-wrapper.sh /usr/bin

    Потом где-то на панельке своего DE (я всё делал в xfce) вешается кнопка на запуск этого скрипта. Если rtorrent не запущен, то скрипт его запустит, а если запущен, то выключит, при этом выводя всплывающее оповещение на экран через libnotify. Конечно же, для этого нужно установить libnotify:

    sudo pacman -S libnotify

    Перезапуск демонов


    После выполнения всех перечисленных действий необходимо перезапустить php-fpm и nginx:

    sudo rc.d restart php-fpm nginx

    В итоге шансы, что rutorrent полноценно заработает, существенно увеличиваются.

    UPDATE 1: добавил некоторые объяснения.

    UPDATE 2: обновил раздел с RPC. Спасибо svin0.
    Поделиться публикацией

    Похожие публикации

    Комментарии 31

      0
      Спасибо за статью. Не мог бы уважаемый автор разъяснить, чем его связка лучше традиционного transmission?
        +1
        Я бы остался на transmission, но он валил ядро в панику при закачке нескольких больших торрентов. Ну и ещё, говорят, что rtorrent лучше себя ведёт на маломощном железе, например, на домашних маршрутизаторах.
          +1
          Странно… У меня сейчас на домашнем сервере с Gentoo стоит transmission, собранный демоном с web-интерфейсом. За 4 месяца не испытал ни одной подобной проблемы. Сервер очень маломощный — всего 1 гигабайт оперативки модулем sdram и процессор 2.3 mhz в 500mhz`овой материнке.

          Когда-то давно тоже ставил wtorrent + rtorrent, но пришлось делать ресетап системы, а времени было немного, поэтому поставил transmission.

          Может у вас какие-то проблемы в ядре?
            0
            Не исключено, но проверять больше не хочу.

            Кстати, субъективно мне ещё и интерфейс transmission не понравился.
              0
              Мне тоже он не очень, хотя функции выполняет свои и этого достаточно )
              Большую часть времени управляю им через qt-transmission.
            • НЛО прилетело и опубликовало эту надпись здесь
                0
                И при это rtorrent ведёт себя нормально?
                • НЛО прилетело и опубликовало эту надпись здесь
                    0
                    Покажите мне торрент-клиента, который (при указанном выше количестве торрентов) будет жрать не много ресурсов.
                    • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      Мне кажется в этом контексте, многое зависит не от клиента. От файловой системы, например.
                  0
                  Уже давно (года 2-3) пользуюсь торрентами только на embedded устройствах. Сначала роутер Asus WL-500gPv2, сейчас NAS Synology DS210j. Поначалу пробовал Transmission – очень понравилось что всё в одном: и демон, и web-интерфейс. Потом понял что качает он как-то странно. Показывает одну скорость, а реальная меньше раз этак в 5. Чтобы таких пробуксовок не происходило ставил ограничения по скорости и коэффициент становился вместо 5 примерно 1.2. В итоге мне такое странное поведение надоело и я начал пользоваться rTorrent, чему и радуюсь до сих пор. Правда web-интерфейс так ни разу и не прикручивал. Просто копирую .torrent файлы в определённую папку и скачивание сразу начинается.
                  rTorrent на мой взгляд более прост и отзывчив чем Transmission. Висит себе в отдельном screen и работает годами. Для удалённого GUI управления можно использовать например nTorrent, но это если очень хочется.
              0
              А я ушёл на Мюторрент когда он появился для Линукса. А потом и вообще отказался от торрентов на «сервере», когда поднял рейтинг.

              Не то чтобы я был противником rtorrent, но мороки с ним действительно много. Раньше собирал и тоже писал ( dobroservers.ru/rtorrent ) об этом. Эх, давно это было — я тогда и не знал о Checkinstall :)
                +2
                В вашем топике не хватает объяснений. Инструкция для простых бездумных действий.
                Скорее всего после описанных в предыдущей статье действий ничего не заработает :). Для того, чтобы связка работала, необходимо в файле conf/plugins.ini дерева каталогов rutorrent прописать такие строчки:

                [httprpc]
                enabled = no

                Почему не заработает? Почему именно эти строчки? Почему такой режим не включен по-умолчанию, если оригинальный — не работает?

                При локальном использовании php-fpm лучше посадить на UNIX-сокет.

                Чем лучше?

                При локальном использовании nginx лучше всего посадить на 127.0.0.1.

                Почему?

                и так далее
                  0
                  Согласен. Обновил.
                  –5
                  «Linux для всех»
                  Чтобы качнуть торрент надо поставить веб сервер, пхп, сам клиент, веб-морду, произвести настройку. Мне кажется не в том направлении движется торент-тема в линукс…
                    0
                    Слишком толсто.
                    0
                    httprpc работает с nginx, он как бы и создан для этого. В этом случае не нужно лишних заморочек с /RPC2.
                    Но если уж требуется отключить его, то проще удалить папку с плагином.
                      0
                      Хотелось бы увидеть соответствующую конфигурацию.
                        +1
                        Работает прямо сейчас. Плагин в папке, никаких настроек не требует. rtorrent собран с --with-xmlrpc-c, соответствующая библиотека установлена.
                        Я, честно говоря, был удивлен, что nginx понимает RPC2 (года два назад ориентировался по данным code.google.com/p/rutorrent/wiki/WebSERVER#Nginx, с тех пор конфиги не трогал). Погуглил. Оказывается, вот оно как: code.google.com/u/@WRRWQlFTBBBDVwV4/updates
                          0
                          Хм, проверил — работает. Оказалось, не работало потому, что одновременно включено два плагина — rpc и httprpc.

                          Можно посмотреть на ваш конфиг nginx?
                            0
                            Хотя нет, не работали из-за отсутствия плагина json. Но конфиг nginx всё равно хочу посмотреть.
                              0
                              Всё, что касается rutottent:
                              location /rtorrent {
                              root /home/www/strg-srv;
                              index index.html;
                              auth_basic «Torrent engine»;
                              auth_basic_user_file /home/www/strg-srv/rtorrent/.htpasswd;
                              }
                              Далее вместо секции
                              upstream backend {
                              server 127.0.0.1:9000;
                              }
                              сделано одной строкой в секции с php:
                              fastcgi_pass 127.0.0.1:9000;
                              Точно так же можно с сокетами.
                              geoip работает без json.
                                0
                                Это понятно, спасибо. Но geoip без json не заработал, сыпались ошибки в error.log.
                            0
                            Всё, разобрался. Статью обновил, спасибо. Всё немножко проще оказалось.
                        +1
                        только я заметил опечатку
                        notify-send -t $delay «Запускаю rtorrentd…»
                        sudo rc.d stop rtorrentd

                        логично будет start… ну и во втором случае конечно же stop
                          0
                          Исправил, спасибо.
                          0
                          Вы забыли указать, что бы заработал RPC придется скачать плагин для rutorrent под названием RPC он написан на php, так что приоритетней настраивать RPC c помощью веб сервера, но к сожаление рабочих вариантов для nginx нету(
                            0
                            Отдельно я его не качал, он у меня стянулся со всеми плагинами с svn-а.
                              0
                              Вот оно что, просто если ставить пакет из yaourt rtorrent-svn плагинов он не тянет за собой( собственно что и правильно, зачем мне куча ненужных плагинов, которые замедляет работу веб морды)
                              Тогда в статье следует указать какие у вас плагины стоят.
                              Ну и собственно непосредственно средствами nginx кто-нибудь заставил работать RPC?
                                0
                                Все плагины у меня стоят.

                                Силами nginx RPC реализуется через проксирование /RPC2, но это теперь лишнее, так как напрямую через плагин работает лучше.

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

                          Самое читаемое