OpenVZ - serwer plików - Seafile

Jeśli czytaliście moje poprzednie wpisy to zaczynamy od.... tak, dokładnie:

apt-get update && apt-get upgrade -y

dpkg-reconfigure dash

wybieramy No


A teraz dalej. Do SeaFile będę wykorzystywał bazę MySQL. Można korzystać z SQLite jednak moja poprzednia instancja to MySQL, więc na niej się oprę. Instalujemy co to będzie nam potrzebne:

apt-get install  python-setuptools git python-simplejson python-imaging python-flup nginx mysql-server mysql-client python-mysqldb -y

Utwórzmy katalog, gdzie będzie nasz seafile (aplikacja i dane).

mkdir /SEAFILE

Wejdźmy do niego

cd /SEAFILE

i pobierzmy aplikację (na moment pisania tego wpisy jest to wersja 4.1.2)

wget https://bitbucket.org/haiwen/seafile/downloads/seafile-server_4.1.2_x86-64.tar.gz --no-check-certificate

wypakujmy ją:

tar -xzf seafile-server_4.1.2_x86-64.tar.gz

Archiwum mozna usunąć:

rm seafile-server_4.1.2_x86-64.tar.gz

Teraz uruchamiamy instalację (dla SQLite):

./seafile-server-4.1.2/setup-seafile.sh

Teraz uruchamiamy instalację (dla MySQL):

./seafile-server-4.1.2/setup-seafile-mysql.sh

Instalacja polega na odpowiadaniu na pytania, więc myślę, że jak ktoś się zabiera za instalację SeaFile to poradzi sobie ;)


Kolejny krok to konfiguracja nginxa.

Podaję pełną zawartość pliku default:


nano /etc/nginx/sites-enabled/default

server {
    listen 80;
    server_name sf2.DOMENA www.sf2.DOMENA;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
        fastcgi_pass    127.0.0.1:8000;
        fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;
        fastcgi_param   PATH_INFO           $fastcgi_script_name;

        fastcgi_param    SERVER_PROTOCOL        $server_protocol;
        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_param    SERVER_ADDR         $server_addr;
        fastcgi_param    SERVER_PORT         $server_port;
        fastcgi_param    SERVER_NAME         $server_name;
        fastcgi_param   REMOTE_ADDR         $remote_addr;

        access_log      /var/log/nginx/seahub.access.log;
        error_log       /var/log/nginx/seahub.error.log;
    }

    location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8082;
        client_max_body_size 0;
        proxy_connect_timeout  36000s;
        proxy_read_timeout  36000s;
    }

    location /media {
        root /SEAFILE/seafile-server-latest/seahub;
    }
}



/etc/init.d/nginx restart


Jeszcze konfiguracja ścieżek w kilku plikach (będąc w katalogu seafile-server-latest):

nano ccnet/ccnet.conf

SERVICE_URL = http://sf2.DOMENA


nano seahub_settings.py

FILE_SERVER_ROOT = 'http://sf2.DOMENA/seafhttp'


Teraz uruchamiamy usługi:

./seafile-server-latest/seafile.sh restart
./seafile-server-latest/seahub.sh restart-fastcgi

Jeśli wszystko się udało (a powinno) to wracamy na serwer matkę.

Edytujemy wpis dla wirtualnego hosta:

server {
        listen 80;
        server_name sf2.DOMENA www.sf2.DOMENA;

        location / {
                proxy_set_header X-Real_IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
                proxy_pass http://192.168.0.105:80/;
        }
}

/etc/init.d/nginx restart

Oraz wpis do IPtables:

iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 10001 -j DNAT --to-destination 192.168.0.105:10001
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 12001 -j DNAT --to-destination 192.168.0.105:12001
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 13418 -j DNAT --to-destination 192.168.0.105:13418

Jeśli potrzebujemy mieć dostęp do WebDAV to opisałem to tutaj:

https://dszymczuk.pl/blog/2015/seafile-webdav/
https://dszymczuk.pl/blog/2015/seafile-webdav-nie-dziala-na-412/


Gotowe.



Kolejny dodatek.

Skrypt do auto uruchamiania w razie niespodziewanego zakończenia procesu.

nano /seafile_start.sh

#!/bin/bash
 
 
CCNET=`ps ax | grep ccnet-server | grep -v grep | wc -l`
SEAF=`ps ax | grep seaf-server | grep -v grep | wc -l`
 
 
if [[ $CCNET -eq 0 ] || [ $SEAF -eq 0 ]]
then
    /SEAFILE/seafile-server-latest/seafile.sh restart
    /SEAFILE/seafile-server-latest/seahub.sh restart-fastcgi
else
    exit
fi

I ostatnie kroki:

chmod +x /seafile_start.sh

nano /etc/crontab

*/5 * * * * root /seafile_start.sh


Teraz co 5 min skrypt sprawdzi, czy Seafile działa. Jeśli nie, to uruchomi procesy.