Comment synchroniser et partager vos fichiers avec Seafile sur Debian 9

De Get Docs
Aller à :navigation, rechercher

L'auteur a sélectionné Electronic Frontier Foundation Inc pour recevoir un don dans le cadre du programme Write for DOnations.

Introduction

Seafile est une plateforme de synchronisation et de partage de fichiers open source et auto-hébergée. Les utilisateurs peuvent stocker et éventuellement chiffrer des données sur leurs propres serveurs avec l'espace de stockage comme seule limitation. Avec Seafile, vous pouvez partager des fichiers et des dossiers en utilisant la synchronisation multiplateforme et des liens protégés par mot de passe vers des fichiers avec des dates d'expiration. Une fonctionnalité de gestion des versions de fichiers signifie que les utilisateurs peuvent restaurer des fichiers ou des dossiers supprimés et modifiés.

Dans ce tutoriel, vous allez installer et configurer Seafile sur un serveur Debian 9. Vous utiliserez MariaDB (la variante MySQL par défaut sur Debian 9) pour stocker les données des différents composants de Seafile, et Apache comme serveur proxy pour gérer le trafic Web. Après avoir terminé ce didacticiel, vous pourrez utiliser l'interface Web pour accéder à Seafile à partir de clients de bureau ou mobiles, ce qui vous permettra de synchroniser et de partager vos fichiers avec d'autres utilisateurs ou groupes sur le serveur ou avec le public.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants :

  • Un serveur Debian 9 avec un minimum de 2 Go de RAM configuré en suivant ce tutoriel Configuration initiale du serveur avec Debian 9, y compris un utilisateur sudo non root et un pare-feu.
  • Un serveur Web Apache avec un hôte virtuel configuré pour le domaine enregistré en suivant Comment installer le serveur Web Apache sur Debian 9.
  • Un certificat SSL installé sur votre serveur en suivant ce tutoriel Comment sécuriser Apache avec Let's Encrypt sur Debian 9.
  • Un nom de domaine entièrement enregistré. Ce didacticiel utilisera example.com tout au long.
  • Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivre cette introduction à DigitalOcean DNS pour plus de détails sur la façon de les ajouter.
    • Un enregistrement A avec example.com pointant vers l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.example.com pointant vers l'adresse IP publique de votre serveur.
  • Un serveur de base de données MariaDB installé et configuré. Suivez les étapes du tutoriel Comment installer MariaDB sur Debian 9. Ignorez l'étape 3 de ce didacticiel - "(Facultatif) Réglage de l'authentification et des privilèges de l'utilisateur". Vous établirez uniquement des connexions locales au serveur de base de données, il n'est donc pas nécessaire de modifier la méthode d'authentification pour l'utilisateur root.

Étape 1 - Création de bases de données pour les composants Seafile

Seafile nécessite trois composants pour fonctionner correctement. Ces trois composants sont :

  • Seahub : interface Web de Seafile, écrite en Python à l'aide du framework Web Django. Depuis Seahub, vous pouvez accéder, gérer et partager vos fichiers à l'aide d'un navigateur Web.
  • Serveur Seafile : Le démon du service de données qui gère le chargement, le téléchargement et la synchronisation des fichiers bruts. Vous n'interagissez pas directement avec le serveur, mais utilisez l'un des programmes clients ou l'interface Web Seahub.
  • Ccnet server : Le démon de service RPC pour permettre la communication interne entre les différents composants de Seafile. Par exemple, lorsque vous utilisez Seahub, il est capable d'accéder aux données du serveur Seafile en utilisant le service Ccnet RPC.

Chacun de ces composants stocke ses données séparément dans sa propre base de données. Dans cette étape, vous allez créer les trois bases de données MariaDB et un utilisateur avant de procéder à la configuration du serveur.

Tout d'abord, connectez-vous au serveur en utilisant SSH avec votre nom d'utilisateur et votre adresse IP :

ssh [email protected]_server_ip

Connectez-vous au serveur de base de données MariaDB en tant qu'administrateur (racine) :

sudo mysql

À l'invite MariaDB, utilisez la commande SQL suivante pour créer l'utilisateur de la base de données :

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Ensuite, vous allez créer les bases de données suivantes pour stocker les données des trois composants Seafile :

  • ccnet-db pour le serveur Ccnet.
  • seahub-db pour l'interface Web Seahub.
  • seafile-db pour le serveur de fichiers Seafile.

À l'invite MariaDB, créez vos bases de données :

CREATE DATABASE `ccnet-db` CHARACTER SET = 'utf8';
CREATE DATABASE `seafile-db` CHARACTER SET = 'utf8';
CREATE DATABASE `seahub-db` CHARACTER SET = 'utf8';

Ensuite, accordez tous les privilèges à l'utilisateur de la base de données Seafile pour accéder et apporter des modifications à ces bases de données :

GRANT ALL PRIVILEGES ON `ccnet-db`.* to `sammy`@localhost;
GRANT ALL PRIVILEGES ON `seafile-db`.* to `sammy`@localhost;
GRANT ALL PRIVILEGES ON `seahub-db`.* to `sammy`@localhost;

Quittez l'invite MariaDB en tapant exit :

exit

Maintenant que vous avez créé un utilisateur et les bases de données nécessaires pour stocker les données de chacun des composants Seafile, vous allez installer des dépendances pour télécharger le package serveur Seafile.

Étape 2 - Installation des dépendances et téléchargement de Seafile

Certaines parties de Seafile sont écrites en Python et nécessitent donc des modules et programmes Python supplémentaires pour fonctionner. Dans cette étape, vous installerez ces dépendances requises avant de télécharger et d'extraire le package du serveur Seafile.

Pour installer les dépendances à l'aide de apt, exécutez la commande suivante :

sudo apt install python-setuptools python-pip python-urllib3 python-requests python-mysqldb ffmpeg

Les dépendances python-setuptools et python-pip supervisent l'installation et la gestion des packages Python. Les packages python-urllib3 et python-requests envoient des requêtes aux sites Web. Enfin, le python-mysqldb est une bibliothèque pour utiliser MariaDB à partir de Python et ffmpeg gère les fichiers multimédia.

Seafile nécessite Pillow, une bibliothèque python pour le traitement d'image, et moviepy pour gérer les vignettes des fichiers vidéo. Ces modules ne sont pas disponibles dans le référentiel de packages Debian. Vous les installerez manuellement en utilisant pip :

sudo pip install Pillow==4.3.0 moviepy

Maintenant que vous avez installé les dépendances nécessaires, vous pouvez télécharger le package serveur Seafile.

Seafile crée des répertoires supplémentaires lors de l'installation. Pour les garder tous organisés, créez un nouveau répertoire et accédez-y :

mkdir seafile
cd seafile

Vous pouvez maintenant télécharger la dernière version (6.3.4 au moment de la rédaction de cet article) du serveur Seafile à partir du site Web en exécutant la commande suivante :

wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz

Seafile distribue le téléchargement sous forme d'archive tar compressée, ce qui signifie que vous devrez l'extraire avant de continuer. Extrayez l'archive en utilisant tar :

tar -zxvf seafile-server_6.3.4_x86-64.tar.gz

Allez maintenant dans le répertoire extrait :

cd seafile-server-6.3.4

À ce stade, vous avez téléchargé et extrait le package du serveur Seafile et avez également installé les dépendances nécessaires. Vous êtes maintenant prêt à configurer le serveur Seafile.

Étape 3 - Configuration du serveur Seafile

Seafile a besoin d'informations sur votre configuration avant de démarrer les services pour la première fois. Cela inclut des détails tels que le nom de domaine, la configuration de la base de données et le chemin où il stockera les données. Pour lancer la série d'invites de questions pour fournir ces informations, vous pouvez exécuter le script setup_seafile_mysql.sh, qui est inclus dans l'archive que vous avez extraite à l'étape précédente.

Exécutez le script en utilisant bash :

bash setup-seafile-mysql.sh

Appuyez sur ENTER pour continuer.

Le script va maintenant vous poser une série de questions. Partout où les valeurs par défaut sont mentionnées, appuyer sur la touche ENTER utilisera cette valeur.

Ce didacticiel utilise Seafile comme nom de serveur, mais vous pouvez le modifier si nécessaire.

Question 1

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

Saisissez le nom de domaine de cette instance Seafile.

Question 2

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

Pour Question 3, appuyez sur ENTER pour accepter la valeur par défaut. Si vous avez configuré un stockage externe, par exemple, en utilisant NFS ou un stockage par blocs, vous devrez spécifier le chemin d'accès à cet emplacement ici à la place.

Question 3

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

Pour Question 4, appuyez sur ENTER pour accepter la valeur par défaut.

Question 4

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

L'invite suivante vous permet de confirmer la configuration de la base de données. Vous pouvez créer de nouvelles bases de données ou utiliser des bases de données existantes pour la configuration. Pour ce didacticiel, vous avez créé les bases de données nécessaires à l'étape 1, sélectionnez donc l'option 2 ici.

-------------------------------------------------------
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 ] 2

Les questions 6 à 9 concernent le serveur de base de données MariaDB. Vous n'aurez qu'à fournir le nom d'utilisateur et le mot de passe de l'utilisateur mysql que vous avez créé à l'étape 1. Appuyez sur ENTER pour accepter les valeurs par défaut pour host et port.

What is the host of mysql server?

[ default "localhost" ]

What is the port of mysql server?

[ default "3306" ]

Which mysql user to use for seafile?

[ mysql user for seafile ] sammy

What is the password for mysql user "seafile"?

[ password for seafile ] password

Après avoir fourni le mot de passe, le script demandera les noms des bases de données Seafile. Utilisez ccnet-db, seafile-db et seahub-db pour ce didacticiel. Le script vérifiera ensuite si la connexion aux bases de données a réussi avant de procéder à l'affichage d'un résumé de la configuration initiale.

Enter the existing database name for ccnet:
[ ccnet database ] ccnet-db

verifying user "sammy" access to database ccnet-db ...  done

Enter the existing database name for seafile:
[ seafile database ] seafile-db

verifying user "sammy" access to database seafile-db ...  done

Enter the existing database name for seahub:
[ seahub database ] seahub-db

verifying user "sammy" access to database seahub-db ...  done

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

    server name:            Seafile
    server ip/domain:       example.com

    seafile data dir:       /home/sammy/seafile/seafile-data
    fileserver port:        8082

    database:               use existing
    ccnet database:         ccnet-db
    seafile database:       seafile-db
    seahub database:        seahub-db
    database user:          sammy

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

Appuyez sur ENTER pour confirmer.

OutputGenerating ccnet configuration ...
done
Successly create configuration dir /home/sammy/seafile/ccnet.

Generating seafile configuration ...                
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.

Comme vous exécuterez Seafile derrière Apache, l'ouverture des ports 8082 et 8000 dans le pare-feu n'est pas nécessaire, vous pouvez donc ignorer cette partie de la sortie.

Vous avez terminé la configuration initiale du serveur. Dans l'étape suivante, vous configurerez le serveur Web Apache avant de démarrer les services Seafile.

Étape 4 - Configuration du serveur Web Apache

Dans cette étape, vous configurerez le serveur Web Apache pour transférer toutes les demandes à Seafile. L'utilisation d'Apache de cette manière vous permet d'utiliser une URL sans numéro de port, d'activer les connexions HTTPS à Seafile et d'utiliser la fonctionnalité de mise en cache fournie par Apache pour de meilleures performances.

Pour commencer à transférer les requêtes, vous devrez activer le module proxy_http dans la configuration Apache. Ce module fournit des fonctionnalités pour le proxy des requêtes HTTP et HTTPS. La commande suivante activera le module :

sudo a2enmod proxy_http

Remarque : Les modules Apache rewrite et ssl sont également requis pour cette configuration. Vous avez déjà activé ces modules dans le cadre de la configuration de Let's Encrypt dans le deuxième tutoriel Apache répertorié dans la section des prérequis.


Ensuite, mettez à jour la configuration de l'hôte virtuel de example.com pour transférer les demandes au serveur de fichiers Seafile et à l'interface Web Seahub.

Ouvrez le fichier de configuration dans un éditeur de texte :

sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf

Les lignes de ServerAdmin à SSLCertificateKeyFile font partie de la configuration initiale d'Apache et de Let's Encrypt que vous configurez dans le cadre du prérequis. Ajoutez le contenu en surbrillance, en commençant par Alias et en terminant par la directive ProxyPassReverse :

/etc/apache2/sites-enabled/example.com-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    Alias /media  /home/sammy/seafile/seafile-server-latest/seahub/media
    <Location /media>
        Require all granted
    </Location>

    # seafile fileserver
    ProxyPass /seafhttp http://127.0.0.1:8082
    ProxyPassReverse /seafhttp http://127.0.0.1:8082
    RewriteEngine On
    RewriteRule ^/seafhttp - [QSA,L]

    # seahub web interface
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>
</IfModule>

La directive Alias mappe le chemin de l'URL example.com/media à un chemin local dans le système de fichiers utilisé par Seafile. La directive Location suivante permet d'accéder au contenu de ce répertoire. Les directives ProxyPass et ProxyPassReverse font qu'Apache agit comme un proxy inverse pour cet hôte, transmettant les demandes à / et /seafhttp à l'interface Web et au serveur de fichiers Seafile s'exécutant sur les ports hôtes locaux 8000 et 8082 respectivement. La directive RewriteRule transmet toutes les requêtes à /seafhttp sans modification et arrête le traitement des règles suivantes ([QSA,L]).

Enregistrez et quittez le fichier.

Testez s'il y a des erreurs de syntaxe dans la configuration de l'hôte virtuel :

sudo apache2ctl configtest

S'il signale Syntax OK, il n'y a aucun problème avec votre configuration. Redémarrez Apache pour que les modifications prennent effet :

sudo systemctl restart apache2

Vous avez maintenant configuré Apache pour agir en tant que proxy inverse pour le serveur de fichiers Seafile et Seahub. Ensuite, vous mettrez à jour les URL dans la configuration de Seafile avant de démarrer les services.

Étape 5 - Mise à jour de la configuration de Seafile et démarrage des services

Comme vous utilisez maintenant Apache pour envoyer par proxy toutes les requêtes à Seafile, vous devrez mettre à jour les URL dans les fichiers de configuration de Seafile dans le répertoire conf à l'aide d'un éditeur de texte avant de démarrer le service Seafile.

Ouvrez ccnet.conf dans un éditeur de texte :

nano /home/sammy/seafile/conf/ccnet.conf

Modifiez le paramètre SERVICE_URL dans le fichier pour qu'il pointe vers la nouvelle URL HTTPS sans le numéro de port, par exemple :

Mettre à jour /home/sammy/seafile/conf/ccnet.conf

SERVICE_URL = https://example.com

Enregistrez et quittez le fichier une fois que vous avez ajouté le contenu.

Ouvrez maintenant seahub_settings.py dans un éditeur de texte :

nano /home/sammy/seafile/conf/seahub_settings.py

Vous pouvez maintenant ajouter un paramètre FILE_SERVER_ROOT dans le fichier pour spécifier le chemin où le serveur de fichiers écoute les chargements et téléchargements de fichiers :

Mettre à jour /home/sammy/seafile/conf/seahub_settings.py

# -*- coding: utf-8 -*-
SECRET_KEY = "..."
FILE_SERVER_ROOT = 'https://example.com/seafhttp'
# ...

Enregistrez et quittez seahub_settings.py.

Vous pouvez maintenant démarrer le service Seafile et l'interface Seahub :

cd /home/sammy/seafile/seafile-server-6.3.4
./seafile.sh start
./seahub.sh start

Comme c'est la première fois que vous démarrez le service Seahub, il vous demandera de créer un compte administrateur. Saisissez une adresse e-mail valide et un mot de passe pour cet utilisateur administrateur :

OutputWhat is the email for the admin account?
[ admin email ] [email protected]

What is the password for the admin account?
[ admin password ] password-here

Enter the password again:
[ admin password again ] password-here

----------------------------------------
Successfully created seafile admin
----------------------------------------
Seahub is started

Done.

Ouvrez https://example.com dans un navigateur Web et connectez-vous à l'aide de votre adresse e-mail et de votre mot de passe d'administrateur Seafile.

Une fois connecté avec succès, vous pouvez accéder à l'interface d'administration ou créer de nouveaux utilisateurs.

Maintenant que vous avez vérifié que l'interface Web fonctionne correctement, vous pouvez activer ces services pour qu'ils démarrent automatiquement au démarrage du système à l'étape suivante.

Étape 6 - Activation du serveur Seafile pour démarrer au démarrage du système

Pour permettre au serveur de fichiers et à l'interface Web de démarrer automatiquement au démarrage, vous pouvez créer les fichiers de service systemd respectifs et les activer.

Créez un fichier de service systemd pour le serveur de fichiers Seafile :

sudo nano /etc/systemd/system/seafile.service

Ajoutez le contenu suivant au fichier :

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

[Unit]
Description=Seafile
After=network.target mysql.service

[Service]
Type=forking
ExecStart=/home/sammy/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/sammy/seafile/seafile-server-latest/seafile.sh stop
User=sammy
Group=sammy

[Install]
WantedBy=multi-user.target

Ici, les lignes ExectStart et ExecStop indiquent les commandes qui s'exécutent pour démarrer et arrêter le service Seafile. Le service fonctionnera avec sammy comme User et Group. La ligne After spécifie que le service Seafile démarrera après le démarrage de la mise en réseau et du service MariaDB.

Enregistrez seafile.service et quittez.

Créez un fichier de service systemd pour l'interface Web Seahub :

sudo nano /etc/systemd/system/seahub.service

Ceci est similaire au service Seafile. La seule différence est que l'interface Web est démarrée après le service Seafile. Ajoutez le contenu suivant à ce fichier :

Créez /etc/systemd/system/seahub.service

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

[Service]
Type=forking
ExecStart=/home/sammy/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/sammy/seafile/seafile-server-latest/seahub.sh stop
User=sammy
Group=sammy

[Install]
WantedBy=multi-user.target

Enregistrez seahub.service et quittez.

Vous pouvez en savoir plus sur les fichiers d'unité systemd dans le didacticiel Comprendre les unités Systemd et les fichiers d'unité .

Enfin, pour permettre aux services Seafile et Seahub de démarrer automatiquement au démarrage, exécutez les commandes suivantes :

sudo systemctl enable seafile.service
sudo systemctl enable seahub.service

Lorsque le serveur est redémarré, Seafile démarre automatiquement.

À ce stade, vous avez terminé la configuration du serveur et pouvez maintenant tester chacun des services.

Étape 7 - Test de la fonctionnalité de synchronisation et de partage de fichiers

Dans cette étape, vous testerez la fonctionnalité de synchronisation et de partage de fichiers du serveur que vous avez configuré et vous vous assurerez qu'ils fonctionnent correctement. Pour ce faire, vous devrez installer le programme client Seafile sur un ordinateur séparé et/ou un appareil mobile.

Visitez la page téléchargement sur le site Web de Seafile et suivez les instructions pour installer la dernière version du programme sur votre ordinateur. Les clients Seafile sont disponibles pour les différentes distributions de Linux (Ubuntu, Debian, Fedora, Centos/RHEL, Arch Linux), MacOS et Windows. Les clients mobiles sont disponibles pour les appareils Android et iPhone/iPad dans les magasins d'applications respectifs.

Une fois que vous avez installé le client Seafile, vous pouvez tester la fonctionnalité de synchronisation et de partage de fichiers.

Ouvrez le programme client Seafile sur votre ordinateur ou appareil. Acceptez l'emplacement par défaut du dossier Seafile et cliquez sur Suivant.

Dans la fenêtre suivante, entrez l'adresse du serveur, le nom d'utilisateur et le mot de passe, puis cliquez sur Connexion.

Sur la page d'accueil, faites un clic droit sur Ma bibliothèque et cliquez sur Synchroniser cette bibliothèque. Acceptez la valeur par défaut pour l'emplacement sur votre ordinateur ou appareil.

Ajoutez un fichier, par exemple un document ou une photo, dans le dossier Ma bibliothèque. Après un certain temps, le fichier sera téléchargé sur le serveur. La capture d'écran suivante montre le fichier photo.jpg copié dans le dossier Ma bibliothèque.

Maintenant, connectez-vous à l'interface Web sur https://example.com et vérifiez que votre fichier est présent sur le serveur.

Cliquez sur Partager à côté du fichier pour générer un lien de téléchargement pour ce fichier que vous pouvez partager.

Vous avez vérifié que la synchronisation des fichiers fonctionne correctement et que vous pouvez utiliser Seafile pour synchroniser et partager des fichiers et des dossiers à partir de plusieurs appareils.

Conclusion

Dans ce tutoriel, vous configurez une instance privée d'un serveur Seafile. Vous pouvez maintenant commencer à utiliser le serveur pour synchroniser des fichiers, ajouter des utilisateurs et des groupes et partager des fichiers entre eux ou avec le public sans dépendre d'un service externe.

Lorsqu'une nouvelle version du serveur est disponible, veuillez consulter la section mise à niveau du manuel pour connaître les étapes à suivre pour effectuer une mise à niveau.