Nextcloud is an online file storage and sharing solution. It is free software, distributed free of charge and installable on its own server....
Nextcloud is an online file storage and sharing solution. It is free software, distributed free of charge and installable on its own server. We will see in this guide, how to install NextCloud on an Ubuntu 20.04 server.

NextCloud features
- Free and open-source
- End-to-end encryption, which means files can be encrypted on client devices before they are uploaded to the server, so even if someone steals your server, they can't read your files.
- Can be integrated with an online office suite (Collobora Online, OnlyOffice) so you can create and edit your doc, ppt, xls files directly from NextCloud.
- The App Store contains hundreds of apps to extend functionality (like calendar app, contacts app, note-taking app, video conferencing app, etc.).
- The sync client is available on Linux, macOS, Windows, iOS, and Android
Prerequisite
NextCloud is a web application developed in PHP, therefore it is necessary to have a web server available. You can follow this guide to install your web server on Linux.
Here we will see how to install Nextcloud on Ubuntu 20.04.
Download Nextcloud on Ubuntu
From your server, download the NextCloud zip archive. The latest stable release is 19.0.1 at the time of writing this article. Go to https://nextcloud.com/install to retrieve the download link and from your terminal, run the following command (to be adapted according to the version):
wget https://download.nextcloud.com/server/releases/nextcloud-19.0.1.zip
Dézipper tout ça avec la commande suivante :
sudo apt install unzip
sudo unzip nextcloud-19.0.1.zip -d /var/www/
Ici on balance le tout directement dans le répertoire /var/www/ qui est notre serveur web. On change les droits pour qu’Apache puisse écrire dans le répertoire :
sudo chown www-data:www-data /var/www/nextcloud/ -R
On est pas mal, maintenant passons à la création de la base de données
Créer une base de données et un utilisateur spécifique pour Nextcloud sur MariaDB
Si vous avez suivi mes précédents guides, alors vous avez vu que j’utilise MariaDB pour la partie SQL. On va ici créer l’utilisateur et la base de données que nous utiliserons pour Nextcloud.
Depuis votre terminal, lancer mysql en admin :
sudo mysql
Créez ensuite une base de données pour Nextcloud. Sur ce tutoriel j’appelle la base de données nextcloud. Vous pouvez utiliser le nom de votre choix.
create database nextcloud;
Créez l’utilisateur de la base de données. Encore une fois, vous pouvez utiliser votre nom préféré pour cet utilisateur. Remplacez votre_mot_de_passepar votre mot de passe préféré.
create user nextclouduser@localhost identified by 'votre_mot_de_passe';
Accordez à cet utilisateur tous les privilèges sur la base de données nextcloud
:
grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';
Un petit « Flush Privileges » pour appliquer les changements :
flush privileges;
Créez un hôte virtuel Apache pour Nextcloud
On veut faire les choses propres, donc on va utiliser notre nom de domaine.
Personnellement, je passe par Infomaniak pour l’achat de mes noms de domaine, mais peut importe le registar, cela fonctionnera de la même manière.
Pour cela, on va créer un hôte virtuel apache avec notre domaine ou sous domaine. Créer un fichier nextcloud.conf dans /etc/apache2/sites-available/
sudo nano /etc/apache2/sites-available/nextcloud.conf
Copiez et collez le texte suivant dans le fichier. Remplacez nextcloud.example.com
par votre propre sous-domaine préféré. N’oubliez pas de créer un enregistrement DNS A pour ce sous-domaine dans votre éditeur de zone DNS.
<VirtualHost *:80>
DocumentRoot "/var/www/nextcloud"
ServerName nextcloud.example.com
ErrorLog ${APACHE_LOG_DIR}/nextcloud.error
CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined
<Directory /var/www/nextcloud/>
Require all granted
Options FollowSymlinks MultiViews
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
Satisfy Any
</Directory>
</VirtualHost>
Sauvegarder le fichier puis activer ce virtual host via la commande suivante :
sudo a2ensite nextcloud.conf
Lancer la commande suivante pour activer les modules Apache nécessaires au bon fonctionnement de Nextcloud :
sudo a2enmod rewrite headers env dir mime setenvif ssl
Vérifier votre configuration Apache :
sudo apache2ctl -t
Si vous avez le droit à un « syntax OK » alors tous les feux sont aux vert, continuer en redémarrant Apache pour que vos modifications prennent effets :
sudo systemctl restart apache2
Installer et activer les modules PHP
Lancer la commande suivante pour installer les modules PHP nécessaires au bon fonctionnement de NextCloud (y’a du monde !):
sudo apt install php-imagick php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp
Relancer Apache
sudo systemctl reload apache2
Activer le certificat HTTPS pour NextCloud
Avec les étapes effectuées précédemment, vous devriez déjà avoir accès à Nextcloud via votre domaine ou sous domaine. (Si ce n’est pas le cas, vérifier votre firewall ou redirection de port).
Cependant, pour le moment, votre site n’inspire pas confiance puisque aucun certificat n’est installé. Nous verrons ici comment ajouter un certificat Let’s Encrypt à votre sous-domaine Nextcloud.

Alors avant de commencer à entrer des informations sensibles, on va installer un certificat. Lancer la commande suivante :
sudo apt install certbot python3-certbot-apache
Puis, réclamer votre certificat Let’s Encrypt via la commande suivante (En modifiant les informations en rouge par les votre)
sudo certbot --apache --agree-tos --redirect --staple-ocsp --email votre_email@example.com -d nextcloud.example.com
Certbot ne peut pas ajouter automatiquement l’en-tête HSTS dans le fichier de configuration Apache pour Nextcloud. Si vous souhaitez activer HSTS (HTTP Strict Transport Security), modifiez le fichier.
sudo nano /etc/apache2/sites-enabled/nextcloud-le-ssl.conf
Nous pouvons ensuite ajouter la ligne suivante dans le bloc serveur SSL pour activer l’en-tête HSTS.
Header always set Strict-Transport-Security "max-age=31536000"
Puis fermer et sauvegarder votre fichier de configuration Apache.
Relancer Apache pour que les changements soit pris en compte. Vous devriez maintenant pouvoir accéder à NextCloud en HTTPS sans problème.
sudo systemctl reload apache2
Terminer l’installation
Maintenant, depuis votre domaine / sous-domaine, vous allez pouvoir terminer l’installation de NextCloud. Vous allez devoir créer un compte admin, entrer le chemin du dossier de données Nextcloud, entrer les détails de la base de données que vous avez créés, ect…
Le dossier de données est l’endroit où les fichiers des utilisateurs sont stockés. Pour des raisons de sécurité, il est préférable de placer le répertoire de données en dehors du répertoire Web Nextcloud. Ainsi, au lieu de stocker les fichiers des utilisateurs sous /var/www/nextcloud/data/
, nous pouvons le changer en /var/www/nextcloud-data
que vous allez pouvoir créer avec la commande suivante:
sudo mkdir /var/www/nextcloud-data
On pose ensuite les droits correctement sur ce répertoire :
sudo chown www-data:www-data /var/www/nextcloud-data -R
Maintenant, vous pouvez rentrer tout ce qu’il faut pour configurer NextCloud :

Bravo ! Vous avez maintenant un serveur Nextcloud installé et prêt à l’emploi ! Dans la suite de cet article, vous trouverez quelques petits tips dont j’ai eu besoin.
Quelques astuces pour Nextcloud
Configurer les notifications mails NextCloud
Ne tarder pas trop à configurer votre serveur mail dans Nextcloud. Il vous sera utile pour bien des choses et notamment la récupération de mot de passe !
Tout ce passe depuis l’interface web, dans la partie Administration > Paramètres de base

Modifier un mot de passe NextCloud via le terminal
Vous avez oublié votre mot de passe et vous n’avez pas encore configuré les notifications mail pour le récupérer ? Pas de panique, depuis un terminal, vous pouvez exécuter une commande qui vous permettra de modifier le mot de passe d’un utilisateur. Remplacement simplement avec le nom de votre utilisateur :
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword identifiant_nextcloud
Augmenter le PHP Memory Limit
Si vous jetez un coup d’oeil dans la partie Administration > Vue d’ensemble de NextCloud, vous verrez qu’il y a plein de petites recommandations.

Nous allons vois ici comment augmenter le PHP Memory limit qu’il est conseillé d’avoir à 512Mo minimum.
PHP à une memory_limit de 128MB par défaut. Pour changer cette valeur, il est nécessaire d’éditer le fichier php.ini, c’est ce que nous allons faire ici :
sudo nano /etc/php/7.4/apache2/php.ini
Puis, trouver la ligne suivante :
memory_limit = 128M
Changer simplement sa valeur puis sauvegarder le fichier
memory_limit = 512M
Sous Ubuntu, vous pouvez également changer cette valeur, sans avoir à ouvrir le fichier, avec cette « simple » commande :
sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/7.4/apache2/php.ini
Pour que cela prenne effet, redémarrer Apache :
sudo systemctl reload apache2
Attention, si vous utilisez FPM, alors il est nécessaire également de changer la valeur dans le php.ini de php-fpm. Pour cela, même exercice que tout à l’heure, mais pas au même endroit :
sudo nano /etc/php/7.4/fpm/php.ini
Find the memory_limit
parameter and change the value. After saving the file, reload PHP-FPM for the change to take effect.
sudo systemctl reload php7.4-fpm.service
Configurer Redis Cache pour NextCloud
Toujours depuis les paramètres d’administration et la vue d’ensemble, vous pouvez avoir le message suivant :
Aucun cache mémoire n’est configuré. Si possible, configurez un « memcache » pour améliorer les performances.

Il est recommandé d’activer une solution de cache pour améliorer les performances. Ici nous utiliserons Redis. Lancer la commande suivante pour installer Redis depuis le repository Ubuntu :
sudo apt install redis-server
Si besoin, vous pouvez vérifier la version de redis via la commande suivante :
redis-server -v
Voici un exemple de ce qui devrait s’afficher :
Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=636cde3b5c7a3923
Vous pouvez maintenant vérifier si Redis est correctement installer via la commande suivante :
systemctl status redis
Ce qui devrait donner un résultat de ce type :
tech2tech@tech2tech:~$ systemctl status redis
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: ena>
Active: active (running) since Mon 2022-07-20 21:09:39 UTC; 12s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Main PID: 2571521 (redis-server)
Tasks: 4 (limit: 4621)
Memory: 1.9M
CGroup: /system.slice/redis-server.service
└─2571521 /usr/bin/redis-server 127.0.0.1:6379
Vous pouvez quitter en appuyant sur la touche « Q »
Si malgré tout Redis n’est pas démarré, vous pouvez le lancer via la commande suivante :
sudo systemctl start redis-server
Pour activer le démarrage du serveur au boot du serveur, vous pouvez lancer la commande suivante :
sudo systemctl enable redis-server
Pour configurer Redis correctement, il est nécessaire d’installer une extension qui servira d’interface entre php et redis, lancer la commande suivante :
sudo apt install php-redis
Vous pouvez vérifier que l’extension est bien installée et activée via la commande suivante :
php --ri redis
Ce qui devrait vous afficher quelque chose comme ça :

Si l’extension n’est pas activée, lancer la commande suivante :
sudo phpenmod redis
Maintenant, il est nécessaire d’éditer la configuration de Nexcloud pour lui dire d’utiliser Redis pour le memcache. On edite le fichier de config :
sudo nano /var/www/nextcloud/config/config.php
Puis on y ajouter ces lignes :
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),

Sauvegarder le fichier puis relancer Apache et php-fpm
sudo systemctl restart apache2 php7.4-fpm
Maintenant, vous ne devriez plus avoir le message d’information concernant le cache !
Adding Missing Indexes
La mémoire c’est OK, le cache c’est OK, maintenant il reste encore quelques messages concernant la base de données et quelques index manquants.

La base de données a quelques index manquants. L'ajout d'index dans de grandes tables peut prendre un certain temps. Elles ne sont donc pas ajoutées automatiquement. En exécutant "occ db:add-missing-indices", ces index manquants pourront être ajoutés manuellement pendant que l'instance continue de tourner. Une fois les index ajoutés, les requêtes sur ces tables sont généralement beaucoup plus rapides.
Alors nous allons devoir ajouter nous-mêmes ces index manquants. Pour ça, aller dans le répertoire de nexcloud :
cd /var/www/nextcloud/
Lancer la commande suivante qui devrait ajouter les index manquants :
sudo -u www-data php occ db:add-missing-indices

Maintenant si vous rafraîchissez votre page « Vue d’ensemble » il ne devrait plus y avoir d’erreur concernant les index manquants.
Conversion to Big Int
On termine avec les colonnes non converties en Big Int. Encore une fois, vous avez peut-être cet avertissement dans votre instance Nextcloud :

Certaines colonnes de la base de données n'ont pas été converties en big int. Changer le type de colonne dans de grandes tables peu prendre beaucoup de temps, elles n'ont donc pas été converties automatiquement. En exécutant 'occ db:convert-filecache-bigint' ces changements en suspens peuvent être déclenchés manuellement. Cette opération doit être exécutée pendant que l'instance est hors ligne. Pour plus d'information, consulter la page de la documentation.
Alors nous allons avoir besoin de convertir manuellement ces colonnes. Rendez-vous dans répertoire de Nexcloud :
cd /var/www/nextcloud/
Passez Nextcloud en mode maintenance pour éviter les changements par vos utilisateurs pendant cette conversion :
sudo -u www-data php occ maintenance:mode --on
Maintenant, lancer la commande suivante pour convertir les colonnes :
sudo -u www-data php occ db:convert-filecache-bigint
Vous pouvez maintenant retirer le mode maintenance
sudo -u www-data php occ maintenance:mode --off
Maintenant vous ne devriez plus avoir d’avertissements concernant Big Int.
Supprimer le dossier « index.php » dans l’url de NextCloud
Ajouter la ligne suivante dans le fichier config.php de Nextcloud :
'htaccess.IgnoreFrontController' => true,
Voilà , je pense qu’on a fait le tour, maintenant vous pouvez utiliser Nextcloud et stocker vos fichiers sur votre serveur personnel.
N’hésitez pas à utiliser l’application Nextcloud qui vous permettra de synchroniser vos fichiers avec