Outils personnels

Seafile : installation sur CentOS : Différence entre versions

De wikiGite

(Mise à jour)
(Lancement automatique)
 
(29 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
== Installation ==
 
== Installation ==
Python 2.6 doit être installé. Sur une CentOS 5, on l'installera par :
+
Update 08/2018 : procédure revue pour CentOS7 et Seafile 6.3.2 (particularité : Seahub n'utilise plus fastcgi).
<syntaxhighlight lang="bash">
 
yum install --enablerepo=epel python26
 
</syntaxhighlight>
 
(voir [[Dépôts complémentaires]] pour le dépôt EPEL)
 
  
 
Installer les pré-requis :
 
Installer les pré-requis :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
yum install python-setuptools python-simplejson python-imaging MySQL-python httpd mod_ssl
 
yum install python-setuptools python-simplejson python-imaging MySQL-python httpd mod_ssl
</syntaxhighlight>
 
ou, sur CentOS5 :
 
<syntaxhighlight lang="bash">
 
yum install --enablerepo=epel python26-distribute python26-setuptools python26-simplejson python26-imaging python26-mysqldb
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Vérifier la dernière version sur https://bitbucket.org/haiwen/seafile/downloads
+
Vérifier la dernière version serveur sur https://www.seafile.com/en/download/
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
  cd install/
 
  cd install/
  wget https://bitbucket.org/haiwen/seafile/downloads/seafile-server_{version seafile}_x86-64.tar.gz # ou ....i386.tar.gz sur système 32 bits
+
  wget https://download.seadrive.org/seafile-server_[ dernière version de Seafile ]_x86-64.tar.gz # ou ....i386.tar.gz sur système 32 bits
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Ligne 26 : Ligne 18 :
 
  mkdir seafile
 
  mkdir seafile
 
  cd seafile
 
  cd seafile
  tar -xvzf /root/install/seafile-server_{version seafile}_*.tar.gz
+
  tar -xvzf /root/install/seafile-server_[ version seafile ]_*.tar.gz
 
</syntaxhighlight>
 
</syntaxhighlight>
 
L'archive crée un sous-répertoire avec la version en cours. Lors d'une mise à jour, la précédente version ne sera donc pas écrasée.
 
L'archive crée un sous-répertoire avec la version en cours. Lors d'une mise à jour, la précédente version ne sera donc pas écrasée.
Ligne 32 : Ligne 24 :
 
Lancer l'installation (qui créera les bases de données) :
 
Lancer l'installation (qui créera les bases de données) :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
  cd seafile-server-{version seafile}
+
  cd seafile-server-[ version seafile ]
 
  ./setup-seafile-mysql.sh
 
  ./setup-seafile-mysql.sh
 
</syntaxhighlight>
 
</syntaxhighlight>
Ligne 47 : Ligne 39 :
 
On peut alors tester Seafile directement :
 
On peut alors tester Seafile directement :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 +
sudo su - seafile # au cas où on s'est connecté "root" auparavant
 
  ./seafile.sh start
 
  ./seafile.sh start
 
  ./seahub.sh start
 
  ./seahub.sh start
 
</syntaxhighlight>
 
</syntaxhighlight>
Et se connecter à l'interface par <nowiki>http://IP_DU_SERVEUR:8000</nowiki>
+
NOTE : IL EST IMPORTANT de lancer "seahub.sh start" AU MOINS UNE FOIS en ligne de commande, car cette première fois demande la mail (donc le login) et le mot de passe de l'utilisateur admin de Seafile !
 +
 
 +
Se connecter à l'interface par <nowiki>http://IP_DU_SERVEUR:8000</nowiki>
 +
 
 +
== Configuration ==
 +
Editer le fichier /home/seafile/conf/seafile.conf
 +
[fileserver]
 +
port = 8082
 +
 +
[database]
 +
type = mysql
 +
host = 127.0.0.1
 +
port = 3306
 +
user = seafile
 +
password = PwdMySQLseafile
 +
db_name = seafile-db
 +
connection_charset = utf8
 +
 
 +
 
 +
Editer le fichier /home/seafile/conf/seahub_settings.py :
 +
# -*- coding: utf-8 -*-
 +
SECRET_KEY = "d56a6cbc-751c-dc66-9fdb-45f4492f5abda7d3"
 +
 +
DATABASES = {
 +
    'default': {
 +
        'ENGINE': 'django.db.backends.mysql',
 +
        'NAME': 'seahub-db',
 +
        'USER': 'seafile',
 +
        'PASSWORD': 'PwdSeafile',
 +
        'HOST': '127.0.0.1',
 +
        'PORT': '3306',
 +
        'OPTIONS': {
 +
            'init_command': 'SET '''default_storage_engine'''=INNODB',
 +
        }
 +
    }
 +
}
 +
 +
FILE_SERVER_ROOT = 'https://seafile.domain.fr/seafhttp'
 +
 +
EMAIL_USE_TLS = False
 +
EMAIL_HOST = 'localhost'        # smpt server
 +
EMAIL_HOST_USER = ''    # username and domain
 +
EMAIL_HOST_PASSWORD = ''    # password
 +
EMAIL_PORT = '25'
 +
DEFAULT_FROM_EMAIL = 'postmaster@domain.fr' # parce que EMAIL_HOST_USER est vide ci-dessus, sinon on peut reprendre cette variable.
 +
SERVER_EMAIL = 'postmaster@domain.fr'
 +
 
 +
Attention au "default_storage_engine" (plutôt que "storage_engine") à partir de la version 5 de Seafile !
  
 
== Lancement automatique ==
 
== Lancement automatique ==
 
https://github.com/haiwen/seafile/wiki/Start-seafile-server-at-system-bootup
 
https://github.com/haiwen/seafile/wiki/Start-seafile-server-at-system-bootup
  
D'abord, arrêter Seafile ! Il a été lancé avec le compte root pour le test, on le relancera avec un compte spécifique.
+
D'abord, arrêter Seafile !
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 +
cd seafile-server-latest
 
  ./seafile.sh stop
 
  ./seafile.sh stop
 
  ./seahub.sh stop
 
  ./seahub.sh stop
Ligne 63 : Ligne 104 :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
  adduser -c "Seafile user" -d /home/seafile seafile
 
  adduser -c "Seafile user" -d /home/seafile seafile
  chown -R seafile:apache /home/seafile
+
  chown -R seafile:seafile /home/seafile
 
  chmod 750 /home/seafile
 
  chmod 750 /home/seafile
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Créer le fichier /etc/sysconfig/seafile :
+
'''IMPORTANT''' : vérifier l'appartenance de l'arborescence /home/seafile pour qu'il n'y ait pas de problèmes de droits !
<pre>
+
<syntaxhighlight lang="bash">
# Utilisateur lançant seafile
+
chown -R seafile:seafile /home/seafile
user=seafile
+
chmod 750 /home/seafile
 +
</syntaxhighlight>
  
# Répertoire d'installation
+
Créer /etc/systemd/system/seafile.service
seafile_dir=/home/seafile
+
<syntaxhighlight lang="bash">
script_path=${seafile_dir}/seafile-server-latest
+
[Unit]
seafile_init_log=${seafile_dir}/logs/seafile.init.log
+
Description=Seafile
seahub_init_log=${seafile_dir}/logs/seahub.init.log
+
# add mysql.service or postgresql.service depending on your database to the line below
 +
After=network.target mysql.service
  
# Mettre la valeur sur true si on utilise fastcgi
+
[Service]
fastcgi=true
+
Type=oneshot
 +
ExecStart=/home/seafile/seafile-server-latest/seafile.sh start
 +
ExecStop=/home/seafile/seafile-server-latest/seafile.sh stop
 +
RemainAfterExit=yes
 +
User=seafile
 +
Group=seafile
  
# définir le port pour fastcgi, par défaut le port 8000.
+
[Install]
fastcgi_port=8000
+
WantedBy=multi-user.target
</pre>
 
 
Créer un script d'init pour le serveur seafile /etc/init.d/seafile :
 
<syntaxhighlight lang="bash" enclose="div" >
 
#!/bin/bash
 
#
 
# seafile
 
 
 
#
 
# chkconfig: - 68 32
 
# description: seafile
 
 
 
# Source function library.
 
. /etc/init.d/functions
 
 
 
# Source networking configuration.
 
. /etc/sysconfig/network
 
 
 
if [ -f /etc/sysconfig/seafile ];then
 
        . /etc/sysconfig/seafile
 
        else
 
            echo "Config file /etc/sysconfig/seafile not found! Bye."
 
            exit 200
 
        fi
 
 
 
RETVAL=0
 
 
 
start() {
 
        # Start daemons.
 
        echo -n $"Starting seafile: "
 
        ulimit -n 30000
 
        su - ${user} -c"${script_path}/seafile.sh start >> ${seafile_init_log} 2>&1"
 
        RETVAL=$?
 
        echo
 
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/seafile
 
        return $RETVAL
 
}
 
 
 
stop() {
 
        echo -n $"Shutting down seafile: "
 
        su - ${user} -c"${script_path}/seafile.sh stop >> ${seafile_init_log} 2>&1"
 
        RETVAL=$?
 
        echo
 
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/seafile
 
        return $RETVAL
 
}
 
 
 
# See how we were called.
 
case "$1" in
 
  start)
 
        start
 
        ;;
 
  stop)
 
        stop
 
        ;;
 
  restart|reload)
 
        stop
 
        start
 
        RETVAL=$?
 
        ;;
 
  *)
 
        echo $"Usage: $0 {start|stop|restart}"
 
        RETVAL=3
 
esac
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
et /etc/systemd/system/seahub.service
 +
<syntaxhighlight lang="bash">
 +
[Unit]
 +
Description=Seafile hub
 +
After=network.target seafile.service
  
Créer un script d'init pour l'interface web seahub /etc/init.d/seahub :
+
[Service]
<syntaxhighlight lang="bash" enclose="div" >
+
# change start to start-fastcgi if you want to run fastcgi
#!/bin/bash
+
ExecStart=/home/seafile//seafile-server-latest/seahub.sh start
#
+
ExecStop=/home/seafile/seafile-server-latest/seahub.sh stop
# seahub
+
User=seafile
 +
Group=seafile
 +
Type=oneshot
 +
RemainAfterExit=yes
  
#
+
[Install]
# chkconfig: - 69 31
+
WantedBy=multi-user.target
# description: seahub
 
 
 
# Source function library.
 
. /etc/init.d/functions
 
 
 
# Source networking configuration.
 
. /etc/sysconfig/network
 
 
 
if [ -f /etc/sysconfig/seafile ];then
 
        . /etc/sysconfig/seafile
 
        else
 
            echo "Config file /etc/sysconfig/seafile not found! Bye."
 
            exit 200
 
        fi
 
 
 
RETVAL=0
 
 
 
start() {
 
        # Start daemons.
 
        echo -n $"Starting seahub: "
 
        ulimit -n 30000
 
        if [ $fastcgi = true ];
 
                then
 
                su - ${user} -c"${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} 2>&1"
 
                else
 
                su - ${user} -c"${script_path}/seahub.sh start >> ${seahub_init_log} 2>&1"
 
                fi
 
        RETVAL=$?
 
        echo
 
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/seahub
 
        return $RETVAL
 
}
 
 
 
stop() {
 
        echo -n $"Shutting down seafile: "
 
        su - ${user} -c"${script_path}/seahub.sh stop >> ${seahub_init_log} 2>&1"
 
        RETVAL=$?
 
        echo
 
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/seahub
 
        return $RETVAL
 
}
 
 
 
# See how we were called.
 
case "$1" in
 
  start)
 
        start
 
        ;;
 
  stop)
 
        stop
 
        ;;
 
  restart|reload)
 
        stop
 
        start
 
        RETVAL=$?
 
        ;;
 
  *)
 
        echo $"Usage: $0 {start|stop|restart}"
 
        RETVAL=3
 
esac
 
 
 
exit $RETVAL
 
</syntaxhighlight>
 
   
 
Activer les serveurs :
 
<syntaxhighlight lang="bash">
 
chmod 550 /etc/init.d/seafile
 
chmod 550 /etc/init.d/seahub
 
chkconfig --add seafile
 
chkconfig --add seahub
 
chkconfig seahub on
 
chkconfig seafile on
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
Activer et lancer les 2 services
On peut les lancer :
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
service seafile start
+
systemctl enable seafile
service seahub start
+
systemctl enable seahub
 +
systemctl start seafile
 +
systemctl start seahub
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
<!-- ARCHIVES
 
== Plusieurs versions de Python ==
 
== Plusieurs versions de Python ==
 
Si, après l'installation de Seafile avec Python 2.6, une version 2.7 est installée sur le serveur, par défaut c'est cette dernière qui sera utilisée (les scripts de lancement de Seafile et Seahub recherchent les binaires Python et s'arrêtent sur la 2.7).
 
Si, après l'installation de Seafile avec Python 2.6, une version 2.7 est installée sur le serveur, par défaut c'est cette dernière qui sera utilisée (les scripts de lancement de Seafile et Seahub recherchent les binaires Python et s'arrêtent sur la 2.7).
Ligne 247 : Ligne 170 :
  
 
Créer /home/seafile/.bash_profile avec :
 
Créer /home/seafile/.bash_profile avec :
  PYTHON=/usr/bin/python # le chemin de l'exécutable qu'on souhaite
+
  PYTHON=/usr/bin/python2.6 # le chemin de l'exécutable qu'on souhaite
 
  export PYTHON
 
  export PYTHON
  
 
+
<syntaxhighlight lang="bash">
 
  chown seafile.seafile /home/seafile/.bash_profile
 
  chown seafile.seafile /home/seafile/.bash_profile
 +
</syntaxhighlight>
 
Les scripts ne devraient plus chercher Python et démarrer sans problème.
 
Les scripts ne devraient plus chercher Python et démarrer sans problème.
 +
-->
 +
 +
== Connexion seahub par Apache ==
 +
Depuis la version 6.3.2, Seafile n'utilise plus fastcgi. On utilise Apache en proxy simple. On ne détaillera ici que la configuration SSL.
  
== Connexion à Apache ==
+
<!-- ARCHIVES
 
Pour la liaison entre Apache et Seafile, on utilisera Fastcgi. Sur CentOS, à installer des dépôts RPMForge (voir [[Dépôts complémentaires]]) :
 
Pour la liaison entre Apache et Seafile, on utilisera Fastcgi. Sur CentOS, à installer des dépôts RPMForge (voir [[Dépôts complémentaires]]) :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 267 : Ligne 195 :
 
   </IfModule>
 
   </IfModule>
 
'''NOTE : le fichier /var/www/seahub.fcgi n'a pas besoin d'exister, ce n'est qu'un "wrapper" (voir ci-dessous)'''
 
'''NOTE : le fichier /var/www/seahub.fcgi n'a pas besoin d'exister, ce n'est qu'un "wrapper" (voir ci-dessous)'''
 +
-->
  
 
Créer un fichier /etc/httpd/conf.d/seafile.conf :
 
Créer un fichier /etc/httpd/conf.d/seafile.conf :
Ligne 296 : Ligne 225 :
 
</virtualhost>
 
</virtualhost>
 
</pre>
 
</pre>
 +
 +
<!-- ARCHIVE
 
'''NOTE : le DocumentRoot doit correspondre au chemin du "wrapper" seahub.fcgi paramétré plus haut !'''
 
'''NOTE : le DocumentRoot doit correspondre au chemin du "wrapper" seahub.fcgi paramétré plus haut !'''
 
+
-->
Dans /home/seafile, éditer ccnet/ccnet.conf, modifier :
+
Dans /home/seafile, éditer ccnet/ccnet.conf, modifier SERVICE_URL par l'URL externe de Seafile (ce paramètre sera utilisé pour construire notamment les liens qui pourraient être envoyés par mail) :
   SERVICE_URL = https://seafile.domain.com
+
   SERVICE_URL = https://seafile.domain.fr
 
Editer seahub_settings.py, ajouter :
 
Editer seahub_settings.py, ajouter :
   HTTP_SERVER_ROOT = 'https://seafile.domain.com/seafhttp'
+
   HTTP_SERVER_ROOT = 'https://seafile.domain.fr/seafhttp'
et pour le service mail (exemple avec serveur mail local) :
+
"HTTP_SERVER_ROOT" peut être aussi "FILE_SERVER_ROOT", indifféremment.
EMAIL_USE_TLS = False
 
EMAIL_HOST = 'localhost'        # smpt server
 
EMAIL_HOST_USER = ''    # username and domain
 
EMAIL_HOST_PASSWORD = ''    # password
 
EMAIL_PORT = '25'
 
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
 
SERVER_EMAIL = EMAIL_HOST_USER
 
 
 
  
Générer des certificats :
+
Générer des certificats (ou utiliser Let'sEncrypt !) :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
   openssl genrsa -out privkey.pem 2048
 
   openssl genrsa -out privkey.pem 2048
Ligne 329 : Ligne 252 :
 
</pre>
 
</pre>
  
Dans /etc/htpd/conf/httpd.conf : s'assurer que la directive "AllowOverride" du site par défaut (sous <Directory /var/www/html>) est à "All".
+
Dans /etc/httpd/conf/httpd.conf : s'assurer que la directive "AllowOverride" du site par défaut (sous <Directory /var/www/html>) est à "All".
  
 
Supprimer /etc/httpd/conf.d/welcome.conf pour ne pas tomber sur la page de test en cas d'erreur.
 
Supprimer /etc/httpd/conf.d/welcome.conf pour ne pas tomber sur la page de test en cas d'erreur.
Ligne 335 : Ligne 258 :
 
Reste à relancer apache
 
Reste à relancer apache
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
   service httpd restart
+
   systemctl restart httpd
 
</syntaxhighlight>
 
</syntaxhighlight>
 
'''NOTE : Vérifier qu'Apache écoute sur le port 443 ! Décommenter "Listen 443" dans /etc/httpd/conf.d/ssl.conf.'''
 
'''NOTE : Vérifier qu'Apache écoute sur le port 443 ! Décommenter "Listen 443" dans /etc/httpd/conf.d/ssl.conf.'''
 +
 +
== Connexion seahub par NGINX ==
 +
<!-- ARCHIVES
 +
La configuration nginx (https via fastcgi) est enregistrée dans un fichier, chargé ensuite en "include" dans la configuration de nginx :
 +
server {
 +
    listen 192.168.0.50:443;
 +
    ssl on;
 +
    ssl_certificate      /home/seafile/conf/ssl.seafile.domain.fr.pem;
 +
    ssl_certificate_key  /home/seafile/conf/ssl.seafile.domain.fr.key;
 +
    server_name  seafile.domain.fr;
 +
    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  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_connect_timeout  36000s;
 +
        proxy_read_timeout  36000s;
 +
        proxy_send_timeout  36000s;
 +
        send_timeout  36000s;
 +
    }
 +
    location /media {
 +
        root /home/seafile/seafile-server-latest/seahub;
 +
    }
 +
}
 +
-->
 +
Créer /etc/nginx/conf.d/seafile.conf :
 +
    server {
 +
        listen 443;
 +
        ssl on;
 +
        ssl_certificate /etc/ssl/cacert.pem;        # path to your cacert.pem
 +
        ssl_certificate_key /etc/ssl/privkey.pem;    # path to your privkey.pem
 +
        server_name seafile.example.com;
 +
        ssl_session_timeout 5m;
 +
        ssl_session_cache shared:SSL:5m;
 +
 +
        # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
 +
        ssl_dhparam /etc/nginx/dhparam.pem;
 +
 +
        # secure settings (A+ at SSL Labs ssltest at time of writing)
 +
        # see https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx
 +
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 +
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
 +
        ssl_prefer_server_ciphers on;
 +
 +
        proxy_set_header X-Forwarded-For $remote_addr;
 +
 +
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
 +
        server_tokens off;
 +
 +
        location / {
 +
            proxy_pass        http://127.0.0.1:8000;
 +
            proxy_set_header  Host $host;
 +
            proxy_set_header  X-Real-IP $remote_addr;
 +
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
 +
            proxy_set_header  X-Forwarded-Host $server_name;
 +
            proxy_set_header  X-Forwarded-Proto https;
 +
 +
            access_log      /var/log/nginx/seahub.access.log;
 +
            error_log      /var/log/nginx/seahub.error.log;
 +
 +
            proxy_read_timeout  1200s;
 +
 +
            client_max_body_size 0;
 +
        }
 +
 +
        location /seafhttp {
 +
            rewrite ^/seafhttp(.*)$ $1 break;
 +
            proxy_pass http://127.0.0.1:8082;
 +
            client_max_body_size 0;
 +
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
 +
            proxy_connect_timeout  36000s;
 +
            proxy_read_timeout  36000s;
 +
            proxy_send_timeout  36000s;
 +
            send_timeout  36000s;
 +
        }
 +
        location /media {
 +
            root /home/user/haiwen/seafile-server-latest/seahub;
 +
        }
 +
    }
 +
 +
Et créer le fichier DHPARAM :
 +
    openssl dhparam 2048 > /etc/nginx/dhparam.pem
  
 
== WebDAV ==
 
== WebDAV ==
Ligne 363 : Ligne 392 :
 
Reste à relancer apache et Seafile
 
Reste à relancer apache et Seafile
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
   service httpd restart
+
   systemctl restart httpd
   service seafile-server restart
+
  systemctl restart seafile
 +
   systemctl restart seahub
 
</syntaxhighlight>
 
</syntaxhighlight>
 
La connexion du client DAV se fera sur le dossier "/seafdav".
 
La connexion du client DAV se fera sur le dossier "/seafdav".
Ligne 371 : Ligne 401 :
 
On peut utiliser seafile avec memcached pour accélérer la navigation :
 
On peut utiliser seafile avec memcached pour accélérer la navigation :
  
Installation sur centos 6:
+
Installation dur CentOS :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
   yum install memcached python-memcached
 
   yum install memcached python-memcached
 
</syntaxhighlight>
 
</syntaxhighlight>
Installation sur centos 5 ; ajouter epel puis :
+
 
<syntaxhighlight lang="bash">
+
Ajouter dans seafile/conf/seahub_setting.py :
  yum install --enablerepo=epel memcached
 
  easy_install-2.6 python-memcached
 
</syntaxhighlight>
 
Ajouter dans seafile/seahub_setting.py :
 
 
<pre>
 
<pre>
 
CACHES = {
 
CACHES = {
Ligne 393 : Ligne 419 :
 
Arrêter seafile et seahub :
 
Arrêter seafile et seahub :
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
   service seafile stop
+
   systemctl stop seafile
   service seahub stop
+
   systemctl stop seahub
 
</syntaxhighlight>
 
</syntaxhighlight>
 
On donne tout de suite les droits à l'utilisateur seafile (important ! si on fait ensuite la mise à jour en tant qu'utilisateur "seafile") :
 
On donne tout de suite les droits à l'utilisateur seafile (important ! si on fait ensuite la mise à jour en tant qu'utilisateur "seafile") :
Ligne 405 : Ligne 431 :
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Télécharger et installer la mise à jour :
 
Télécharger et installer la mise à jour :
 +
/* archive
 +
  wget https://bitbucket.org/haiwen/seafile/downloads/seafile-server_6.2.3_x86-64.tar.gz */
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
   cd /home/seafile/installed
+
   cd /home/seafile
   wget https://bitbucket.org/haiwen/seafile/downloads/seafile-server_2.1.5_x86-64.tar.gz
+
   wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz
  wget https://bitbucket.org/haiwen/seafile/downloads/seafile-server_2.1.5_i386.tar.gz
+
   tar xvzf  seafile-server_6.2.3_i386.tar.gz
   tar xvzf  seafile-server_2.1.5_i386.tar.gz
 
  mv seafile-server-2.1.5 ..
 
 
</syntaxhighlight>
 
</syntaxhighlight>
Deux scripts sont disponible en fonction du type de mise à jour :
+
Mise à jour de version principale (6.0 -> 6.3) :
* Pour une mise à jour de version principale (1.8 => 2.0 ou 2.0 => 2.1) :
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
  cd ../seafile-server-2.1.5/upgrade
+
  cd seafile-server-6.3.4/upgrade
  ./upgrade_1.8_2.0.sh
+
  ./upgrade_6.0_6.1.sh
</syntaxhighlight>
+
./upgrade_6.1_6.2.sh
* Pour une simple mise a jour de sous-version (2.1.4 => 2.1.5) :
+
  ./upgrade_6.2_6.3.sh
<syntaxhighlight lang="bash">
 
  cd ../seafile-server-2.1.5/upgrade
 
/minor-upgrade.sh
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
Redevenir "root" et lancer les services seafile et seahub
 
Redevenir "root" et lancer les services seafile et seahub
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
   service seafile start
+
   systemctl start seafile
   service seahub start
+
   systemctl start seahub
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Ligne 436 : Ligne 458 :
 
Redémarrer seahub
 
Redémarrer seahub
  
 +
<!-- ARCHIVES
 
=== Traduction ===
 
=== Traduction ===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 456 : Ligne 479 :
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Redémarrer seahub
 
Redémarrer seahub
 +
-->
 +
 +
== Sauvegarde / restauration ==
 +
=== Sauvegarde ===
 +
Il est préférable d'arrêter les service Seafile avant sauvegarde, afin que celle-ci soit cohérente.
 +
* Sauvegarder le dossier /home/seafile/ (dans son entier, c'est plus simple)
 +
* Sauvegarder les 3 bases de données (par mysqldump sous MySQL/MariaDB) : ccnet-db, seafile-db, seahub-db
 +
 +
=== Restauration ===
 +
Réinstaller si nécessaire Seafile, puis supprimer (ou renommer en .bak) le dossier /home/seafile.
 +
 +
Après sauvegarde (ou dump) des 3 bases de données (au cas où), les supprimer, et les recréer vides.
 +
 +
Restaurer les 3 bases.
 +
 +
Restaurer le dossier /home/seafile.
 +
 +
Lancer les services Seafile, et faire un check du répertoire (voir ci-dessous)
 +
== Réparation ==
 +
En cas de message d'erreur sur des bibilothèques ("endommagée"), lancer un check :
 +
<syntaxhighlight lang="bash">
 +
cd /home/seafile/seafile-server-latest/
 +
./seaf-fsck.sh
 +
</syntaxhighlight>
 +
 +
Si des bibliothèques apparaissent corrompues et si le script indique "Find available commit xxxxx (created at xxxx-xx-xx xx:xx:xx) for repo xxxxxxx.", copier l'identifiant du dépôt (indiqué sur la ligne "Running fsck for repo xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") et lancer une réparation :
 +
<syntaxhighlight lang="bash">
 +
cd /home/seafile/seafile-server-latest/
 +
./seaf-fsck.sh --repair xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
 +
</syntaxhighlight>
  
 
== TIPS ==
 
== TIPS ==

Version actuelle datée du 6 janvier 2021 à 13:07

Installation

Update 08/2018 : procédure revue pour CentOS7 et Seafile 6.3.2 (particularité : Seahub n'utilise plus fastcgi).

Installer les pré-requis :

yum install python-setuptools python-simplejson python-imaging MySQL-python httpd mod_ssl

Vérifier la dernière version serveur sur https://www.seafile.com/en/download/

 cd install/
 wget https://download.seadrive.org/seafile-server_[ dernière version de Seafile ]_x86-64.tar.gz # ou ....i386.tar.gz sur système 32 bits

Créer un répertoire seafile dans /home:

 cd /home
 mkdir seafile
 cd seafile
 tar -xvzf /root/install/seafile-server_[ version seafile ]_*.tar.gz

L'archive crée un sous-répertoire avec la version en cours. Lors d'une mise à jour, la précédente version ne sera donc pas écrasée.

Lancer l'installation (qui créera les bases de données) :

 cd seafile-server-[ version seafile ]
 ./setup-seafile-mysql.sh
* Nommer le server (nom affiché sur les clients, sans espaces)
* donner l'IP du serveur
* laisser le port ccnet, le chemin des données et les ports seafile par défaut
* donner un mail pour l'administrateur (mail existant si possible, qui servira à se connecter à l'interface) et un mot de passe
* Choisir "1" pour créer les bases
* donner les paramètres MySQL
* demander la création d'un utilisateur seafile
* laisser les noms de bases par défaut

On peut alors tester Seafile directement :

 sudo su - seafile # au cas où on s'est connecté "root" auparavant
 ./seafile.sh start
 ./seahub.sh start

NOTE : IL EST IMPORTANT de lancer "seahub.sh start" AU MOINS UNE FOIS en ligne de commande, car cette première fois demande la mail (donc le login) et le mot de passe de l'utilisateur admin de Seafile !

Se connecter à l'interface par http://IP_DU_SERVEUR:8000

Configuration

Editer le fichier /home/seafile/conf/seafile.conf

[fileserver]
port = 8082

[database]
type = mysql
host = 127.0.0.1
port = 3306
user = seafile
password = PwdMySQLseafile
db_name = seafile-db
connection_charset = utf8


Editer le fichier /home/seafile/conf/seahub_settings.py :

# -*- coding: utf-8 -*-
SECRET_KEY = "d56a6cbc-751c-dc66-9fdb-45f4492f5abda7d3"

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'seahub-db',
        'USER': 'seafile',
        'PASSWORD': 'PwdSeafile',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': 'SET default_storage_engine=INNODB',
        }
    }
}

FILE_SERVER_ROOT = 'https://seafile.domain.fr/seafhttp'

EMAIL_USE_TLS = False
EMAIL_HOST = 'localhost'        # smpt server
EMAIL_HOST_USER =     # username and domain
EMAIL_HOST_PASSWORD =     # password
EMAIL_PORT = '25'
DEFAULT_FROM_EMAIL = 'postmaster@domain.fr' # parce que EMAIL_HOST_USER est vide ci-dessus, sinon on peut reprendre cette variable.
SERVER_EMAIL = 'postmaster@domain.fr'

Attention au "default_storage_engine" (plutôt que "storage_engine") à partir de la version 5 de Seafile !

Lancement automatique

https://github.com/haiwen/seafile/wiki/Start-seafile-server-at-system-bootup

D'abord, arrêter Seafile !

 cd seafile-server-latest
 ./seafile.sh stop
 ./seahub.sh stop

Créer un utilisateur seafile, dont le homedir sera le répertoire seafile :

 adduser -c "Seafile user" -d /home/seafile seafile
 chown -R seafile:seafile /home/seafile
 chmod 750 /home/seafile

IMPORTANT : vérifier l'appartenance de l'arborescence /home/seafile pour qu'il n'y ait pas de problèmes de droits !

 chown -R seafile:seafile /home/seafile
 chmod 750 /home/seafile

Créer /etc/systemd/system/seafile.service

[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target mysql.service

[Service]
Type=oneshot
ExecStart=/home/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/seafile/seafile-server-latest/seafile.sh stop
RemainAfterExit=yes
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

et /etc/systemd/system/seahub.service

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/home/seafile//seafile-server-latest/seahub.sh start
ExecStop=/home/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Activer et lancer les 2 services

systemctl enable seafile
systemctl enable seahub
systemctl start seafile
systemctl start seahub


Connexion seahub par Apache

Depuis la version 6.3.2, Seafile n'utilise plus fastcgi. On utilise Apache en proxy simple. On ne détaillera ici que la configuration SSL.


Créer un fichier /etc/httpd/conf.d/seafile.conf :

<VirtualHost *:443>
    ServerName seafile.domain.fr
    DocumentRoot /var/www
    Alias /media /home/seafile/seafile-server-latest/seahub/media/           
    RewriteEngine On
    
    # seafile httpserver
    #
    ProxyPass /seafhttp http://127.0.0.1:8082
    ProxyPassReverse /seafhttp http://127.0.0.1:8082
    RewriteRule ^/seafhttp - [QSA,L]
  
    #
    # seahub
    #
    RewriteRule ^/(media.*)$ /$1 [QSA,L,PT]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
    # add ssl protocol
    SSLEngine On
    SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
    SSLCertificateFile    /etc/ssl/seafile.crt
    SSLCertificateKeyFile /etc/ssl/seafile.key
</virtualhost>

Dans /home/seafile, éditer ccnet/ccnet.conf, modifier SERVICE_URL par l'URL externe de Seafile (ce paramètre sera utilisé pour construire notamment les liens qui pourraient être envoyés par mail) :

 SERVICE_URL = https://seafile.domain.fr

Editer seahub_settings.py, ajouter :

 HTTP_SERVER_ROOT = 'https://seafile.domain.fr/seafhttp'

"HTTP_SERVER_ROOT" peut être aussi "FILE_SERVER_ROOT", indifféremment.

Générer des certificats (ou utiliser Let'sEncrypt !) :

  openssl genrsa -out privkey.pem 2048
  openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

Copier et renommer les fichiers générés :

  mv cacert.pem /etc/ssl/seafile.crt
  mv privkey.pem /etc/ssl/seafile.key

Si nécessaire, faire une redirection du site HTTP vers HTTPS. A la racine du site HTTP (port 80, qui doit être différente de la racine du site HTTPS), créer un fichier .htaccess :

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://seafile.domain.fr/$1 [L,R=301]

Dans /etc/httpd/conf/httpd.conf : s'assurer que la directive "AllowOverride" du site par défaut (sous <Directory /var/www/html>) est à "All".

Supprimer /etc/httpd/conf.d/welcome.conf pour ne pas tomber sur la page de test en cas d'erreur.

Reste à relancer apache

  systemctl restart httpd

NOTE : Vérifier qu'Apache écoute sur le port 443 ! Décommenter "Listen 443" dans /etc/httpd/conf.d/ssl.conf.

Connexion seahub par NGINX

Créer /etc/nginx/conf.d/seafile.conf :

   server {
       listen 443;
       ssl on;
       ssl_certificate /etc/ssl/cacert.pem;        # path to your cacert.pem
       ssl_certificate_key /etc/ssl/privkey.pem;    # path to your privkey.pem
       server_name seafile.example.com;
       ssl_session_timeout 5m;
       ssl_session_cache shared:SSL:5m;

       # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
       ssl_dhparam /etc/nginx/dhparam.pem;

       # secure settings (A+ at SSL Labs ssltest at time of writing)
       # see https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
       ssl_prefer_server_ciphers on;

       proxy_set_header X-Forwarded-For $remote_addr;

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

       location / {
           proxy_pass         http://127.0.0.1:8000;
           proxy_set_header   Host $host;
           proxy_set_header   X-Real-IP $remote_addr;
           proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header   X-Forwarded-Host $server_name;
           proxy_set_header   X-Forwarded-Proto https;

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

           proxy_read_timeout  1200s;

           client_max_body_size 0;
       }

       location /seafhttp {
           rewrite ^/seafhttp(.*)$ $1 break;
           proxy_pass http://127.0.0.1:8082;
           client_max_body_size 0;
           proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_connect_timeout  36000s;
           proxy_read_timeout  36000s;
           proxy_send_timeout  36000s;
           send_timeout  36000s;
       }
       location /media {
           root /home/user/haiwen/seafile-server-latest/seahub;
       }
   }

Et créer le fichier DHPARAM :

   openssl dhparam 2048 > /etc/nginx/dhparam.pem

WebDAV

Pour activer WebDAV (gestion des fichiers via le web) sur Seafile :

  • Editer seafile/conf/seafdav.conf
 [WEBDAV]
 enabled = true
 port = 8080
 fastcgi = true
 share_name = /seafdav
  • Ajouter dans /etc/httpd/conf.d/seafile.conf les lignes suivantes :
 #
 # seafile webdav
 #
 RewriteCond %{HTTP:Authorization} (.+)
 RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L,e=HTTP_AUTHORIZATION:%1]
 RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L]
  • Ajouter dans /etc/httpd/conf.d/fastcgi.conf la ligne :
 FastCGIExternalServer /var/www/seafdav.fcgi -host 127.0.0.1:8080

Reste à relancer apache et Seafile

  systemctl restart httpd
  systemctl restart seafile
  systemctl restart seahub

La connexion du client DAV se fera sur le dossier "/seafdav".

Memcached

On peut utiliser seafile avec memcached pour accélérer la navigation :

Installation dur CentOS :

  yum install memcached python-memcached

Ajouter dans seafile/conf/seahub_setting.py :

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
	'LOCATION': '127.0.0.1:11211',
    }
}

Mise à jour

Arrêter seafile et seahub :

  systemctl stop seafile
  systemctl stop seahub

On donne tout de suite les droits à l'utilisateur seafile (important ! si on fait ensuite la mise à jour en tant qu'utilisateur "seafile") :

  chown -R seafile:apache /home/seafile

Passer sous l'utilisateur seafile (préférable, pour éviter les problèmes de version de Python, voir

  su - seafile

Télécharger et installer la mise à jour : /* archive

 wget https://bitbucket.org/haiwen/seafile/downloads/seafile-server_6.2.3_x86-64.tar.gz */
  cd /home/seafile
  wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz
  tar xvzf  seafile-server_6.2.3_i386.tar.gz

Mise à jour de version principale (6.0 -> 6.3) :

 cd seafile-server-6.3.4/upgrade
 ./upgrade_6.0_6.1.sh
 ./upgrade_6.1_6.2.sh
 ./upgrade_6.2_6.3.sh

Redevenir "root" et lancer les services seafile et seahub

  systemctl start seafile
  systemctl start seahub

Personnalisation

Mettre l'image ici, avec ce nom exact (sauvegarder éventuellement le seafile_logo.png existant) :

/home/seafile/seafile-server-latest/seahub/media/img/seafile_logo.png

Redémarrer seahub


Sauvegarde / restauration

Sauvegarde

Il est préférable d'arrêter les service Seafile avant sauvegarde, afin que celle-ci soit cohérente.

  • Sauvegarder le dossier /home/seafile/ (dans son entier, c'est plus simple)
  • Sauvegarder les 3 bases de données (par mysqldump sous MySQL/MariaDB) : ccnet-db, seafile-db, seahub-db

Restauration

Réinstaller si nécessaire Seafile, puis supprimer (ou renommer en .bak) le dossier /home/seafile.

Après sauvegarde (ou dump) des 3 bases de données (au cas où), les supprimer, et les recréer vides.

Restaurer les 3 bases.

Restaurer le dossier /home/seafile.

Lancer les services Seafile, et faire un check du répertoire (voir ci-dessous)

Réparation

En cas de message d'erreur sur des bibilothèques ("endommagée"), lancer un check :

 cd /home/seafile/seafile-server-latest/
 ./seaf-fsck.sh

Si des bibliothèques apparaissent corrompues et si le script indique "Find available commit xxxxx (created at xxxx-xx-xx xx:xx:xx) for repo xxxxxxx.", copier l'identifiant du dépôt (indiqué sur la ligne "Running fsck for repo xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") et lancer une réparation :

 cd /home/seafile/seafile-server-latest/
 ./seaf-fsck.sh --repair xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

TIPS

  • Les logs sont visibles dans <racine_du_virtualhost>/seafile/seafile-server-<version>/runtime/
  • changer le mail administrateur : <racine_du_virtualhost>/seafile/seafile-server-<version>/reset_admin.sh
  • administer seafile en ligne de commande : https://github.com/HenriWahl/seafadm
  • backup en utilisant l'api (fichier api.py intéressant) : https://github.com/oal/barch