Seafile

De ArchwikiFR


Seafile est un logiciel open-source permettant de créer un service de stockage et d'applications diverses en ligne sur son propre serveur. Les documents peuvent être synchronisés sur un ordinateur ou sur un smartphone par le biais d'une application. Le logiciel possède aussi une interface web. Les fonctionnalités de Seafile sont similaires à celles des populaires services Dropbox et Google Drive. La principale différence est que les fichiers sont stockés par l'administrateur lui-même, chacun peut créer sa propre instance.

Important : Plusieurs paquets étant en conflit, le client et le serveur ne pourront pas être installés sur la même machine.

Serveur

Prérequis

Prérequis pour un déploiement en production :

Installation

Installez le paquet seahub disponible sur AUR.
Le script seafile-helper permet de simplifier la maintenance de l'instance.

Préparation

Note : À titre d'exemple /home/seafile sera utilisé comme répertoire utilisateur dans cette page.

Créez un utilisateur seafile :

useradd -m -r -d /home/seafile -s /usr/bin/nologin seafile

Le groupe seafile et d'autres utilisateurs comme http, peuvent avoir besoin des droits de lecture et d’exécution :

chmod 755 /home/seafile
Important : Chaque intervention sur l'instance devra être réalisée avec l'utilisateur seafile.

Connexion avec l'utilisateur seafile :

sudo -u seafile -s
Note : example.dom sera utilisé à titre d'exemple comme nom d'instance dans cette page.

Créez et importez les répertoires nécessaires :

mkdir -p ~/example.dom/seafile-server
cp -r /usr/share/seafile-server/{runtime,seahub} ~/example.dom/seafile-server/

Déploiement

Avec SQLite

Important : Pour un usage en production il est déconseillé d'utiliser SQLite pour des raisons de sécurité.

Placez vous dans votre instance (nommé ici example.dom) :

cd ~/example.dom

Lancez le script d'installation et suivez les indications :

seafile-admin setup

Avec MySQL

Placez vous dans le répertoire seafile-server :

cd ~/example.dom/seafile-server

Copiez les scripts d'installation pour MySQL :

cp /usr/share/seafile-server/scripts/setup-seafile-mysql.* ./

Exécuter le script bash et suivez les indications

./setup-seafile-mysql.sh

Vous pouvez ensuite supprimer les scripts :

rm setup-seafile-mysql.*

Configuration

Utilisateur administrateur

Pour créer ou modifier l'administrateur, placez-vous dans votre instance

cd ~/example.dom
Note : Il est aussi possible d'utiliser le service systemd pour démarrer/stopper le serveur

Démarrez le serveur :

seafile-admin start

Créez un utilisateur administrateur :

seafile-admin create-admin

Pour modifier l'utilisateur administrateur :

seafile-admin reset-admin

Stoppez le serveur :

seafile-admin stop

Seahub locale

Vous pouvez définir une locale pour votre instance en ajoutant la variable LANGUAGE dans le fichier ~/example.dom/conf/seahub_settings.py
Pour une instance en français LANGUAGE='fr'.

Locales disponibles :

ls ~/example.dom/seafile-server/seahub/locale/

Nginx

Voici un exemple de configuration utilisant https voir documentation officielle.

Note : seafile.example.com devra être remplacé par votre nom de domaine
server {
    listen 80;
    server_name seafile.example.com;
    rewrite ^ https://$http_host$request_uri? permanent;
    server_tokens off;
}

server {
    listen 443;
    server_name seafile.example.com;
    server_tokens off;    

    ssl on;
    ssl_certificate /etc/letsencrypt/live/seafile.example.dom/fullchain.pem;   # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/seafile.example.dom/privkey.pem; # managed by Certbot
        
    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_read_timeout  1200s;  

        # used for view/edit office file via Office Online Server
        client_max_body_size 0;
        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;
        proxy_send_timeout  36000s;

        send_timeout  36000s;
    }

    location /media {
        root /home/seafile/example.dom/seafile-server-latest/seahub;
    }
}

Vous pouvez utiliser le plugin certbot-nginx pour créer et valider votre certificat chez Let's Encrypt , voir page du wiki anglais Let’s_Encrypt#Plugins

Systemd service

Créez et éditez le fichier /etc/systemd/system/seafile-server@.service

[Unit]
Description=Next-generation open source cloud storage.
After=syslog.target network.target

[Service]
Type=forking
WorkingDirectory=/home/seafile/%i
ExecStart=/usr/bin/seafile-admin start
ExecStop=/usr/bin/seafile-admin stop
PIDFile=/home/seafile/%i/seafile-data/pids/seaf-server.pid
User=seafile

[Install]
WantedBy=multi-user.target

Rechargez ensuite la configuration des services :

systemctl daemon-reload

Puis démarrez et/ou activez le service avec la bonne interface voir systemd units :

systemctl start seafile-server@example.dom.service

Memcached

Note : Par défaut seahub utilise le répertoire /tmp/seahub_cache/ pour la mise en cache.
Utiliser Memcached améliorera fortement ses performances.

Prérequis

Installez les paquets :

Configuration

Ajoutez ensuite cette configuration (voir documentation officielle) dans ~/example.dom/conf/seahub_settings.py

CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
        'OPTIONS': {
            'ketama': True,
            'remove_failed': 1,
            'retry_timeout': 3600,
            'dead_timeout': 3600
        }
    }
}

Démarrage

Il faut ensuite démarrer le service memcached, voir Services.

systemctl start memcached.service

Puis redémarrer le service seafile-server :

systemctl restart seafile-server@example.dom.service

Mise à jour

Stoppez le service :

systemctl stop seafile-server@example.dom.service

Connectez vous avec l'utilisateur seafile :

sudo -u seafile -s

Placez vous dans le répertoire seafile-server de votre instance :

cd ~/example.dom/seafile-server/

Vous pouvez faire un backup de seahub :

mv seahub seahub-old
Attention : Si les répertoires seahub-old et upgrade sont déjà présents, ils devront être supprimés ou archivés.

Copiez ensuite les nouveaux répertoires :

cp -r /usr/share/seafile-server/{upgrade,seahub} ./

Puis lancez le script correspondant à votre mise à jour :

./upgrade/votre-update.sh

Client

Installation

Installez le paquet seafile-client disponible sur AUR.