среда, 16 марта 2016 г.

Торрент-клиент на своём сервере

Всем привет! Эта статья поможет тем, кому провайдер урезал скорость скачивания с torrent-сетей. Для Вас есть вариант поставить на свой сервере торрент-клиент, скачать там файл (фильм, игру и т.п.), и затем по FTP быстренько вытащить его себе :) Поехали!
Для начала регистрируемся по ссылке и получаем 10$ на своё счёт. Этого Вам хватит на 2 месяца использования сервера. Далее -  поставим компоненты:
sudo apt-add-repository ppa:jon-severinsson/ffmpeg
sudo apt-get update
sudo apt-get install rtorrent unzip unrar-free mediainfo ffmpeg php5-geoip php5-fpm php5-cli
Создадим папку для хранения сессий и место для закачки и слежения за торентами:
mkdir -p ~/rtorrent/.session
mkdir -p ~/rtorrent/{watch,download}
Отредактируем файл настроек:
nano ~/.rtorrent.rc
# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.
 
# Maximum and minimum number of peers to connect to per torrent.
#min_peers = 40
#max_peers = 100
 
# Same as above but for seeding completed torrents (-1 = same as downloading)
#min_peers_seed = 10
#max_peers_seed = 50
 
# Maximum number of simultanious uploads per torrent.
#max_uploads = 15
 
# Global upload and download rate in KiB. "0" for unlimited.
#download_rate = 0
#upload_rate = 0
 
# Default directory to save the downloaded torrents.
directory = ~/rtorrent/download
 
# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = ~/rtorrent/.session
 
# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory,5,5,load_start=/mnt/main/rtorrent/watch/*.torrent
schedule = untied_directory,5,5,stop_untied=
 
# Close torrents when diskspace is low.
#schedule = low_diskspace,5,60,close_low_diskspace=100M
 
# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"
 
# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no
 
# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no
 
# Port range to use for listening.
port_range = 49164-49164
 
# Start opening ports at a random position within the port range.
#port_random = no
 
# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
#check_hash = no
 
# Set whetever the client should try to connect to UDP trackers.
#use_udp_trackers = yes
 
# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa
 
# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
encryption = allow_incoming,enable_retry,prefer_plaintext
 
# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
# 
# dht = auto
 
# UDP port to use for DHT. 
# 
# dht_port = 6881
 
# Enable peer exchange (for torrents not marked private)
#
# peer_exchange = yes
 
#
# Do not modify the following parameters unless you know what you're doing.
#
 
# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10
 
# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100
 
# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10
 
scgi_port = 127.0.0.1:5000
Если у Вас на сервере не установлен Nginx:
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update ; sudo apt-get install nginx
Переходим в папку, где лежит Ваш сайт (будет лежать): cd /var/www Если её нет - создаём:
sudo mkdir /var/www
sudo chown www-data:www-data /var/www
Если Ваш сайт настроен на другую папку - то все манипуляции следует производить именно с ней, а не с /var/www. Идём дальше. Выкачиваем Web-морду для нашего клиента:
cd
wget http://dl.bintray.com/novik65/generic/rutorrent-3.6.tar.gz
wget http://dl.bintray.com/novik65/generic/plugins-3.6.tar.gz
sudo tar xvf rutorrent-3.6.tar.gz -C /var/www
sudo tar xvf plugins-3.6.tar.gz -C /var/www/rutorrent
sudo chown www-data:www-data -R /var/www/rutorrent
И меняем кончики Nginx'а:
sudo nano /etc/nginx/sites-available/YourSiteConf
Убедимся что главной страницей у нас могут быть как php так и html (htm):
index index.php index.html index.htm;
Добавим в коняги следующие строчки:
location /RPC2 {
 include scgi_params;
 scgi_pass 127.0.0.1:5000;
 }

 location /rutorrent {
 auth_basic "Restricted";
 auth_basic_user_file /var/www/rutorrent/.htpasswd;
 }
Теперь зададим авторизацию на наш клиент:
sudo apt-get install apache2-utils
sudo htpasswd -c /var/www/rutorrent/.htpasswd USERNAME
sudo chown www-data:www-data /var/www/rutorrent/.htpasswd
Для добавления других пользователей выполните команду
sudo htpasswd /var/www/rutorrent/.htpasswd USERNAME
Меняем коняги Web-морды:
sudo nano /var/www/rutorrent/conf/config.php
Меняем следующие строки:
"curl" ==> '/usr/bin/curl', // Something like /usr/bin/curl. If empty, will be found in PATH.
"stat" ==> '/usr/bin/stat', // Something like /usr/bin/stat. If empty, will be found in PATH.
Добавляем своего пользователя в группу www-data:
sudo usermod -a -G www-data USERNAME
А теперь - интересности. Ставим утилитку, которая будет присматривать за нашим клиентом, даже если Вы отключитесь от сервера.
sudo add-apt-repository ppa:byobu/ppa
sudo apt-get update ; sudo apt-get install byobu
И запускаем её:
byobu-enable
Теперь открываем ещё одну сессию к нашему серверу - и она откроется в непривычном виде, но это не на долго. Перезапускаем Nginx, php-fpm и запускаем наш  torrent-клиент:
sudo service nginx restart
sudo service php5-fpm restart
rtorrent
Закрываем сессию, возвращаемся в предыдущую, и отключаем автовход в byobu
byobu-disable
Переходим в браузере по адресу http://YourSite/rutorrent, вводим логин и пароль и качаем то, что нам нужно! Если Вы желаете зайти вновь в клиент - выполните следующую команду:
byobu
и Вы попадёте в окно byobu с запущеным клиентом. Теперь можете смело заходить к себе по FTP или RSync и выкачивать файлы. Для RSync можно создать скрипт:
sudo nano /usr/bin/copy
Вставляем в него следующие строки:
#!/bin/sh
read -p "Download File Name: " file_name
read -p "Download to folder: " path_to_load
file_path="~/rtorrent/download/$file_name"
echo "file to copy: '$file_path'"
cd $a
echo "Start Copy"
rsync -rhv --ignore-existing --progress User@Server:"$file_path" $path_to_load
echo "Copy Done!"
И делаем исполняемым:
sudo chmod +x /usr/bin/copy
Пример использования (для имён с пробелами заменяем их на "\\ " (обратный слэш + пробел):
copy "Ya.Robot.avi"
copy "Ya\\ Robot.avi"
Удачи!

Комментариев нет:

Отправить комментарий