Seafile

Instalujemy pakiety:

pkg install mysql56-server seahub seafile-server gettext-tools

Włączamy MySQL:

echo 'mysql_enable="YES"' > /etc/rc.conf.d/mysql
service mysql-server start

Ustawiamy hasło na root-a na MySQL:

mysqladmin -u root password

Jeśli baza jest zdalna (lub odpalana w jailu), trzeba przynajmniej na chwilę dać uprawnienia root-owi na pełną kontrolę zdalną:

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

Uruchamiamy setup seafile:

cd /usr/local/www/haiwen/seafile-server/
./setup-seafile-mysql.sh

Przykładowy output:

Checking python on this machine ...
  Checking python module: setuptools ... Done.
  Checking python module: python-imaging ... Done.
  Checking python module: python-mysqldb ... Done.

-----------------------------------------------------------------
This script will guide you to setup your seafile server using MySQL.
Make sure you have read seafile server manual at

        https://github.com/haiwen/seafile/wiki

Press ENTER to continue
-----------------------------------------------------------------


What is the name of the server? It will be displayed on the client.
3 - 15 letters or digits
[ server name ] Files

What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] seafile.domain.com

Where do you want to put your seafile data?
Please use a volume with enough free space
[ default "/usr/local/www/haiwen/seafile-data" ] 

Which port do you want to use for the seafile fileserver?
[ default "8082" ] 

-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------

[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases

[ 1 or 2 ] 1

What is the host of mysql server?
[ default "localhost" ] 192.168.0.6

Which hosts should be able to use your MySQL Account?
[ default "%" ] 192.168.0.6

What is the port of mysql server?
[ default "3306" ] 

What is the password of the mysql root user?
[ root password ] 

verifying password of user root ...  done

Enter the name for mysql user of seafile. It would be created if not exists.
[ default "root" ] seafile

Enter the password for mysql user "seafile":
[ password for seafile ] 

Enter the database name for ccnet-server:
[ default "ccnet-db" ] 

Enter the database name for seafile-server:
[ default "seafile-db" ] 

Enter the database name for seahub:
[ default "seahub-db" ] 

---------------------------------
This is your configuration
---------------------------------

    server name:            Files
    server ip/domain:       seafile.domain.com

    seafile data dir:       /usr/local/www/haiwen/seafile-data
    fileserver port:        8082

    database:               create new
    ccnet database:         ccnet-db
    seafile database:       seafile-db
    seahub database:        seahub-db
    database user:          seafile



---------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------

Generating ccnet configuration ...

done
Successly create configuration dir /usr/local/www/haiwen/ccnet.
Generating seafile configuration ...

Done.
done
Generating seahub configuration ...

----------------------------------------
Now creating seahub database tables ...

----------------------------------------

creating seafile-server-latest symbolic link ...  done




-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------

run seafile server:     ./seafile.sh { start | stop | restart }
run seahub  server:     ./seahub.sh  { start <port> | stop | restart <port> }

-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------

port of seafile fileserver:   8082
port of seahub:               8000

When problems occur, Refer to

        https://github.com/haiwen/seafile/wiki

for information.

Generujemy locale dla Seahub-a (port tego domyślnie nie robi):

cd /usr/local/www/haiwen/seafile-server/seahub
for i in locale/*/*/*.po thirdpart/captcha/locale/*/*/*.po thirdpart/registration/locale/*/*/*.po ; do echo Procesing: $i ; msgfmt -v -o ${i%.po}.mo $i ; done

Konfigurujemy domyślne locale dla Seahub. W pliku /usr/local/www/haiwen/seafile-server/seahub/seahub/settings.py ustawiamy:

TIME_ZONE = 'Europe/Warsaw'
LANGUAGE_CODE = 'pl'

Do pliku /usr/local/www/haiwen/conf/seahub_settings.py również dopisujemy locale, dodatkowo FILE_SERVER_ROOT (potrzebny do http) oraz konfigurację poczty:

FILE_SERVER_ROOT = 'https://seafile.domain.com/seafhttp'
TIME_ZONE = 'Europe/Warsaw'
LANGUAGE_CODE = 'pl'
LANGUAGE = 'pl'
SITE_NAME = 'Files'
SITE_TITLE = 'Private Seafile'
 
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.domain.com'
EMAIL_HOST_USER = 'seafile@smtp.domain.com'
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxxxxxxxxxxxxx'
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

W pliku /usr/local/www/haiwen/conf/ccnet.conf ustawiamy SERVICE_URL:

SERVICE_URL = https://seafile.domain.com

W pliku /usr/local/www/haiwen/conf/seafdav.conf włączamy obsługę WEBDAV:

[WEBDAV]
enabled = true
port = 8080
fastcgi = true
share_name = /seafdav

Poprawiamy prawa dostępu do całego seafile-a:

cd /usr/local/www/
chown -R seafile:seafile haiwen

Konfiguracja nginx:

server {
  listen  80;
  listen  [::]:80;
  server_name seafile.domain.com;

  return 301 https://$server_name$request_uri;  # enforce https
}

server {
  listen  443 ssl http2;
  listen  [::]:443 ssl http2;
  server_name seafile.domain.com;

  access_log /var/log/nginx/seafile.domain.com-access.log;
  error_log /var/log/nginx/seafile.domain.com-error.log;

  ssl_certificate   /etc/ssl/www/seafile.domain.com.crt;
  ssl_certificate_key /etc/ssl/www/seafile.domain.com.key;

  proxy_set_header X-Forwarded-For $remote_addr;

  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  server_tokens off;

  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;
    fastcgi_param   HTTPS               on;
    fastcgi_param   HTTP_SCHEME         https;

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

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

  location /seafdav {
    fastcgi_pass    127.0.0.1:8080;
    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;
    fastcgi_param   HTTPS               on;
    fastcgi_param   HTTP_SCHEME         https;

    client_max_body_size 0;
    proxy_connect_timeout  36000s;
    proxy_read_timeout  36000s;
    proxy_send_timeout  36000s;
    send_timeout  36000s;

    # This option is only available for Nginx >= 1.8.0. See more details below.
    proxy_request_buffering off;

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

  location /media {
        root /usr/local/www/haiwen/seafile-server-latest/seahub;
  }
}

Przed pierwszym uruchomieniem wywalamy z /tmp śmieci Seahub-a:

rm -rf /tmp/seahub_cache

Uruchamiamy serwisy:

echo 'nginx_enable="YES"' > /etc/rc.conf.d/nginx
echo 'seafile_enable="YES"' > /etc/rc.conf.d/seafile
echo 'seahub_enable="YES"' > /etc/rc.conf.d/seahub
echo 'seahub_fastcgi="YES"' >> /etc/rc.conf.d/seahub
service nginx start
service seafile start
service seahub start

Ustawiamy superadmina:

/usr/local/www/haiwen/seafile-server/reset-admin.sh 

Jeśli wszystko działa, wywalamy uprawnienia root-a by mógł się globalnie logować do MySQL-a:

mysql> show grants for root;
+------------------------------------------------------------------------------------------+
| Grants for root@%                                                                        |
+------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*XX' WITH GRANT OPTION |
+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> DROP USER 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)