Comment installer NextCloud sur Ubuntu 18.04, 18.10, et 19.04

Publié par Stéphane Brault

NextCloud est un logiciel libre permettant le stockage et l’échange de fichiers, qui fonctionne de façon similaire à DropBox et Google Drive. Toutefois, NextCloud est gratuit, dans la mesure où vous fournissez le serveur Web et l’espace de stockage.

Tronqué depuis le code source de ownCloud il y a plusieurs années, NextCloud propose aujourd’hui un catalogue d’applications beaucoup plus complet que celui de son prédécesseur. De plus, NextCloud offre davantage de fonctionnalités de base que ownCloud.

Dans ce tutoriel, nous verrons comment déployer un serveur Web Ubuntu 18.04 afin d’y installer NextCloud. Notez que la procédure est la même pour Ubuntu 18.10 et 19.04.

Étape #1: Création d’un Droplet DigitalOcean

Afin d’héberger votre plateforme NextCloud, je vous recommande d’essayer un serveur virtuel de DigitalOcean. Appelés Droplets, les serveurs virtuels de DigitalOcean sont hébergés dans un environnement « cloud » et par conséquent, les frais sont facturés à la minute. Utilisez ce lien pour obtenir un crédit de $100 US pour essayer DigitalOcean, vous n’avez rien à perdre.

DigitalOcean permet de déployer un serveur LAMP (Linux, Apache, MariaDB, et PHP) entièrement configuré, prêt à utiliser. Toutefois, nous procéderons à l’installation manuelle du stack LAMP sur Ubuntu 18.04 afin d’en comprendre les rouages.

Pour créer un nouveau serveur cloud, cliquez sur « Create » depuis le panneau de contrôle de DigitalOcean:

Création d'un Droplet DigitalOcean

Sélectionnez ensuite le système d’exploitation Ubuntu 18.04 x64. Notez que les versions 18.10 et 19.04 sont tout aussi valables. Il ne s’agit toutefois pas de versions LTS (Long Term Support).

Quant aux ressources allouées au serveur cloud, j’en suis arrivé à la conclusion qu’un minimum de 3GB de RAM est nécessaire pour héberger NextCloud avec l’antivirus ClamAV. Avec seulement 2GB de RAM, le service ClamAV n’arrivait pas à démarrer et NextCloud était très lent.

creation droplet ubuntu

Spécifiez ensuite l’emplacement désiré pour votre Droplet:

digitalocean droplet emplacement serveur

Et finalement, entrez le nom d’hôte pour votre nouveau serveur:

digitalocean droplet nom hote

Cliquez ensuite sur « Create » pour débuter la création du nouveau Droplet. Une fois la création complétée, notez l’adresse IP du serveur:

adresse ip droplet vps

Ajoutez cette adresse à vos enregistrements DNS:

adresse ip dns

Entre-temps, vérifiez votre boîte de courriel. Vous y trouverez un email de DigitalOcean contenant le mot de passe du compte « root » de votre Droplet.

Étape #2: Installation de Apache, PHP 7.2, et MariaDB

Connectez-vous à votre serveur en tant que « root », à l’aide d’un client SSH. Procédez à une mise à jour complète de Ubuntu et des applications installées à l’aide de « apt »:

apt update -y && apt upgrade -y

Désactivez AppArmor:

service apparmor stop
update-rc.d -f apparmor remove 
apt-get remove apparmor apparmor-utils

Installez ensuite les logiciels nécessaires:

apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap php7.2-cli php7.2-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby libapache2-mod-python php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl memcached php-memcache php-imagick php-gettext php7.2-zip php7.2-mbstring php-redis php-soap php7.2-soap php7.2-opcache php-apcu php7.2-fpm certbot software-properties-common redis-server php-redis

Activez les modules Apache nécessaires:

a2enmod suexec rewrite ssl actions include cgi dav_fs dav auth_digest headers proxy_fcgi alias

Créez un  nouveau fichier de configuration Apache:

nano /etc/apache2/conf-available/httpoxy.conf

Insérez les directives pour prévenir les attaques HTTPOXY

<IfModule mod_headers.c>
RequestHeader unset Proxy early
</IfModule>

Sauvegardez le fichier puis quittez l’éditeur. Activez la nouvelle configuration:

a2enconf httpoxy

Vérifiez maintenant si le pare-feu « ufw » est actif. Tapez la commande:

ufw status

Si le pare-feu est actif, ajoutez une règle permettant l’accès aux ports 80 et 443:

ufw allow 'Apache Full'
ufw delete allow 'Apache'

Redémarrez le service Apache:

systemctl restart apache2

Génération d’un certificat SSL Let’s Encrypt

Let’s Encrypt est une autorité de certification à but non lucratif qui fournit des certificats SSL gratuits. Afin de pouvoir générer un certificat Let’s Encrypt, ajoutez le dépôt « certbot »:

add-apt-repository ppa:certbot/certbot

Installez ensuite le paquet Certbot pour Apache:

apt install python-certbot-apache

Utilisez maintenant « certbot » pour générer une requête de création de certificat SSL:

certbot --apache -d cloud.stephanebrault.com

Entrez ensuite votre adresse courriel:

ubuntu certbot lets encrypt

Acceptez les conditions d’utilisation et spécifiez si vous autorisez Let’s Encrypt à vous envoyer leur infolettre.

En tout dernier lieu, « certbot » vous propose de configurer Apache afin de rediriger tout le traffic « http » vers « https ». Sélectionnez alors l’option #2 pour appliquer ce choix:

ubuntu apache certbot lets encrypt redirect https

Redémarrez Apache:

systemctl restart apache2

Vérifiez ensuite que le site Web par défaut est maintenant sécurisé:

ubuntu apache test page https

Configuration de PHP-FPM

Par défaut, Apache utilise le module FastCGI afin de gérer les processus PHP. Toutefois, nous utiliserons PHP-FPM (PHP FastCGI Process Manager) car celui-ci est plus performant.

Activez le module PHP-FPM pour Apache:

a2enconf php7.2-fpm

PHP-FPM utilise des « instances » (pool) FastCGI pour traiter les requêtes d’exécution PHP. Modifiez le fichier de configuration de l’instance par défaut:

nano /etc/php/7.2/fpm/pool.d/www.conf

À la toute fin du fichier, modifiez la limite de mémoire permise pour cette instance PHP-FPM:

php_admin_value[memory_limit] = 512M

Ensuite, activez et démarrez le service PHP-FPM:

systemctl enable php7.2-fpm
systemctl start php7.2-fpm

Modifiez le fichier de configuration Apache créé par « certbot »:

cp /etc/apache2/sites-available/000-default-le-ssl.conf /etc/apache2/sites-available/000-default-le-ssl.conf.old
nano /etc/apache2/sites-available/000-default-le-ssl.conf

Insérez ces directives avant la balise de fermeture « </VirtualHost> »:

[...]

<Directory /var/www/html>
        AllowOverride All
</Directory>
<IfModule proxy_fcgi_module> 
   # Enable http authorization headers 
   <IfModule setenvif_module> 
   SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 
   </IfModule> 
   <FilesMatch ".+\.ph(ar|p|tml)$"> 
       SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost" 
   </FilesMatch> 
   <FilesMatch ".+\.phps$"> 
       # Deny access to raw php sources by default 
       # To re-enable it's recommended to enable access to the files 
       # only in specific virtual host or directory 
       Require all denied 
   </FilesMatch> 
   # Deny access to files without filename (e.g. '.php') 
   <FilesMatch "^\.ph(ar|p|ps|tml)$"> 
       Require all denied 
   </FilesMatch> 
</IfModule>

</VirtualHost>
</IfModule>

Redémarrez le service Apache:

systemctl restart apache2

Nous allons ensuite vérifier que les scripts PHP sont maintenant traités par PHP-FPM. Créez un fichier « info.php » à la racine du site Web principal:

nano /var/www/html/info.php

Ajoutez le code suivant au fichier puis quittez l’éditeur:

<?php phpinfo(); ?>

Accédez maintenant au fichier « info.php » à l’aide de votre navigateur et assurez-vous que PHP-FPM est actif:

ubuntu apache php-fpm actif

Défilez ensuite jusqu’à la section « Environment » et vérifiez que PHP est exécuté avec le compte « www-data »:

ubuntu phpinfo utilisateur www-data

Activation du serveur Redis

Redis est une application permettant de stocker en mémoire des informations en format « clé => valeur » afin d’y accéder rapidement. Ce type de stockage-mémoire peut alors servir de base de données ou bien de cache.

Comme NextCloud peut être appelé à héberger un grand nombre de fichiers, il est donc crucial d’installer une cache-mémoire telle que Redis afin d’obtenir un temps de réponse décent avec PHP.

Utilisez ces commandes pour activer et démarrez le serveur Redis:

systemctl enable redis-server
systemctl start redis-server

Activation et configuration de MySQL

Nous allons maintenant procéder à l’installation de MariaDB. Importez la clé GPG qui servira à valider l’authenticité des paquets à installer:

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Ajoutez maintenant le dépôt APT pour MariaDB:

add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main'

Installez MariaDB:

apt -y install mariadb-server mariadb-client

Durant l’installation, vous serez invité à saisir un mot de passe pour le serveur MariaDB:

ubuntu installation mariadb mot de passe

Une fois l’installation complétée, modifiez le fichier de configuration de MariaDB:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Sous la section [mysqld], ajoutez les deux lignes suivantes:

[mysqld]
...
transaction_isolation = READ-COMMITTED
binlog_format = ROW
...

Démarrez le service MariaDB:

systemctl start mariadb

Sécurisez ensuite le serveur MariaDB:

mysql_secure_installation

Répondez maintenant aux questions comme suit:

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!

Étape #3: Installation de ClamAV

ClamAV est un antivirus gratuit. Tapez cette commande pour l’installer:

apt install -y clamav clamav-daemon

Activez et démarrez ensuite le service « clamav-daemon »:

systemctl enable clamav-daemon
systemctl start clamav-daemon

Étape #4: Installation de NextCloud

Maintenant que le serveur Ubuntu est prêt, nous pouvons passer à l’installation de NextCloud. Dans un premier temps, connectez-vous au serveur MySQL afin de créer la base de données pour NextCloud:

mysql -u root -p

Créez ensuite la base de données:

MariaDB [(none)]> CREATE DATABASE nextcloud;

Ajustez les permissions d’accès:

MariaDB [(none)]> GRANT ALL ON nextcloud.* to 'nextcloud'@'localhost' IDENTIFIED BY 'mot_de_passe';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

Par défaut, NextCloud stock les fichiers des utilisateurs dans un sous-répertoire du répertoire public /var/www/html/data). Bien que l’accès à ce répertoire soit restreint, il est préférable d’utiliser un autre emplacement, situé à l’extérieur du répertoire Web:

mkdir /var/nc_data
chown -R www-data:www-data /var/nc_data

Modifiez maintenant le propriétaire et les permissions du répertoire « /var/www/html »:

chown -R www-data:www-data /var/www/html
chmod -R 0755 /var/www/html

Effacez le script « info.php » créé précédemment:

rm /var/www/html/info.php

Téléchargez l’assistant d’installation Web pour NextCloud:

cd /var/www/html
sudo -u www-data wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
chmod 0755 setup-nextcloud.php

Accédez ensuite au script d’installation depuis votre navigateur Web et cliquez sur « Next »:

assistant web nextcloud installation

Après avoir vérifié les dépendances nécessaires, spécifiez l’emplacement où vous souhaitez installer NextCloud. Utiliser le point afin d’installer NextCloud à la racine du site.

nextcloud repertoire installation

Une fois l’installation complétée, cliquez sur « Next ». Vous serez alors invité à choisir un nom d’utilisateur et un mot de passe pour l’administrateur. Quant au « Data folder », entrez le chemin du répertoire créé précédemment (/var/nc_data).

nextcloud configuration mysql

Sélectionnez ensuite MySQL/MariaDB puis entrez les informations de connexions à la base de données. Cliquez finalement sur « Finish setup » lorsque terminé.

De retour à votre terminal SSH, modifiez le fichier « .htaccess » de NextCloud:

sudo -u www-data nano /var/www/html/.htaccess

À la toute fin du fichier, insérez ces directives:

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

Sauvegardez le fichier et quittez l’éditeur. Modifiez maintenant le fichier de configuration principal de NextCloud:

sudo -u www-data nano /var/www/html/config/config.php

Insérez les paramètres identifiés en rouge:

<?php 
$CONFIG = array ( 
 'instanceid' => 'och9yito0vs4', 
 'passwordsalt' => '0bF2COnG3nPn6vB2j45WEAIduX4XtF', 
 'secret' => 'PVdQNBZb1gaJBVRSJ6qm9pfUwjZH6oFGQ8BQ6+/gkNADsWlV', 
 'trusted_domains' =>  
 array ( 
   0 => 'cloud.stephanebrault.com', 
 ), 
 'datadirectory' => '/var/nc_data', 
 'dbtype' => 'mysql', 
 'version' => '16.0.1.1', 
 'overwrite.cli.url' => 'https://cloud.stephanebrault.com', 
 'dbname' => 'nextcloud', 
 'dbhost' => 'localhost', 
 'dbport' => '', 
 'dbtableprefix' => 'oc_', 
 'mysql.utf8mb4' => true, 
 'dbuser' => 'nextcloud', 
 'dbpassword' => 'mot_de_passe', 
 'installed' => true, 
 'memcache.local' => '\OC\Memcache\APCu', 
 'memcache.distributed' => '\OC\Memcache\Redis', 
 'redis' => [ 
   'host' => '127.0.0.1', 
   'port' => 6379, 
 ], 
);
?>

Accédez maintenant à NextCloud à l’aide votre navigateur Web et cliquez sur « Settings » depuis le menu de l’utilisateur:

nextcloud settings

Cliquez ensuite sur « Overview » dans la colonne de gauche et assurez-vous qu’il n’y ait aucun avertissement:

nextcloud parametres generaux avertissement

Étape #5: Ajout d’une tâche Cron

Afin d’automatiser la maintenance de NextCloud, ajoutez une tâche cron pour le compte www-data:

crontab -u www-data -e

Ajoutez cette ligne à la fin du fichier suivie d’un retour de chariot:

*/15 * * * * /usr/bin/php -f /var/www/html/nextcloud/cron.php

Sauvegardez le fichier et quittez l’éditeur. De retour dans NextCloud, cliquez sur « Basic Settings » dans la colonne de gauche puis sélectionnez « Cron » dans la section « Background jobs »:

nextcloud parametre cron job

Étape #6: Intégration de ClamAV

Afin d’intégrer l’antivirus ClamAV avec NextCloud, vous devez installer installation l’application nécessaire dans un premier temps. Depuis le menu de l’utilisateur, cliquez sur « Apps ». Faîtes une recherche pour « Antivirus for files »:

nextcloud app clamav

Cliquez sur « Download and enable » pour activer l’application.

Étape #7: Ajout d’un utilisateur NextCloud

L’ajout d’utilisateur est tout de même assez intuitif. Cliquez sur « Users » depuis le menu de l’utilisateur puis ensuite sur le bouton « New user »:

nextcloud ajout utilisateur

Entrez les informations du nouvel utilisateur et voilà! Un courriel de bienvenue sera envoyé à l’utilisateur.

En conclusion

Après avoir testé ownCloud sur CentOS 7 et NextCloud sur Ubuntu 18.04, il est facile de voir que NextCloud a beaucoup plus à offrir que ownCloud. Son interface est mieux polie et plus intuitive à quelques égards. De plus, l’installation d’un stack LAMP (Linux, Apache, MySQL, et PHP) sur Ubuntu nécessite moins de configuration, et par conséquent moins de temps, que sur un serveur CentOS.

En contrepartie, ownCloud sur CentOS nécessite moins de ressources. En effet, il est possible d’installer ownCloud et ClamAV sur un serveur CentOS 7.6 avec seulement 2GB de RAM. L’interface Web est aussi plus rapide et plus légère que celle de NextCloud.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.