Pour accéder à mes fichiers depuis mes différentes machines, je n'ai pas trouvé mieux que Syncthing. Mais pour mettre des fichiers à disposition des membres de ma famille et de mes amis, j'en étais resté à Dropbox. Il faut admettre que c'est pratique : un lien et c'est partagé. A l'autre bout, aucune compétence technique, aucune perte de temps ne sont requises.

Toutefois, le visionage récent de CitizenFour m'a convaincu que je devrais faire plus attention à la protection de mes données personnelles. J'ai donc entrepris d'installer NextCloud sur mon VPS.

NextCloud, fork du bien connu OwnCloud, est une solution de cloud open-source et auto-hébergeable. Elle sert non seulement à stocker des fichiers mais aussi à centraliser des annuaires et des calendriers. A ce titre, elle m'aidera à m'affranchir non seulement de Dropbox, mais aussi de Google Agenda et de Google Mail.

Scripts

Pour installer votre serveur NextCloud sous Ubuntu 16.04, commencez par télécharger son archive : sudo wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip.

Avant d'aller plus loin, prenez soin de vérifier l'intégrité et l'authenticité de l'archive :

sudo wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip.sha256
sha256sum  -c nextcloud-12.0.0.zip.sha256 < nextcloud-12.0.0.zip
sudo wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip.asc
sudo wget https://nextcloud.com/nextcloud.asc
gpg --import nextcloud.asc
gpg --verify nextcloud-12.0.0.zip.asc nextcloud-12.0.0.zip

Ceci fait, décompressez l'archive sous /var/www/html, et rendez l'utilisateur www-data propriétaire du nouveau dossier : sudo chown -R www-data:www-data <votre dossier d'installation>.

Base de données

Créer ensuite la base de donnée et l'utilisateur MySQL idoines :

CREATE DATABASE nextcloud ;
CREATE USER 'nextclouduser'@'localhost' ;
SET password FOR 'nextclouduser'@'localhost' = password('<votre-mot-de-passe>') ;
GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' ;

Serveur

Il vous reste à créer un fichier de conf pour Apache. Le mien ressemble à ceci, conformément aux instructions officielles.

ServerAdmin <votre-addresse-électronique>
DocumentRoot /var/www/html/<votre-dossier-d-installation>/
ServerName <votre-nom-de-sous-domaine>
ServerAlias <un-autre-nom-de-sous-domaine>

<Directory /var/www/html/cloud.pablomalo.fr/>
        Options +FollowSymLinks
        AllowOverride All
        <IfModule mod_dav.c>
                 Dav off
        </IfModule>
        <IfModule mod_headers.c>
                 Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
        </IfModule>
        SetEnv HOME /var/www/html/cloud.pablomalo.fr
        SetEnv HTTP_HOME /var/www/html/cloud.pablomalo.fr
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Si vos redirections DNS sont bien en place, vous pourrez dès maintenant, moyennant un sudo service apache2 reload, accéder à votre NextCloud bien à vous. A la première connexion, il vous sera proposé de créer un utilisateur avec droits d'administration, et vous devrez indiquer comment NextCloud doit se connecter à sa base de donnée.

Reste encore à régler certains détails.

Sécurisation

Pour se connecter en https, pensez à étendre votre certificat SSL. Avec le certbot de la Free Software Foundation, c'est un jeu d'enfant : refaites un sudo certbot --apache et choisissez l'option Expand.

Dans les réglages d'administration de NextCloud, vous lirez peut-être le message suivant :

L'en-tête HTTP "Strict-Transport-Security" n'est pas configurée à au moins "15552000" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans nos conseils de sécurisation.

C'est qu'il vous manque ces lignes dans le fichier de configuration de votre Virtual Host :

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
</IfModule>

Ajoutez-les puis exécutez ces commandes :

sudo a2enmod headers
sudo service apache2 restart

Pour vérifier vos réglages de sécurité, visitez cette page et indiquez l'URL de votre NextCloud. Si tout est en ordre, le scan vous décernera la note « A+ ».

Cache mémoire

Un message vous avertit que vous ne disposez pas de memcache ?

Installez php-apcu, redémarrez Apache puis ajoutez cette ligne à <votre-dossier-d-installation>/config/config.php.

'memcache.local' => '\OC\Memcache\APCu',

Vous aurez peut-être un warning concernant une mauvaise configuration de opcache dans votre php.ini. Attention, il ne s'agit pas du fichier situé dans /etc/php/7.0/cli, mais de celui qui se trouve dans /etc/php/7.0/apache2. Commencez par en faire une copie (sait-on jamais) puis ajoutez-lui ces lignes, avant de redémarrer Apache :

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Tâches de fond

NextCloud doit pouvoir accomplir certaines tâches de maintenance sans intervention de l'administrateur. Par défaut, ces tâches sont déclenchées par des requêtes Ajax. Toutefois, selon la doc officielle, cette méthode n'est pas optimale.

Mieux faut faire appel à cron. Pour cela, exécuter la commande sudo crontab -u www-data -e et ajouter la ligne suivante aux tâches de l'utilisateur www-data :

*/15  *  *  *  * php -f <votre-dossier-d-installation>/cron.php

Il ne vous reste plus qu'à vous rendre dans l'interface web d'administration de NextCloud, à la rubrique Basic Settings, pour basculer de l'option Ajax vers l'option Cron. Vous pouvez vérifier son bon fonctionnement en observant l'indicateur Last job ran xx minuts ago, dans cette même rubrique : logiquement, le temps écoulé depuis la dernière tâche de fond ne doit jamais dépasser 15 minutes.

Résolution de problèmes

Dès la fin de la première journée d'utilisation, mon NextCloud est devenu très lent à la détente au moment du login : jusqu'à 40 secondes entre le clic sur le bouton « Connexion » et l'accès au site.

Apparemment, d'autres utilisateurs sont affectés.

J'ai suivi leur recommendation :

  • Désactiver la protection contre les attaques par force brute... Dommage !
  • Dans la base de données, exécuter la commande suivante :
DELETE FROM oc_bruteforce_attempts ;

Et voilà : le temps de login est redescendu à environ 1 seconde.

Je réesserai d'activer le plugin fautif d'ici quelques semaines.

Quelques blogs avec des renseignements complémentaires :
sooz.fr
paulfurley.com
c-rieger.de

Article suivant Article précédent