Pydio est un cloud Open Source sous licence AGPLv3 permettant notamment le stockage et le partage de fichiers en ligne. Il a été créé en 2007 sous le nom d’AjaXplorer par le français Charles Du Jeu. En 2013, il change de nom pour devenir Pydio (Put Your Data in Orbit) et est actuellement développé par la start-up française éponyme dont le PDG est le fondateur initial du projet. Sa version actuelle est la 7.0.4.
Comparatif des fonctionnalités entre la version Entreprise et la version Communautaire : ici.
Il offre de nombreuses fonctionnalités, potentiellement étendues grâce à des plugins, dont :
- Partage de fichiers par lien public
- Synchronisation avec clients Android/iPhone ou Windows/Linux/MAC OS X
- Sécurisation des partages par mot de passe ou date d’expiration des liens
- Edition de texte en ligne et visionnage de PDF et documents Open Office
- Connexion à d’autres systèmes de stockage (SAN, NAS, SMB/CIFS, FTP, NFS, etc.) ou d’autres clouds (Dropbox, OneDrive, etc.)
- Support de nombreux formats de fichiers : DOC, DOCX, PPT, PPTX, XLS, XLSX, ODF, ODS, ODP
- Gestion des versions de documents
- ACLs et gestion des sessions (version pro)
- Monitoring en temps réel (version pro)
- Authentification et partage par un annuaire LDAP (version pro)
- De nombreuses fonctionnalités ne sont présentes que sur la version Entreprise même si la version Communitaire offre un panel de fonctionnalités étendues
- etc.
Alternatives Open Source à Pydio :
Objectif
L’objectif de cet article est l’installation et la configuration d’un serveur LAMP5 (Linux Apache MariaDB PHP5) auto-hébergé Pydio en version 7.0.4 sur une distribution Linux Debian Jessie 8.7 32bits.
Schéma logique

Pré-requis
1. Pré-requis avant réalisation
- Un serveur Debian Jessie 8.7 32 bits fonctionnel (installation basique avec utilitaires usuels du système et service SSH)
- Packages de base supplémentaires : sudo, resolvconf, tree, unzip
- Domaine utilisé : opensharing.priv
2. Configuration réseau initiale
Serveur Pydio | |
FQDN | pydio-test.opensharing.priv |
Adresse IP | 192.168.1.21 |
Réseau | 192.168.1.0/24 |
Passerelle | 192.168.1.1 |
dns-nameservers | 192.168.1.11 192.168.1.12 |
dns-search | opensharing.priv |
Contenu initial du fichier /etc/network/interfaces :
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet static address 192.168.1.21 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-search opensharing.priv dns-nameservers 192.168.1.11 192.168.1.12
Contenu initial du fichier /etc/hosts :
127.0.0.1 localhost.localdomain localhost 192.168.1.21 pydio-test.opensharing.priv pydio-test 192.168.1.21 pydio.opensharing.priv pydio
Rmq : L’adresse 127.0.1.1 doit être retirée sur un serveur à IP fixe et remplacée par cette dernière, tel que l’exemple ci-dessus.
Contenu initial du fichier /etc/host.conf :
order hosts, bind multi on
Contenu initial du fichier /etc/resolv.conf :
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 192.168.1.11 nameserver 192.168.1.12 search opensharing.priv
Rmq :
Le fichier /etc/resolv.conf ne doit pas être édité dès lors que le paquet resolvconf a été installé.
Pour prendre en compte les modifications des fichiers de configuration relatifs au réseau, redémarrage du service réseau :
# /etc/init.d/networking restart # /etc/init.d/networking reload
Réalisation
Cette procédure d’installation de Pydio pourrait être simplifiée en installant uniquement le paquet pydio-all (après ajout d’un dépôt propre à Pydio) mais elle pour but de mettre en évidence l’installation d’un serveur LAMP (Linux Apache MySQL PHP) destiné à accueillir Pydio.
1. Installation de Apache
# apt install apache2 apache2-doc
Installe les paquets suivants par dépendances :
apache2 | apache2-data | apache2-doc | apache2-utils |
2. Installation de MariaDB
# apt install mariadb-server mariadb-client
Installe les paquets suivants par dépendances :
libaio1 | libdbd-mysql-perl | libdbi-perl | libhtml-template-perl |
libmysqlclient18 | libreadline5 | libterm-readkey-perl | mariadb-client |
mariadb-client-10.0 | mariadb-client-core-10.0 | mariadb-common | mariadb-server |
mariadb-server-10.0 | mariadb-server-core-10.0 | mysql-common |
Choisir le mot de passe pour le compte d’administration de MariaDB (« root« ) et le confirmer.
3. Installation de PHP5
# apt install php5 php5-apcu php5-cli php5-common php5-curl php5-gd php5-imap php5-intl php5-json php5-ldap php5-mcrypt php5-mysql php5-radius php5-readline php5-ssh2 php-mail-mime php-mail-mimedecode php-pclzip php-pear php-seclib
Installe les paquets suivants par dépendances :
apache2 | apache2-data | apache2-utils | libapache2-mod-php5 |
libc-client2007e | libcurl3 | libmcrypt4 | libmysqlclient18 |
libonig2 | libqdbm14 | mlock | mysql-common |
php-mail-mime | php-mail-mimedecode | php-pclzip | php-pear |
php-seclib | php5 | php5-apcu | php5-cli |
php5-common | php5-curl | php5-gd | php5-imap |
php5-intl | php5-json | php5-ldap | php5-mcrypt |
php5-mysql | php5-radius | php5-readline | php5-ssh2 |
4. Installation de phpMyAdmin
# apt install phpmyadmin
Installe les paquets suivants par dépendances :
dbconfig-common | javascript-common | libjs-jquery | libjs-sphinxdoc |
libjs-underscore | libmcrypt4 | php-gettext | php-tcpdf |
php5-gd | php5-mcrypt | phpmyadmin |
Choisir le serveur web à reconfigurer automatiquement, dans notre cas apache2.
Faut-il configurer la base de données de phpmyadmin avec dbconfig-common ? Non
Nous allons le faire manuellement plus loin.
5. Installation de paquets complémentaires
# apt install clamav clamav-base clamav-freshclam curl encfs git git-man libboost-filesystem1.55.0 libboost-serialization1.55.0 libclamav7 liberror-perl libjs-pdf libmspack0 libpq5 librlog5 libserf-1-1 libsvn1 pdf.js-common python-crypto python-ldb python-ntdb python-samba python-tdb rsync samba-common samba-common-bin smbclient subversion zip
Installe les paquets suivants par dépendances :
clamav | clamav-base | clamav-freshclam | curl |
encfs | git | git-core | git-man |
libboost-filesystem1.55.0 | libboost-serialization1.55.0 | libclamav7 | liberror-perl |
libjs-pdf | libmspack0 | libpq5 | librlog5 |
libserf-1-1 libsvn1 | pdf.js-common | python-crypto | python-ldb |
python-ntdb | python-samba | python-tdb | rsync |
samba-common | samba-common-bin | smbclient | subversion |
zip |
6. Installation de Pydio
# wget https://download.pydio.com/pub/core/archives/pydio-core-7.0.4.zip # unzip pydio-core-7.0.4.zip -d /var/www/ # mv /var/www/pydio-core-7.0.4/ /var/www/pydio/ # chown -R www-data:www-data /var/www/pydio/
7. Configuration de MariaDB
# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 48 Server version: 10.0.30-MariaDB-0+deb8u1 (Debian) Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS pydiodb; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE USER pydioadmin@localhost IDENTIFIED BY "pydioadminpw"; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON pydiodb.* TO pydioadmin@localhost; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | pydiodb | +--------------------+ 4 rows in set (0.06 sec) MariaDB [(none)]> quit; Bye
8. Configuration de Apache
# nano /etc/apache2/sites-available/pydio.conf
<VirtualHost *:80> DocumentRoot /var/www/pydio/ ServerName pydio.opensharing.priv Redirect permanent / https://pydio.opensharing.priv/ </VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/pydio/ ServerName pydio.opensharing.priv <Directory /var/www/pydio/> Options +FollowSymlinks AllowOverride All </Directory> SetEnv HOME /var/www/pydio SetEnv HTTP_HOME /var/www/pydio ErrorLog /var/log/apache2/pydio.error.log CustomLog /var/log/apache2/access.log combined SSLEngine On SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire SSLCertificateFile /etc/ssl/certs/pydioperso.crt SSLCertificateKeyFile /etc/ssl/private/pydioperso.key </VirtualHost>
Génération de la clef privée :
# openssl genrsa -out /etc/ssl/private/pydioperso.key 1024
Generating RSA private key, 1024 bit long modulus
....................++++++
......++++++
e is 65537 (0x10001)
Demande de certificat à partir de la clef :
# openssl req -new -key /etc/ssl/private/pydioperso.key -out /etc/ssl/certs/pydioperso.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank. For some fields there will be a default value, if you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Ile-de-France Locality Name (eg, city) []:Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]:OpenSharing Organizational Unit Name (eg, section) []:Service Informatique Common Name (e.g. server FQDN or YOUR name) []:pydio.opensharing.priv Email Address []:admin@opensharing.priv Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:pydiocertificate An optional company name []:OpenSharing
Construction du certificat :
# openssl x509 -req -days 365 -in /etc/ssl/certs/pydioperso.csr -signkey /etc/ssl/private/pydioperso.key -out /etc/ssl/certs/pydioperso.crt Signature ok subject=/C=FR/ST=Ile-de-France/L=Paris/O=OpenSharing/OU=Service Informatique/CN=pydio.opensharing.priv/emailAddress=admin@opensharing.priv Getting Private key
Activation du site et des modules et vérification de la syntaxe du VirtuaHost :
# a2ensite pydio # a2enmod rewrite # a2enmod ssl # apachectl configtest Syntax OK
9. Dernières modifications
# nano /var/www/pydio/conf/bootstrap_conf.php
Décommenter et modifier la ligne suivante (ligne 32) :
define("AJXP_LOCALE", "fr_FR.UTF-8");
# nano /etc/php5/apache2/php.ini
Modifier la ligne suivante (ligne 234) :
output_buffering = off
# nano /var/www/pydio/.htaccess
Ajouter les lignes suivantes en fin de fichier :
php_value post_max_size 10G php_value upload_max_filesize 10G
# nano /etc/php5/apache2/php.ini
Modifier les lignes suivantes (lignes 660 et 820) :
post_max_size = 10G upload_max_filesize = 10G
Ci-dessus, une limite de 10 Go par fichier uploadable est configurée, remplaçant la limite par défaut de 2 Mo.
10. Redémarrage des services
# service apache2 restart # service mysql restart
11. Configuration de Pydio par le navigateur Web
Saisir, dans la barre d’adresses, l’adresse suivante :
http://pydio.opensharing.priv
redirigeant automatiquement vers :
https://pydio.opensharing.priv/
Le répondeur OCSP nous signifie que le certificat n’émane pas d’une autorité de certification reconnue, un message d’avertissement est donc émis.
Cliquer sur Avancé puis Ajouter une exception…
Il suffit ensuite de Confirmer l’exception de sécurité.
Choisir la langue sur l’assistant d’installation puis cliquer sur Démarrer l’assistant!
Choisir et renseigner les informations relatives à l’administrateur Pydio.
Puis les informations relatives à la base de données pydiodb créée lors de la configuration de MariaDB.
Tester la connexion à la base de données pydiodb en cliquant sur Test Connection.


Renseigner enfin les options avancées et cliquer sur Installer Pydio.
L’installation se lance.


Puis le portail d’authentification. Renseigner les champs relatifs à l’administrateur Pydio.
Sécurisation du dossier pydio :
# find /var/www/pydio/ -type f -print0 | xargs -0 chmod 0640 # find /var/www/pydio/ -type d -print0 | xargs -0 chmod 0750 # chown -R root:www-data /var/www/pydio/ # chown -R www-data:www-data /var/www/pydio/data # chown www-data:www-data /var/www/pydio/.htaccess # service apache2 restart # service mysql restart
Pour aller plus loin
1. Effectuer une sauvegarde manuelle complète
# mkdir -p /home/adminsys/backup/7.0.4/ # cd /home/adminsys/backup/7.0.4/ # tar -czvf backup-pydio-20170406.tar.gz -C /var/www/ pydio/ # mysqldump --user=pydioadmin --password=pydioadminpw --databases pydiodb > pydio-20170406.sql
2. Effectuer une restauration manuelle complète
# cd /home/adminsys/backup/7.0.4/ # tar -xzvf backup-pydio-20170406.tar.gz -C /var/www/ # mysql --user=pydioadmin --password=pydioadminpw pydiodb < pydio-20170406.sql
Références