Comment synchroniser et partager vos fichiers avec Seafile sur Ubuntu 18.04

L'auteur a sélectionnéWikimedia Foundation Inc. pour recevoir un don dans le cadre du programmeWrite for DOnations.

introduction

Seafile est une plate-forme open source, auto-hébergée, de synchronisation et de partage de fichiers. Les utilisateurs peuvent stocker et éventuellement chiffrer des données sur leurs propres serveurs, la seule limitation étant l’espace de stockage. Avec Seafile, vous pouvez partager des fichiers et des dossiers en utilisant une synchronisation multi-plateformes et des liens protégés par mot de passe vers des fichiers avec des dates d'expiration. Une fonctionnalité de version de fichier 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 Ubuntu 18.04. Vous utiliserez MySQL pour stocker les données des différents composants de Seafile et Apache en tant que serveur proxy pour gérer le trafic Web. Une fois ce didacticiel terminé, 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 Ubuntu 18.04 avec un minimum de 2 Go de RAM configuré en suivant ce tutorielInitial Server Setup for Ubuntu 18.04, 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 suivantHow To Install the Apache Web Server on Ubuntu 18.04.

  • Un certificat SSL installé sur votre serveur en suivant ce tutorielHow To Secure Apache with Let’s Encrypt on Ubuntu 18.04.

  • Un nom de domaine entièrement enregistré. Ce didacticiel utiliseraexample.com partout.

  • Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivre cesintroduction to DigitalOcean DNS pour savoir comment les ajouter.

    • Un enregistrement A avecexample.com pointant vers l'adresse IP publique de votre serveur.

    • Un enregistrement A avecwww.example.com pointant vers l'adresse IP publique de votre serveur.

  • Un serveur de base de données MySQL installé et configuré. Suivez les étapes du didacticielHow To Install MySQL on Ubuntu 18.04. Ignorez l'étape 3 de ce didacticiel - «Réglage de l'authentification et des privilèges de l'utilisateur». Vous ne ferez que 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.

[[step-1 -—- creating-databases-for-the-seafile-components]] == É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 deDjango. Seahub vous permet d’accéder à vos fichiers, de les gérer et de les partager à l’aide d’un navigateur Web.

  • Seafile server: le démon du service de données qui gère le télé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 client ou l'interface Web Seahub.

  • Ccnet server: le démon de service RPC pour activer la communication interne entre les différents composants de Seafile. Par exemple, lorsque vous utilisez Seahub, il est possible d'accéder aux données du serveur Seafile à l'aide du 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 MySQL et un utilisateur avant de procéder à la configuration du serveur.

Commencez par vous connecter au serveur à l’aide de SSH avec votre nom d’utilisateur et votre adresse IP:

ssh sammy@your_server_ip

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

sudo mysql

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

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

Vous allez ensuite 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.

A l'invite MySQL, 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 aux bases de données et y apporter des modifications:

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 MySQL en tapantexit:

exit

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

[[step-2 -—- installation-dependencies-and-loading-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 des 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 deapt, exécutez la commande suivante:

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

Les dépendancespython-setuptools etpython-pip supervisent l'installation et la gestion des packages Python. Les packagespython-urllib3 etpython-requests adressent des requêtes aux sites Web. Enfin,python-mysqldb est une bibliothèque pour utiliser MySQL depuis Python etffmpeg gère les fichiers multimédias.

Les modules Pythonpillow etmoviepy requis par Seafile ne sont pas disponibles dans le référentiel de packages Ubuntu. Vous les installerez manuellement en utilisantpip:

sudo pip install pillow moviepy

Seafile nécessitepillow, une bibliothèque Python pour le traitement d'image etmoviepy pour gérer les vignettes de fichiers vidéo.

[.Remarque]##

NOTE: Vous devrez également mettre à niveau ces packages manuellement lorsque de nouvelles versions seront publiées. La commande de mise à niveau est:

sudo pip install --upgrade pillow moviepy

Maintenant que vous avez installé les dépendances nécessaires, vous pouvez télécharger le package du 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 changez-le:

mkdir seafile
cd seafile

Vous pouvez maintenant télécharger la dernière version (6.3.4 à ce jour) du serveur Seafile à partir duwebsite 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 poursuivre. Extrayez l'archive à l'aide detar:

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

Maintenant changez 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.

[[step-3 -—- configuration-the-seafile-server]] == É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ù seront stockées les données. Pour lancer la série de questions afin de fournir ces informations, vous pouvez exécuter le scriptsetup_seafile_mysql.sh, qui est inclus dans l'archive que vous avez extraite à l'étape précédente.

Exécutez le script en utilisantbash:

bash setup-seafile-mysql.sh

Appuyez surENTER 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 toucheENTER utilisera cette valeur.

Ce didacticiel utiliseSeafile 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

Entrez le nom de domaine pour 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

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

**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" ]

PourQuestion 4, appuyez surENTER 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, alors sélectionnez l'option2 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 MySQL. Il vous suffira de fournir le nom d'utilisateur et le mot de passe de l'utilisateurmysql que vous avez créé à l'étape 1. Appuyez surENTER pour accepter les valeurs par défaut pourhost etport.

    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. Utilisezccnet-db,seafile-db etseahub-db pour ce didacticiel. Le script vérifiera ensuite si la connexion aux bases de données est établie avant d'afficher un récapitulatif 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 surENTER 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  | stop | restart  }
-----------------------------------------------------------------
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 ports8082 et8000 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 allez configurer le serveur Web Apache avant de démarrer les services Seafile.

[[step-4 -—- configuring-the-apache-web-server]] == Étape 4 - Configuration du serveur Web Apache

Dans cette étape, vous allez configurer le serveur Web Apache pour qu'il transfère toutes les demandes à Seafile. Utiliser Apache de cette manière vous permet d'utiliser une URL sans numéro de port, d'activer les connexions HTTPS avec Seafile et d'utiliser la fonctionnalité de mise en cache fournie par Apache pour améliorer les performances.

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

sudo a2enmod proxy_http

[.note] #Note: Les modules Apacherewrite etssl 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 didacticiel Apache répertorié dans la section des prérequis.
#

Ensuite, mettez à jour la configuration d'hôte virtuel deexample.com pour transférer les requêtes vers le serveur de fichiers Seafile et vers 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 deServerAdmin àSSLCertificateKeyFile font partie de la configuration initiale d'Apache et de Let’s Encrypt que vous avez configurée dans le cadre des conditions préalables. Ajoutez le contenu en surbrillance, commençant àAlias et se terminant par la directiveProxyPassReverse:

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



    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
    
        Require all granted
    

    # 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/

La directive Alias ​​mappe le chemin de l'URL example.com/media sur un chemin local du système de fichiers utilisé par Seafile. La directiveLocation suivante permet d'accéder au contenu de ce répertoire. Les directivesProxyPass etProxyPassReverse font qu'Apache agit comme un proxy inverse pour cet hôte, en transférant les requêtes vers/ et/seafhttp vers l'interface Web Seafile et le serveur de fichiers s'exécutant sur l'hôte local ports8000 et8082 respectivement. La directiveRewriteRule transmet toutes les requêtes à/seafhttp inchangées et arrête le traitement des règles supplémentaires ([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 signaleSyntax 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 qu'il agisse en tant que proxy inverse pour le serveur de fichiers Seafile et Seahub. Ensuite, vous allez mettre à jour les URL dans la configuration de Seafile avant de démarrer les services.

[[step-5 -—- updated-seafile-39-s-configuration-and-starting-services]] == Étape 5 - Mise à jour des services de configuration et de démarrage de Seafile

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épertoireconf en utilisant un éditeur de texte avant de démarrer le service Seafile.

Ouvrezccnet.conf dans un éditeur de texte:

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

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

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

SERVICE_URL = https://example.com

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

Maintenant, ouvrezseahub_settings.py dans un éditeur de texte:

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

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

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

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

Enregistrez et quittezseahub_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 sera demandé de créer un compte administrateur. Entrez une adresse email 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.

Ouvrezhttps://example.com dans un navigateur Web et connectez-vous en utilisant votre adresse e-mail et votre mot de passe d'administrateur Seafile.

Login screen of the Seafile web interface

Une fois connecté, 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 permettre à ces services de démarrer automatiquement au démarrage du système à l'étape suivante.

[[step-6 -—- activation-the-seafile-server-to-start-at-system-boot]] == É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 servicesystemd respectifs et les activer.

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

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

Ajoutez le contenu suivant au fichier:

/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 lignesExectStart etExecStop indiquent les commandes qui s'exécutent pour démarrer et arrêter le service Seafile. Le service fonctionnera avecsammy commeUser etGroup. La ligneAfter spécifie que le service Seafile démarrera après le démarrage du réseau et du service MySQL.

Sauvegardezseafile.service et quittez.

Créez un fichier de servicesystemd 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:

/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

Sauvegardezseahub.service et quittez.

Vous pouvez en savoir plus sur les fichiers d'unité systemd dans le didacticielUnderstanding Systemd Units and Unit Files.

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.

[[step-7 -—- testing-file-syncing-and-sharing-feature]] == Étape 7 - Test de la fonctionnalité de synchronisation et de partage de fichiers

Au cours de cette étape, vous allez tester la fonctionnalité de synchronisation et de partage de fichiers du serveur que vous avez configuré et vous assurer de son bon fonctionnement. Pour ce faire, vous devrez installer le programme client Seafile sur un ordinateur séparé et / ou un périphérique mobile.

Visitez la pagedownload 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 synchronisation des fichiers et la fonctionnalité de partage.

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

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

Sur la page d'accueil, faites un clic droit surMy Library et cliquez surSync this library. Acceptez la valeur par défaut pour l'emplacement sur votre ordinateur ou votre périphérique.

Seafile client — Sync the default library

Ajoutez un fichier, par exemple un document ou une photo, dans le dossierMy Library. 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.

Add a file to the default library from the computer

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

My Library page to verify file sync

Cliquez surShare à 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 de fichiers fonctionne correctement et que vous pouvez utiliser Seafile pour synchroniser et partager des fichiers et des dossiers à partir de plusieurs périphériques.

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 faire appel à un service externe.

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