Pour faire court et troller a minima, pour moi OwnCloud est à la synchronisation ce que MySQL est à la base de données (du canada dry). SeaFile semble être une alternative plus fiable et plus rapide. Le temps dira si je suis dans le vrai mais ça ne peut pas être pire ; la petite expérience que j’en ai est très concluante. Voilà donc un petit tuto pour installer SeaFile rapidement avec tout ce qui va bien (démarrage auto, branchement sur Apache, MySQL -oui bon ça va, c’est ça ou SQLite- et https).
La doc en anglais est très complète mais j’ai besoin d’un aide-mémoire.
Choix de déploiement
J’installe la 3.1.7 64bits sur une Debian/wheezy. Je suis les recommandations des auteurs en matière de répertoires ce qui simplifiera les upgrades.
Ce tutoriel a été complété pour Debian8/Jessie et Seafile 5.0.4
Puis encore complété pour Debian9/Stretch et Seafile 6.0.7
Je vais créer les bases de données à la main car le script fourni ne crée pas d’utilisateur et c’est le compte root de MySQL qui sera utilisé (ce que je ne souhaite pas d’autant que son mot de passe est en clair dans un fichier de config).
Je vais créer un utilisateur quelconque pour limiter l’impact d’un éventuel trou de sécurité.
Je vais enfin, pour les besoins de cette doc, utiliser :
- le chemin
/var/www/seafile
- l’URL
http[s]://seafile.mondomaine.com
Préparation
Création de l’utilisateur seafile
:
adduser --system --no-create-home --disabled-password seafile
Création des bases de données :
mysql -u root -p
Indiquer le mot de passe root de mysql puis :
create database `ccnet-db` character set = 'utf8';
create database `seafile-db` character set = 'utf8';
create database `seahub-db` character set = 'utf8';
create user 'seafileuser'@'localhost' identified by 'monmotdepassesecret';
GRANT ALL PRIVILEGES ON `ccnet-db`.* to `seafileuser`;
GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafileuser`;
GRANT ALL PRIVILEGES ON `seahub-db`.* to `seafileuser`;
flush privileges;
Packages
apt-get update
apt-get install python2.7 python-setuptools python-simplejson python-imaging python-mysqldb
Téléchargement et extraction
Visiter la page officielle de téléchargement, scroller jusqu’aux packages serveurs, clic droit sur la dernière version et copier l’adresse du lien.
sudo -i
cd /var/www
mkdir seafile
cd seafile
mkdir installed
wget -P installed https://bitbucket.org/haiwen/seafile/downloads/seafile-server_3.1.7_x86-64.tar.gz
tar xzf installed/seafile-server_3.1.7_x86-64.tar.gz
Installation basique
cd seafile-server-*
./setup-seafile-mysql.sh
Répondez aux questions suivantes (appuyez sur Entrée
pour laisser les valeurs par défaut pour les autres) :
- server name
- This server’s ip or domain (je mets
seafile.mondomaine.com
)
Quand la question sur les bases de données arrive, répondez 2
(Use existing … databases) puisqu’on les a déjà créées.
- mysql user for seafile :
seafileuser
- password for seafileuser :
monmotdepassesecret
(à adapter bien sûr) - ccnet database :
ccnet-db
- seafile database :
seafile-db
- seahub database :
seahub-db
Validez, c’est prêt.
Premier démarrage
Il va falloir créer le compte admin avant de passer aux choses sérieuses.
./seafile.sh start
./seahub.sh start
À la question admin email
indiquez… votre email (celui de l’admin). Les utilisateurs sont authentifiés par une adresse email. Elle n’a pas forcément besoin d’exister ou d’être relevée.
On arrête les serveurs :
./seahub.sh stop
./seafile.sh stop
Branchement sur Apache
Seahub est le front-end web de Seafile qui écoute sur le port 8000. On va faire en sorte que les clients discutent avec Apache (sur les ports 80 et/ou 443) qui redirigera les requêtes, en interne, ver Seahub sur le port 8000.
Quelques packages
Debian Stretch
FastCGI n’existe plus pur Debian Stretch et a été remplacé par proxy-fcgi.
a2enmod rewrite proxy_fcgi proxy_http
systemctl restart apache2.service
Debian Jessie
Pour Apache 2.4 (Debian Jessie), fastcgi est dispo dans les sources par défaut donc on peut sauter cette étape :
Debian wheezy
Le module fastcgi est disponible sur les sources nonfree sur Debian. Donc on les active dans /etc/apt/sources.list
:
deb http://ftp.debian.org/pub/debian/ wheezy main non-free
deb-src http://ftp.debian.org/pub/debian/ wheezy main non-free
deb http://security.debian.org/ wheezy/updates main non-free
deb-src http://security.debian.org/ wheezy/updates main non-free
Puis :
apt-get update
apt-get install python-flup libapache2-mod-fastcgi
On a aussi besoin des modules proxy_http
et rewrite
donc :
a2enmod proxy_http rewrite
service apache2 restart
Configurer Apache
Il faut maintenant déclarer le module FastCGI de Seafile. Deux choses importantes :
- le module
seahub.fcgi
n’existe pas vraiment (il n’y a pas de fichier de ce nom proprement dit) - le chemin dans lequel on le déclare devra être dans le
DocumentRoot
qu’on utilisera sinon Apache générera une erreur 404.
Pour Wheezy et Jessie uniquement
On ajoute donc la ligne suivante à la fin de /etc/apache2/apache2.conf
:
FastCGIExternalServer /var/www/seafile/seahub.fcgi -host 127.0.0.1:8000
On va maintenant créer le VirtualHost (par exemple /etc/apache2/sites-available/seafile.conf
)
<VirtualHost *:80>
ServerName seafile.mondomaine.com
DocumentRoot /var/www/seafile
Alias /media /var/www/seafile/seafile-server-latest/seahub/media
RewriteEngine On
<Location /media>
Order allow,deny
Allow from all
## Pour Apache 2.4, commenter les 2 lignes ci-dessus et décommenter celle ci-dessous
## Require all granted
</Location>
#
# seafile fileserver
#
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}]
</VirtualHost>
Attention à bien respecter les ruptures de lignes, notamment la dernière RewriteRule.
Attention, pour un Apache 2.2, il faut remplacer :
Require all granted
Par :
Order Allow,Deny
Allow from all
On n’oublie pas d’activer le VirtualHost :
a2ensite seafile.conf
service apache2 reload
Pour Stretch
<VirtualHost *:80>
ServerName seafile.mondomaine.com
Redirect permanent / https://seafile.mondomaine.com/
</VirtualHost>
<VirtualHost *:443>
ServerName seafile.mondomaine.com
DocumentRoot /var/www/sites/seafile
Alias /media /var/www/sites/seafile/seafile-server-latest/seahub/media
RewriteEngine On
<Location /media>
Require all granted
</Location>
#
# seafile fileserver
#
ProxyPass /seafhttp http://127.0.0.1:8082
ProxyPassReverse /seafhttp http://127.0.0.1:8082
RewriteRule ^/seafhttp - [QSA,L]
#
# seahub
#
SetEnvIf Request_URI . proxy-fcgi-pathinfo=unescape
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ProxyPass / fcgi://127.0.0.1:8000/
</VirtualHost>
Mettre à jour la configuration de Seafile
Puisqu’on va maintenant accéder à l’interface web via Apache et son port 80 (et non plus le port 8000 de Seahub) il faut l’indiquer.
ccnet.conf
Dans /var/www/seafile/ccnet/ccnet.conf
(/var/www/seafile/conf/ccnet.conf
pour la version 5.x de Seafile) modifier la ligne SERVICE_URL en :
SERVICE_URL = http://seafile.mondomaine.com
(en bref, virez le :8000
)
seahub_settings.py
Modifiez le fichier /var/www/seafile/seahub_settings.py
(/var/www/seafile/conf/seahub_settings.py
pour Seafile 5.x) et ajoutez à la fin :
FILE_SERVER_ROOT = 'http://seafile.mondomaine.com/seafhttp'
Redémarrer les serveurs
cd /var/www/seafile/seafile-server-latest
./seafile.sh start
./seahub.sh start-fastcgi
Attention à la dernière ligne, il est écrit start-fastcgi.
Normalement, vous devriez pouvoir ouvrir un navigateur vers http://seafile.mondomaine.com
et voir l’interface.
On arrête les serveurs, on n’a pas fini :
./seahub.sh stop
./seafile.sh stop
Démarrage automatique
Là, ça dépend vraiment de votre distrib… Sous Ubunutu, c’est pas pareil que sous Debian. La page de manuel est assez complète. Vous savez lire.
Wheezy et Jessie
Sous Debian/Wheezy, on crée un fichier /etc/init.d/seafile-server
qui contient :
#!/bin/sh
### BEGIN INIT INFO
# Provides: seafile-server
# Required-Start: $local_fs $remote_fs $network mysql
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts Seafile Server
# Description: starts Seafile Server
### END INIT INFO
# Change the value of "user" to your linux user name
user=seafile
# Change the value of "script_path" to your path of seafile installation
seafile_dir=/var/www/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
Rendre le fichier exécutable :
chmod a+x /etc/init.d/seafile-server
Créer le dossier qui contiendra les logs (il existe peut-être déjà) :
mkdir /var/www/seafile/logs
Et rendons à César…
chown -R seafile:www-data /var/www/seafile
Sous Debian 8 / Jessie (et toute autre distribution qui utilise systemd
), il faut dire à systemd
qu’il y a un nouveau service :
systemctl daemon-reload
Vérifier que tout démarre bien :
service seafile-server start
Faire en sorte qu’il démarre automatiquement :
update-rc.d seafile-server defaults 95
Stretch
Faisons les choses proprement pour systemd
. On crée deux fichiers dans /etc/systemd/system
:
seahub.service
qui contient :
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/var/www/sites/seafile/seafile-server-latest/seahub.sh start-fastcgi
ExecStop=/var/www/sites/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=www-data
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Et seafile.service
qui contient :
[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=/var/www/sites/seafile/seafile-server-latest/seafile.sh start
ExecStop=/var/www/sites/seafile/seafile-server-latest/seafile.sh stop
RemainAfterExit=yes
User=seafile
Group=www-data
[Install]
WantedBy=multi-user.target
On les démarre :
systemctl start seafile.service
systemctl start seahub.service
Puis on les active :
systemctl enable seafile.service
systemctl enable seahub.service
httpS !
Je pars du principe que vous avez un certificat (auto-signé ou non)
Apache
On active modssl
dans Apache (mais c’est sûrement déjà fait) :
a2enmod ssl
Puis on modifie le VirtualHost (on remplace :80 par :443) :
<VirtualHost *:443>
Si ce n’est déjà fait, ajouter à /etc/apache2/ports.conf
:
NameVirtualHost *:443
Et on ajoute une redirection pour faire propre :
<VirtualHost *:80>
ServerName seafile.mondomaine.com
Redirect permanent / https://seafile.mondomaine.com/
</VirtualHost>
On ajoute la déclaration des certificats :
SSLEngine on
SSLCertificateFile /etc/ssl/certs/mondomaine.com.crt
SSLCertificateKeyFile /etc/ssl/private/mondomaine.com.key
SSLCACertificateFile /etc/ssl/certs/GandiStandardSSLCA.pem
Bien sûr, vous adaptez.
ccnet.conf
On retourne modifier dans /var/www/seafile/ccnet/ccnet.conf
la ligne SERVICE_URL en :
SERVICE_URL = https://seafile.mondomaine.com
(https au lieu de http)
seahub_settings.py
Même chose dans /var/www/seafile/seahub_settings.py
:
FILE_SERVER_ROOT = 'https://seafile.mondomaine.com/seafhttp'
Redémarrages
service seafile-server restart
service apache2 restart
ou, pour Stretch :
systemctl restart apache2
systemctl restart seafile.service
systemctl restart seahub.service
Fini
Voilà. Il n’y a rien de compliqué. Seafile marche vraiment très bien, il est rapide, les clients Mac et Linux sont nickel. Ses développeurs ont même l’intelligence de fournir l’APK pour le client Android (pour ceux qui, comme moi, n’ont pas de compte Google attaché à leur téléphone).
Roh, c’te troll 🙂
Owncloud est certes un peu lourd, mais sinon, je ne vois pas ce que tu lui reproches. Aucun souci avec la synchronisation. Tu peux aussi avoir l’appli android avec f-droid (n’ayant pas de compte gmail sur mon téléphone non plus).
Mais je me garde ça sous le coude, on ne sait jamais.
PS : je ne dois pas être humain. Je me suis planté sur un captcha >.<
C’est pas un vrai troll, j’ai eu des galères sans nom avec OwnCloud (par exemple des fichiers qui se synchronisent tout le temps parce-que, pour une mystérieuse raison il détecte en permanence que le fichier est modifié des 2 côtés ou un dossier en plein milieu de l’arborescence qui ne se synchronise jamais). Le support de la communauté est du niveau de commentcamarche.net (je ne te fais pas de dessin, je préfère le support technique de M$), c’est effectivement très lourd, très très lent surtout si on atteint plusieurs dizaines de milliers de fichiers et/ou une dizaine d’utilisateurs. Franchement un des pires produits que j’ai vu.
Seafile server tourne sans problème sur un RaspPi et, avec la même config que celle qui m’a tellement fait perdre de temps sous OC, je n’ai pas le moindre problème depuis un mois.
+1 pour l’APK dispo sur f-droid
Moi je peux dire ce qui ne va pas sur Owncloud !
IL N’EST PAS FIABLE/STABLE !
J’ai un client qui met des * dans le nom de ses dossiers … Eh ben ça fait bugguer Owncloud ! J’espère que ça ne fera pas buguer seafile 🙂
J’avais pas essayé mais aucun problème 🙂
Très bon tuto,
J’ai la même config, alors je fais quasi du copier/coller.
J’en suis au script de démarrage, on peut ajouter, pour automatiser le démarrage :
update-rc.d seafile-server defaults 95
Effectivement, j’avais oublié l’update-rc.d c’est rectifié. Merci pour tout !
Hello,
Je me pose une question : j’utilisais ownCloud, que j’abandonne à cause des nombreux bugs jamais résolus. Je sauvegardais les data de owncloud facilement, puisqu’il suffit de sauvegarder le répertoire data du serveur pour retrouver son arborescence. Sur Seafile, il est certes aussi simple de sauvegarder les données, le problème, c’est pour les restaurer. Si je rencontre un problème et que Seafile n’est plus opérationnel, comment je fais pour récupérer les données d’une sauvegarde et pouvoir restaurer les fichier sur un ordinateur ? That is the question.
Je n’ai jamais essayé mais je suppose qu’il suffit de réinstaller seafile et de restaurer la base
seafile-db
et l’arborescenceseafile-data
. (Si tu fais le test, tu es le bienvenu pour raconter ton expérience ici :-))Bien sûr, ce n’est pas un filesystem directement copiable comme avec OwnCloud mais ça ajoute un niveau de sécurité (faible je te l’accorde) puisqu’il faut “reconstituer” les fichiers à partir des blocs ; ça évite au moins qu’un petit malin qui prendrait le contrôle du serveur puisse exploiter les fichiers directement. Et je suppose que c’est grâce à ce système de stockage que SeaFile est si rapide et fiable.
Bonjour,
Nous utilisons Seafile avec une dizaine de postes, un serveur + un serveur de secours (dossier environ 40 go). Je viens de prendre une tablette Android avec une SD de 128 go. Lorsque Seafile descend les dossiers sur la tablette il les mets dans un dossier en cache (les 10go de la tablette). Comment puis-les descendre directement (et donc avoir automatiquement les mises à jour) sur la SD?
merci
Aucune idée. Je suppose qu’il faudrait pouvoir indiquer dans la config de l’application tablette le répertoire de cache à utiliser. Mais le fait de passer par un dossier de cache est indispensable : SeaFile télécharge des blocs qui lui servent à reconstituer les fichiers une fois qu’il a tout reçu.
Concernant le comparatif avec Owncloud, il n’y a pas photo :
– fiabilité des mises à jour des dossiers -> Owncloud 0 Seafile 1
– lors des mises à jour avec des gros répertoires, Owncloud prenait toute la bande -> Owncloud 0 Seafile 1
Excellent tuto qui m’à permis avec peu de connaissance sur Linux d’arriver à bien.
J’ai eu quelques difficultés sur la partie HTTPS qui me semble (pour moi c’est peut être très clair pour les autres) un peu confuse, surtout pour les fichier à modifier. Je n’avais pas les même choses que dans le tuto dans les fichiers, mais en recoupant plusieurs tuto apache2/seafile, j’ai fini par en venir à bout…
J’ai aussi fait un truc bien casse gueule, changer le répertoire de place…. Ca m’as cassé mes bibliothèques avant de voir que le cp était faire avec -p et pas -P…. faute de débutant je vous l’accorde.
En tout cas en couplant avec Let’s Encrypt, ça donne une magnifique solution pour être tranquille! J’ai plus qu’à Backup le tout et c’est ok.
Un très grand merci pour tes explications les plus claires que j’ai pu trouver sur Seafile en Français.
Merci beaucoup pour ton retour. C’est vrai qu’ajouter une section spéciale pour Let’s encrypt serait une très bonne idée (ça n’existait pas encore à l’époque de la rédaction de l’article).
Pour
cp
j’ai l’habitude d’utilisercp -a
(récursif + préserve liens et permissions).