2012. szeptember 30., vasárnap

A webszerver és a torrent kliens


Ahogy azt régebben írtam, lehet transmission-t használni, előnye hogy nagyon könnyű beállítani.Én nem ezt fogom használni, hanem egy kicsit bonyolultabb megoldást. Egy rtorrent klienst fogunk beállítani, hozzá egy nginx webszerveren, php-fpm-en futó webes klienst, a ruTorrentet. Készenállunk?

Telepítsük fel amit csak lehet pacman-al, nem lesz gond a verziókkal, megfelelően frissek.
pacman -S rtorrent screen php php-cgi php-sqlite php-gd php-fpm xmlrpc-c nginx
Konfiguráljuk először mondjuk az rtorrentet. Másoljuk a telepítéskor felkerült példa konfigurációs fájlt a könyvtárunkba, a megfelelő néven:
cp /usr/share/doc/rtorrent/rtorrent.rc ~/.rtorrent.rc
Nyissuk meg, és állítsunk be pár dolgot. 
max_peers = 20

max_peers_seed = 10

session = /var/rtorrent/session

download_rate = 1600

upload_rate = 190

scgi_port = 127.0.0.1:5000
Ezekkel el lehet játszadozni, lehet variálni a peer/seed számokkal, és a konfigfájlban is van több beállítás még, mindegyiknél szerepel fölötte, hogy mire való. Nekem így volt stabil. A download_rate és az upload_rate a letöltés és a feltöltés limit, kb/s-ban, vagyis pl.: nekem 20 Mb-es a netem, ezért 1600-ra állítva marad elegendő netezni, ha maxon megy a torrent akkor is. Felfelé ugyanez, ha 2Mb a feltöltés, akkor én 190-re állítottam, így még maradt netezni valamennyi, ha kellene. A sebességet pl.: a speedtest.net-en ellenőrizhetjük. Az utolsó sor a legfontosabb, az scgi_port, itt adjuk meg hogy egyéb alkalmazások, (mondjuk a php-n át a rutorrent) hol és hogyan csatlakozhat az rtorrenthez. Lehet így tcp-n, vagy lehet socketen át. Én ezt használom, de socket-el is jó. Van aki szerint úgy jobb, én nem vettem észre.

Hozzunk létre egy könyvtárat a session-nek, azt, amit az előbb beállíottunk.
sudo mkdir -p  /var/rtorrent/session
Adjunk rá írási jogot mindenkinek:
sudo chmod a+w  /var/rtorrent/session
Ha megvagyunk, indítsuk el az rtorrenet egy screen sessionben. Ez azért kell, hogy ne külön terminálon kelljen belépni, ha fut az rtorrent, hanem egy terminálon tudjunk váltani a "taskok" között, anélkül, hogy az rtorrent (vagy ami a screenben van) megszakadna.
screen rtorrent
Így most jól elindult. Ha alul látni hogy "XMLRPC initialized with x function", akkor jók vagyunk. Még utánna szokta írni hogy az SCGI socket van használatban. Ha ez nem jelenne meg (mármint az első), valami nem jó.

Ha megy az rtorrent, akkor lépjünk ki a screenből a nélkül, hogy megszakítanánk a rtorrentet. Ezt a Crtl-A + D billentyűkombinációkal tehetjük meg. (screen-t nem ismerőknek: Először Ctrl-A majd a D betű) Ekkor eltünik az előbbi ablak, de az rtorrent fut tovább a háttérben. Visszatérni hozzá a
screen -faar
utasításal tudunk. Ha nem háttérbe rakni, hanem ténylegesen leállítani szeretnénk, akkor a Ctrl-Q -val tehetjük meg. (Persze amikor benne vagyunk) Hogy megnézzük, hogy milyen folyamatok vannak a screenben, kiadhatjuk a
screen -list
utasítást, ekkor kapunk egy listát a háttérbe rakott screen-ben futó folyamatokról. Ha nincs ilyen, akkor "No Sockets found in ..." üzenetet kapjuk.

Ok, megvan az rtorrent, merészebbek itt meg is állhatnak, a torrentbox működőképes, csak nincs kényelmes grafikus felülete. Telepítsük fel ezt is.

Az előbb a session-nél már létrehoztuk a /var/www könyvtárat, ezt most tegyük a www-data user tulajdonába:
sudo chown www-data:www-data /var/www/
Most állítsuk be a webszervert. Szerkesszük a konfigfájlját:
vim /etc/nginx/nginx.conf
Ez van most benne, kiemeltem a fontos sorokat:

user www-data;
worker_processes  1;


#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;


    types_hash_max_size 2048;
    server_tokens off;


    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  raspibox;

        charset utf-8;


        #access_log  logs/host.access.log  main;

        location / {
            root   /var/www/rutorrent;
            index  index.html index.htm index.php;
        }


    location /RPC2 {
        include scgi_params;
        scgi_pass 127.0.0.1:5000;
    }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
            location ~ \.php$ {

                    root   /var/www/rutorrent;
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
                    fastcgi_param  QUERY_STRING     $query_string;
                    fastcgi_param  REQUEST_METHOD   $request_method;
                    fastcgi_param  CONTENT_TYPE     $content_type;
                    fastcgi_param  CONTENT_LENGTH   $content_length;
                    fastcgi_intercept_errors        on;
                    fastcgi_ignore_client_abort     off;
                    fastcgi_connect_timeout 60;
                    fastcgi_send_timeout 180;
                    fastcgi_read_timeout 180;
                    fastcgi_buffer_size 128k;
                    fastcgi_buffers 4 256k;
                    fastcgi_busy_buffers_size 256k;
                    fastcgi_temp_file_write_size 256k;
            }


        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
Nem akarok minden egyes sort megmagyarázni, az nginx dokumentációjában ott van minden. A lényeg, létrehozunk a 80-a porton egy "raspibox" nevű szervert, utf-8 karakterkódolással, kiinduló könyvtára a /var/www/rutorrent. Aztán létrehozunk egy "RPC2" nevű location-t (ez amolyan átirányítás, a szerveren belül), ennek beállítjuk hogy scgi_pass 127.0.0.1:5000; vagyis azt, amit a rtorrentnek. Így fognak összekapcsolódni.Végül létrehozunk egy szabályt a szerveren belül minden .php-re végződő fájlra, hogy minden ilyet a 127.0.0.1 (vagyis a localhost, a helyi gép) 9000-es portjára küldjön. Ide tesszük mindjárt a php-t.

Ha megvagyunk, mentsük el. Indítsuk el, nézzük hogy rendben van-e:
systemctl start nginx.service
Most az
systemctl status nginx.service
paranccsal nézzük hogy fut-e vagy hibával leállt. Ha nincs hibára utaló sor, ellenőrízzük, nyissunk egy böngészőt, és írjuk be a raspi ip-jét, és nézzük az üzenetet. Ha nem azt kapjuk, hogy "az oldal nem található", akkor elvileg megy az nginx, bár még sem a php, sem a rutorrent nincs a helyén, így nem fog működni. Tegyünk ez ellen. Állítsuk be a php-t. Nyissuk meg a konfigfájlját:
sudo vim /etc/php/php-fpm.conf
Keressük meg a [www] részt, és ott a "user" opcióhoz írjuk be a "www-data"-t, valamint alá hogy "group", szintén "www-data"-val. Kb így nézzen ki:
user = www-data
group = www-data
Kicsit lejjebb lesz egy "listen" opció, ott állítsuk be azt, amit az előbb az nginx-ben, a localhost 9000-es portját. Így:
listen = 127.0.0.1:9000
Még lejjebb a listen userét és groupját is beállíthatjuk:
listen.owner = www-data
listen.group = www-data
Ennyi volna, mentsük, lépjünk ki. Indítsuk el a fatcgi-t, hogy legyen végre php-nk:
sudo systemctl start php-fpm.service
Ellenőrízzük hogy rendben elindult-e:
sudo systemctl status php-fpm.service
Ha jónak néz ki, megvan a php is. Nézzük is meg, másoljunk egy index.php fájlt a /var/www/rutorrent könyvtárba, és írjuk bele hogy "<?php phpinfo() ?>". Ha most újra megnézzük a raspi ip-jét egy böngészőben, egy ilyesmi képet kell lássunk:
php info

Rendben, utolsó fázis következik, a rutorrent. Lépjünk be a /var/www/ könyvtárba:
cd /var/www
Töltsük le a legfrisebb verziót közvetlenül:
wget http://rutorrent.googlecode.com/files/rutorrent-3.4.tar.gz
Ez a bejegyzés írása idején volt a legfrissebb, a project oldalán baloldalon ott a download, ott a link az aktuálisra.
Ez egy tömörített fájl, csomagoljuk ki
tar xvf  rutorrent-3.4.tar.gz
Szépen ki is bontja, egyenesen a rutorrent könyvtárunkba.
Nyissuk meg a konfigurációs fájlját:
vim rutorrent/conf/config.php
Itt a legfontosabb rész a
$scgi_port = 5000;
$scgi_host = "127.0.0.1";
Ez legyen beállítva. Még beállíthatjuk hogy
$topDirectory = '/STORAGE';
Mentsük el, kilépés.  Ha most megnézzük mi van a raspi ip-jén a böngészőben, és a ruTorrent felülete fogad, meg is vagyunk. Ha a ruTorrent megy, de azt írja hogy nincs kapcsolata az rtorrent-el, akkor ellenőrizzük a php-fpm beállításait, a portokat, hogy megvannak-e a helyükön, megy-e az rtorrent, van-e vele kapcsolat. Ha a rutorrent sem megy, akkor az nginx-et ellenőrizzük, fut-e, ha nem, a log-ban ellenőrizzük a hibát.

Sok sikert!

Nincsenek megjegyzések:

Megjegyzés küldése