Linux

Comment installer NextCloud sur Ubuntu 20.04

Nextcloud est une solution de stockage et de partage de fichiers en ligne.  C’est un logiciel libre, distribué gratuitement et installable sur son propre serveur. Nous verrons dans ce guide, comment installer NextCloud sur un serveur Ubuntu 20.04.

Fonctionnalités de NextCloud

  • Gratuit et open-source
  • Chiffrement de bout en bout, ce qui signifie que les fichiers peuvent être chiffrés sur les appareils clients avant d’être téléchargés sur le serveur, donc même si quelqu’un vole votre serveur, il ne peut pas lire vos fichiers.
  • Peut être intégré à une suite bureautique en ligne ( Collobora Online , OnlyOffice) afin que vous puissiez créer et éditer vos fichiers doc, ppt, xls directement à partir de NextCloud.
  • L’App Store contient des centaines d’applications pour étendre les fonctionnalités (comme l’application de calendrier, l’application de contacts, l’application de prise de notes, l’application de vidéoconférence, etc.).
  • Le client de synchronisation est disponible sur Linux, macOS, Windows, iOS et Android

Prérequis

NextCloud est une application web développée en PHP, il est donc nécessaire d’avoir à disposition un serveur web. Vous pouvez suivre ce guide pour installer votre serveur web sur Linux.

Installation de LAMP (Serveur Web) sur Ubuntu 20.04

Ici nous verrons comment installer Nextcloud sur Ubuntu 20.04.

Téléchargez Nextcloud sur Ubuntu

Depuis votre serveur, télécharger l’archive zip NextCloud. La dernière version stable est la 19.0.1 au moment de la rédaction de cet article. Allez sur https://nextcloud.com/install pour récupérer le lien de téléchargement et depuis votre terminal, exécuter la commande suivante (à adapter en fonction de la 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 [email protected] -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 2020-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 plusieurs périphériques.

Mikaël GUILLERM

Administrateur Système et Autoentrepreneur depuis 2009 pour la société zerobug. Je partage mes connaissances, problèmes et solutions à travers articles ou tweets !

Articles similaires

9 commentaires

  1. Hello
    J’ai tenté l’installation sur unz VM avec Ubuntu Server sur mon synology.
    Ca ne fonctionne pas, j’ai sans arret la page Apache qui s’affiche et je n’arrive pas à utiliser la VM avec le reverse proxy…
    Probleme, c’est que j’ai maintenant modifié pas mal de chose et je sais plus trop quoi faire…

  2. Je pense trouver une solution :
    1 bien configuré le virtualhost
    2 dans /etc/apache2/sites-available vous utilisez cette commande sudo a2dissite 000-default.conf
    3 vous utilisez sudo a2ensite nextcloud.conf
    4 vous allez mettre votre servername dans la barre de recherche

    J’ai eu à peu près ces mêmes problèmes.

    1. Bonjour
      J’ai pas tout compris à votre explication dsl…
      Comment bien configurer le vhost ?
      servername ? Le nom de la machine ? Genre « ubuntu-server » ?

      1. Pour bien configurer le vhost,
        Vous copiez la config vhost qui se trouve sur le site et vous mettez votre nom de domaine si vous en avez. le chemin > /etc/apache2/sites-available/nextcloud.conf
        Normalement, ça devrait marcher.

        1. Mon domaine doit pointer sur une IP, en l’occurence sur celle de ma box. Et mon IP redirige vers un NAS sur DSM.
          Ce que je veux c’est qu’il redirige vers la machine virtuelle présente sur le NAS.

          Actuellement :
          mondomaine.fr -> Pointe vers DSM (via DDNS)
          Ce que j’aimerai :
          cloud.mondomaine.fr -> Nextcloud sur la VM de DSM

Répondre à Mouhamed Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page