Esprit & Schmackes

wie man sich ein Wölkchen häkelt

Setup von Seafile auf Ubuntu 12.04 mit Nginx & PostgreSQL so um die 1362 Wörter

Der erste Versuch, eine Büro-Cloud mit Owncloud auf- und einzusetzen, endete relativ schnell mit der Suche nach passenden Alternativen, nachdem uns die ersten zaghaften Schritte mit Owncloud fast den Server weggeblasen hätten - ist nicht so schön, wenn man ständig in Synchronisierungsfehler-Endlosschleifen landet, die dann in seliger Ignoranz des eingestellten Log-Levels und in aller Ruhe Datenbank wie Dateisystem mit ihren Problemchen vollbomben. Seitdem haben wir im Büro Seafile als Selfhosting im Einsatz und selbiges für gut und problemfrei befunden. Naja, bis auf ein paar Verständnisprobleme zu den Bibliotheken und solcherart Tickets an mich:

Ticket

aber ich bin ja Elend gewohnt. Ansonsten nutzen wir Seafile gern und regelmäßig. Das kürzliche Update von 1.8.5 auf 2.1.4 lief auch reibungslos und hat ein paar ziemlich sinnvolle Verbesserungen zu bieten, also wollte ich mir das zuhause auch mal aufsetzen. Hier aber sollte statt dem Standard SQLite PostgreSQL und statt dem Standardserver Nginx zum Einsatz kommen.

 

Prärequisiten

 

wget https://bitbucket.org/haiwen/seafile/downloads/seafile-server_2.1.4_x86-64.tar.gz
sudo apt-get install python2.7 python-setuptools python-simplejson python-imaging python-flup sqlite3
sudo apt-get build-dep python-psycopg2 && sudo pip install psycopg2

mkdir seafile
mv seafile-server_2.1.4_x86-64.tar.gz ./seafile
cd seafile/
tar xfzv seafile-server_2.1.4_x86-64.tar.gz
ln -s ./seafile-server-2.1.4 seafile-server-latest

 

Danach wird Seafile testweise im Standardsetup aufgesetzt:

./seafile-server-latest/setup-seafile.sh

denn das Setup-Script bietet neben SQLite nur MySQL als Datenhaltung an.

Erster Test mit

seafile-server-latest/seafile.sh start
seafile-server-latest/seahub.sh start

läuft brav auf my.domain.name:8000.

 

PostgreSQL verwenden

 

Wir brauchen drei (ja, drei) neue Datenbanken für Seafile.

CREATE DATABASE ccnet_db ENCODING 'utf8';
CREATE DATABASE seafile_db ENCODING 'utf8';
CREATE DATABASE seahub_db ENCODING 'utf8';

 

Danach müssen die ccnet/ccnet.conf, die seafile-data/seafile.conf und die seahub_settings.py angepasst werden.

Die ccnet/ccnet.conf sieht dann so aus:

[General]
USER_NAME = {USERNAME}
ID = {ID}
NAME = {NAME}
SERVICE_URL = my.domain.name:8000

[Network]
PORT = 10001

[Client]
PORT = 13418

[Database]
ENGINE=pgsql
HOST=localhost
USER={DBUSER}
PASSWD={DBPASSWORD}
DB=ccnet_db

 

und die seafile-data/seafile.conf so:

[network]
port=12001

[httpserver]
port=8082

[database]
type=pgsql
host=localhost
user={DBUSER}
password={PASSWORD}

db_name=seafile_db

 

und die seahub_settings.py so:

SECRET_KEY = {SECRETKEY}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME' : 'seahub_db',
        'USER' : {DBUSER],
        'PASSWORD' : {DBPASSWORD},
        'HOST' : 'localhost',
    }
}

 

Danach wird erst seafile gestartet, wobei die ersten Tabellen erstellt werden:

seafile-server-latest/seafile.sh start

NOTICE:  CREATE TABLE will create implicit sequence "emailuser_id_seq" for serial column "emailuser.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "emailuser_pkey" for table "emailuser"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "emailuser_email_key" for table "emailuser"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "binding_peer_id_key" for table "binding"
NOTICE:  CREATE TABLE will create implicit sequence "Group_group_id_seq" for serial column "Group.group_id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "Group_pkey" for table "Group"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "groupuser_group_id_user_name_key" for table "groupuser"
NOTICE:  CREATE TABLE will create implicit sequence "organization_org_id_seq" for serial column "organization.org_id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "organization_pkey" for table "organization"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "organization_url_prefix_key" for table "organization"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "orguser_org_id_email_key" for table "orguser"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "orggroup_org_id_group_id_key" for table "orggroup"
Starting seafile server, please wait ...
Seafile server started

Done.

 

Für seahub müssen einige Umgebungsvaribalen gesetzt und weitere Tabellen erstellt werden:

 

export CCNET_CONF_DIR=/home/user/web/seafile/ccnet
export SEAFILE_CONF_DIR=/home/user/web/seafile/seafile-data
INSTALLPATH=/home/user/web/seafile/seafile-server-latest
export PYTHONPATH=${INSTALLPATH}/seafile/lib/python2.6/site-packages:${INSTALLPATH}/seafile/lib64/python2.6/site-packages:${INSTALLPATH}/seahub/thirdpart:$PYTHONPATH
cd seafile-server-latest/seahub
python manage.py syncdb

Loading ccnet config from /home/user/web/seafile/ccnet
Loading seafile config from /home/user/web/seafile/seafile-data
Creating tables ...
Creating table django_content_type
Creating table django_session
Creating table registration_registrationprofile
Creating table captcha_captchastore
Creating table api2_token
Creating table avatar_avatar
Creating table avatar_groupavatar
Creating table base_uuidobjidmap
Creating table base_filediscuss
Creating table base_filecontributors
Creating table base_userstarredfiles
Creating table base_dirfileslastmodifiedinfo
Creating table base_filelastmodifiedinfo
Creating table base_userenabledmodule
Creating table base_groupenabledmodule
Creating table base_userlastlogin
Creating table base_commandslastcheck
Creating table base_innerpubmsg
Creating table base_innerpubmsgreply
Creating table contacts_contact
Creating table wiki_personalwiki
Creating table wiki_groupwiki
Creating table group_groupmessage
Creating table group_messagereply
Creating table group_messageattachment
Creating table group_publicgroup
Creating table message_usermessage
Creating table message_usermsglastcheck
Creating table message_usermsgattachment
Creating table notifications_devicetoken
Creating table notifications_notification
Creating table notifications_usernotification
Creating table options_useroptions
Creating table profile_profile
Creating table profile_detailedprofile
Creating table share_anonymousshare
Creating table share_fileshare
Creating table share_uploadlinkshare
Creating table share_privatefiledirshare
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

 

Bei der initialen Installation wurden zwar Accountdaten für den Adminuser abgefragt, diese werden aber nicht in die Tabellen übernommen. Deswegen muss der Account nochmal mit

python manage.py createsuperuser

angelegt werden.

 

Nginx verwenden

 

Die Serverkonfiguration mache ich direkt mit erzwungenem HTTPS:

vi /etc/nginx/sites-available/default


server {
        listen 80;
        listen 443 ssl;
        server_name my.domain.name;

        if ($scheme != "https") {
               rewrite ^ https://$server_name$request_uri? redirect;
        }

        ssl_certificate "/etc/ssl/cert.crt";
        ssl_certificate_key "/etc/ssl/cert.key";

        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;

                access_log      /var/log/seafile/seahub.access.log;
                error_log       /var/log/seafile/seahub.error.log;


        }

        location /seafhttp {
                rewrite ^/seafhttp(.*)$ $1 break;
                proxy_pass http://127.0.0.1:8082;
                client_max_body_size 20G; #maximale Uploadgröße
                fastcgi_buffers 64 4K;
        }

        location /media {
                root /home/user/web/seafile/seafile-server-latest/seahub;
        }
}

 

Danach in ccnet/ccnet.conf die SERVICE_URL anpassen.

SERVICE_URL = https://my.domain.name

 

und in seahub_settings.py den HTTP_SERVER_ROOT:

HTTP_SERVER_ROOT = 'https://my.domain.name/seafhttp'

 

service nginx restart

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

 

Und um uns das ganze Startgeömmel zu sparen, können wir noch ein

Startup-Script einrichten

 

vi /etc/init.d/seafile

#!/bin/sh

# Change the value of "user" to your linux user name
user=user

# Change the value of "script_path" to your path of seafile installation
seafile_dir=/home/user/web/seafile
script_path=${seafile_dir}/seafile-server-latest
seafile_init_log=${seafile_dir}/logs/seafile.init.log
seahub_init_log=${seafile_dir}/logs/seahub.init.log

# Change the value of fastcgi to true if fastcgi is to be used
fastcgi=true
# Set the port of fastcgi, default is 8000. Change it if you need different.
fastcgi_port=8000

case "$1" in
        start)
                sudo -u ${user} ${script_path}/seafile.sh start > ${seafile_init_log}
                if [  $fastcgi = true ];
                then
                        sudo -u ${user} ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} > ${seahub_init_log}
                else
                        sudo -u ${user} ${script_path}/seahub.sh start > ${seahub_init_log}
                fi
        ;;
        restart)
                sudo -u ${user} ${script_path}/seafile.sh restart > ${seafile_init_log}
                if [  $fastcgi = true ];
                then
                        sudo -u ${user} ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} > ${seahub_init_log}
                else
                        sudo -u ${user} ${script_path}/seahub.sh restart > ${seahub_init_log}
                fi
        ;;
        stop)
                sudo -u ${user} ${script_path}/seafile.sh $1 > ${seafile_init_log}
                sudo -u ${user} ${script_path}/seahub.sh $1 > ${seahub_init_log}
        ;;
        *)
                echo "Usage: /etc/init.d/seafile {start|stop|restart}"
                exit 1
        ;;
esac

 

vi /init/seafile.conf

start on (started postgresql
and runlevel [2345])
stop on (runlevel [016])

 

Dit wär's auch schon.

 

 

Kommentare

was zu melden?