Ubuntu 18.04 LTS – Installation de Nextcloud 13 avec Nginx, PHP7-FPM, MariaDB et SSL/TLS

Nextcloud est un fork du célèbre ownCloud, solution vous permettant de créer votre propre cloud auto-hébergé et ainsi de stocker et synchroniser vos fichiers, vos contacts, votre agenda et vos contenus multimédias directement sur votre serveur. Vous pourrez alors accéder à toutes ces informations directement depuis votre navigateur web ou votre mobile via une application dédiée.

Fin avril 2016, Frank Karlitschek, cofondateur de ownCloud Inc, a annoncé son départ de la société, en mettant en cause, des dissensions internes, liées en partie à la stratégie de la société, mais également à la double licence du projet, qui ne favorise guère la participation de la communauté.

Frank Karlitschek et Niels Mache, patron de Struktur AG (connu pour l’offre collaborative Spreed.ME), rebootent aujourd’hui cette initiative sous la forme d’une nouvelle société et d’un nouveau projet : Nextcloud.

Ce fork d’ownCloud s’intégrera avec la plate-forme Spreeautd.ME et proposera un modèle plus ouvert pour la communauté. Les contrats de licence imposés aux contributeurs seront éliminés de cette nouvelle initiative, qui se veut plus transparente vis-à-vis du monde Open Source. L’objectif est de rééquilibrer la balance entre communauté et aspects commerciaux.

Nextcloud


Les principales fonctionnalités de Nextcloud sont :

  • Synchronisation de fichiers entre différents ordinateurs (clients dédiés multi-plateformes)
  • Stockage sécurisé (chiffrage des fichiers) et ajout de services externes (Amazon, Google, Dropbox, NFS, FTP, SFTP, WebDAV…)
  • Authentification LDAP/Active Directory, Kerberos et Shibboleth/SAML 2.0
  • Partage de fichiers entre utilisateurs ou publiquement
  • Éditeur de documents en ligne avec la suite Collabora Online (basée sur OpenOffice)
  • Visionneuse de documents en ligne (PDF, Open document…)
  • Gestion de différents workflows
  • Calendrier (CalDAV) et gestionnaire de contacts (CardDAV)
  • Conférences audio et vidéo sécurisées (WebRTC) avec possibilité de partage d’écran
  • Galerie d’images
  • … et de nombreuses fonctionnalités supplémentaires grâce aux applications Nextcloud.

Nextcloud peut être installé sur n’importe quel serveur supportant une version récente de PHP et supportant MariaDB (base de données par défaut), MySQL ou PostgreSQL.


Si vous ne possédez pas de serveur dédié ou de nom de domaine, je vous conseille les VPS d’A2 Hosting. Mon Nextcloud est hébergé chez eux, les serveurs sont rapides (basés en France), fiables et surtout très abordables. Les formules « Entry » ou « Mid » sont amplement suffisantes si votre cloud sera limité à quelques utilisateurs.


1 – Nginx

Notre choix se portera sur le serveur HTTP Nginx pour une question de performances. Nginx est reconnu pour ses hautes performances, sa stabilité, son ensemble de fonctionnalités, sa configuration simple ainsi que sa faible consommation en ressources.

1.1 – Installation

Installez le paquet nginx :

1.2 – Configuration

Modifiez les directives suivantes du fichier de configuration Nginx /etc/nginx/nginx.conf :

  • worker_processes 8; : l’un des paramètres à ajuster immédiatement est le worker_processes. Pour profiter pleinement de la puissance de votre serveur, il est recommandé de mettre autant de worker_processes que de cœurs disponibles sur votre serveur. Pour connaître le nombre de cœurs sur votre serveur, il suffit de lancer la commande :
  • server_tokens off; : pour des raisons de sécurité, il est recommandé de désactiver l’envoi d’informations telles que le numéro de version de votre Nginx. Pour cela, décommentez cette directive dans le bloc http.

2 – Installation et téléchargement de Nextcloud

  • Téléchargez la dernière version de Nextcloud :
  • Téléchargez le SHA256 et vérifiez l’intégrité de l’archive téléchargée :
    La dernière commande doit retourner sur la sortie standard :
  • Vérifiez la signature PGP et la provenance de l’archive téléchargée :
    La dernière commande doit retourner sur la sortie standard :
  • Décompressez l’archive Nextcloud :
  • Supprimez les fichiers et signatures téléchargés :

3 – Droits Unix

Lors du déploiement basique d’un serveur HTTP, l’utilisateur sous lequel fonctionne ce serveur (Apache, Nginx…) est la plupart du temps www-data, nobody ou apache. Cela signifie que si plusieurs sites existent sous la même instance de Nginx, tous utilisent le même utilisateur. Or si l’un des sites s’avère corrompu par un utilisateur malveillant alors l’assaillant peut profiter pleinement de tous les droits de l’utilisateur sous lequel tourne le serveur web. Tous les sites s’avèrent donc vulnérables.

Pour des raisons évidentes de sécurité, il est donc recommandé de cloisonner ces utilisateurs et d’avoir un utilisateur dédié à la gestion du dossier nextcloud. Cet utilisateur aura des droits aussi restreints que possible à ce répertoire.

Par défaut, les fichiers de Nextcloud possèdent les permissions suivantes :

  • répertoires : 755 (permission de lecture, d’écriture et d’exécution pour le propriétaire et permission de lecture et d’exécution pour le groupe et les autres)
  • fichiers : 644 (permission de lecture et d’écriture pour le propriétaire et permission de lecture uniquement pour le groupe et les autres).

Nous allons donc modifier le propriétaire du répertoire /var/www/nextcloud et l’attribuer à un nouvel utilisateur dédié : nextcloud.

Par ailleurs, Nginx est lancé sous l’utilisateur www-data et doit avoir accès en lecture au répertoire /var/www/nextcloud pour lire les ressources statiques (HTML, CSS, JS, etc.). Nous allons donc attribuer le répertoire /var/www/nextcloud au groupe www-data.

Enfin nous retirerons toutes les permissions de ce répertoire aux autres utilisateurs.

  • Créez un utilisateur nextcloud :
  • Modifiez le propriétaire et le groupe du répertoire /var/www/nextcloud :
  • Retirez toutes les permissions aux autres utilisateurs :

4 – Les modules PHP

Nextcloud nécessite certains modules PHP pour fonctionner :

  • Modules obligatoires :
    • PHP ctype
    • PHP dom
    • PHP GD
    • PHP iconv
    • PHP JSON
    • PHP libxml (version égale ou supérieure à 2.7.0)
    • PHP mb multibyte
    • PHP posix
    • PHP SimpleXML
    • PHP XMLWriter
    • PHP zip
    • PHP zlib
    • PHP pdo_mysql (connecteur pour MySQL/MariaDB)
  • Modules hautement recommandés :
    • PHP curl : nécessaire pour certaines fonctionnalités de Nextcloud comme l’authentification HTTP
    • PHP fileinfo : améliore les performances d’analyse des fichiers
    • PHP bz2 : nécessaire pour l’installation et l’extraction des applications Nextcloud
    • PHP intl : améliore les performances sur l’internationalisation et les opérations sur caractères non ASCII
    • PHP openssl : nécessaire pour accéder aux ressources HTTPS.

Installez les paquets suivants :

Vous devez disposer d’une version de PHP égale ou supérieure à 5.6.
Pour connaître la version installée sur votre système, tapez la commande suivante :

5 – PHP-FPM

Le module PHP-FPM permet la communication entre le serveur Nginx et PHP, basée sur le protocole FastCGI. Ce module, écoutant sur le port 9000 par défaut ou sur un socket UNIX, permet notamment l’exécution de scripts PHP dans un processus indépendant de Nginx avec des UID et GID différents. Il sera alors possible, dans le cas de la gestion de plusieurs applications sur un même serveur, de créer et configurer un groupe (appelé aussi pool) par application. Un pool définit notamment le UID/GID des processus PHP et le nombre de processus minimum, maximum ou encore le nombre de processus en attente à lancer.

5.1 – Installation

Installez le paquet php-fpm :

5.2 – Création du pool nextcloud

Créez le pool dédié à Nextcloud en créant le fichier de configuration suivant : /etc/php/7.2/fpm/pool.d/nextcloud.conf

Certaines valeurs sont très arbitraires et seront, en fonction des ressources disponibles sur votre serveur et celles que vous souhaiterez dédier à votre Nextcloud, différentes d’une configuration à l’autre. Cependant ces différentes directives respectent certaines conditions :

  • [nextcloud] : nom du pool. Il est possible de créer plusieurs pools par fichier. Chaque pool doit commencer par cette directive.
  • listen : interface d’écoute des requêtes. Les syntaxes acceptées sont ADRESSE_IP:PORT (exemple : listen = 127.0.0.1:9000) et /path/to/unix/socket (exemple : listen = /var/run/nextcloud.sock). Le socket est représenté comme un simple fichier sur le système et permet d’interfacer des processus entre eux sans passer par la couche réseau du système, ce qui est inutile lorsque Nginx et PHP-FPM sont hébergés sur le même serveur. Je vous conseille donc d’utiliser un socket.
  • listen.owner & listen.group : affecte l’utilisateur et le groupe au socket Unix si utilisé. Ces deux paramètres peuvent être associés au paramètre listen.mode qui définit les permissions du socket (660 par défaut). Il est important que Nginx ait les droits de lecture sur le socket Unix.
  • user & group : utilisateur et groupe sous lesquels le pool de processus sera exécuté. Cet utilisateur et ce groupe doivent bien sûr exister sur votre système et surtout accéder aux fichiers PHP de votre Nextcloud. Cela veut dire aussi que chaque fichier et répertoire créé dans Nextcloud appartiendra à cet utilisateur et à ce groupe. Comme nous l’avons vu dans le chapitre dédié aux droits Unix, chaque fichier devra appartenir à l’utilisateur nextcloud et au groupe www-data.
  • pm : directive acceptant les 3 valeurs suivantes : static, dynamic et ondemand.
    • static : les processus, au nombre de pm.max_children, sont continuellement actifs (quelle que soit la charge et l’affluence de votre Nextcloud) et sont susceptibles de consommer de la mémoire inutilement. Cette directive est recommandée si Nextcloud est l’unique application de votre serveur.
    • dynamic : le nombre de processus fils pourra varier suivant la charge. Cependant, nous gardons le contrôle sur le nombre de processus fils à créer au démarrage du serveur, le nombre de processus maximum, en attente de requêtes, etc. Les directives suivantes deviennent obligatoires : pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. Cette directive est recommandée si vous avez plusieurs pools avec un fort trafic (plus de 10 000 requêtes/jour).
    • ondemand : aucun processus fils n’est lancé au démarrage du serveur, les processus s’activent à la demande et auront une durée de vie définie par la directive pm.process_idle_timeout. L’intérêt de cette directive est de libérer de la mémoire en cas de faible charge mais celle-ci peut légèrement augmenter le temps de réponse de votre Nextcloud. Cette directive est recommandée si vous avez plusieurs pools avec potentiellement une faible affluence.

    Sachant que l’utilisation de Nextcloud est personnelle et souvent limitée à quelques utilisateurs, nous choisirons et détaillerons ici la directive ondemand.

  • pm.max_children : nombre maximum de processus fils. La valeur du paramètre pm.max_children varie d’un système à l’autre. Voici la procédure à réaliser pour déterminer la valeur de ce paramètre :
    • Arrêtez le service php-fpm :

    • Affichez la mémoire disponible (colonne available) sur votre système :

      Sur cet exemple, le système dispose de 3539Mo de RAM disponible. La quantité de RAM que vous souhaitez allouer au maximum à Nextcloud dépend de vous et des autres services actifs que vous disposez sur ce même système. Dans notre exemple, nous partirons du principe que nous souhaitons allouer au maximum 1024Mo de RAM à Nextcloud.

    • Affichez la mémoire utilisée par un processus fils php-fpm :

    • Déterminez le nombre de pm.max_children en appliquant la méthode de calcul suivante :

      pm.max_children = mémoire allouée (en Mo) / mémoire utilisée par un processus fils
      Dans notre exemple : 1024 / 18 = 56

    • Éditez à nouveau le fichier /etc/php/7.2/fpm/pool.d/nextcloud.conf et ajustez la valeur du paramètre pm.max_children :

  • pm.process_idle_timeout : durée en secondes avant qu’un processus fils inactif soit détruit.
  • pm.max_requests : nombre de requêtes que chaque processus fils devra exécuter avant d’être détruit. Cette valeur ne doit pas être trop élevée afin de contourner d’éventuelles fuites mémoires, ni trop faible pour ne pas solliciter régulièrement le CPU à chaque création de processus fils. 500 reste une valeur recommandée.
  • env[*] : variables d’environnement nécessaires à PHP-FPM.

Redémarrez le service php-fpm afin d’activer le nouveau pool nextcloud :

5.3 – Configuration du service php-fpm

Enfin, il est nécessaire de spécifier à PHP-FPM les permissions de chaque fichier ou répertoire nouvellement créé dans votre Nextcloud et ainsi respecter les permissions que nous avions spécifiées dans le chapitre des droits Unix. Pour cela :

  • Tapez la commande suivante :
    Il se peut que l’éditeur de texte par défaut de votre système ne soit pas celui que vous avez l’habitude d’utiliser. Si c’est le cas, tapez la commande suivante et choisissez l’éditeur par défaut de votre système :
  • Ajoutez les lignes suivantes :
  • Réactivez le service php7.2-fpm :

6 – Création de la base de données sous MariaDB

6.1 – Installation de MariaDB

Installez les paquets suivants :

6.2 – Configuration de MariaDB

Lancez le script de configuration (recommandé) :

6.3 – Création de la base de données nextcloud

  • Tout d’abord, connectez-vous sur l’interface MySQL avec l’utilisateur root et grâce au mot de passe saisi lors de la configuration de MariaDB :

  • Créez la base de données nextcloud :

    Tout comme pour la gestion du répertoire nextcloud et pour plus de sécurité, vous allez tout d’abord créer un utilisateur MySQL nextcloud dédié à la base de données nextcloud, renseigner un mot de passe et ensuite lui donner les droits sur cette base de données :

7 – Nom de domaine & virtual host

Si vous souhaitez accéder à votre Nextcloud de l’extérieur (et non seulement via localhost), il est nécessaire de faire pointer votre domaine ou sous-domaine vers l’IP de votre serveur. Pour cela, commencez par modifier les règles DNS dans l’interface administrateur du fournisseur de votre nom de domaine.


  • Créez le fichier suivant /etc/nginx/sites-available/nextcloud et modifiez les lignes en surbrillance en fonction de votre configuration :
  • Activez le virtual host :
  • La nouvelle configuration sera prise en compte après redémarrage des services Nginx et PHP-FPM :

8 – SSL/TLS avec Let’s Encrypt

Let’s Encrypt est une autorité de certification libre, automatisée et ouverte. Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique SSL/TLS au moyen d’un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l’installation et le renouvellement des certificats pour la sécurisation des sites internet. En mai 2018, Let’s Encrypt a livré plus de 70 millions de certificats.

8.1 – Installation

Installez les paquets software-properties-common et certbot :

8.2 – Génération des certificats

Let’s Encrypt permet de générer de différentes façons plus ou moins automatisées un certificat. La méthode standalone permet de générer simplement un certificat. En revanche, celle-ci demande d’arrêter le serveur Nginx et ceci est valable à chaque renouvellement dudit certificat. Il existe aussi des plugins Apache et Nginx entièrement automatisés. Ces plugins mettent à jour automatiquement la configuration des virtual hosts mais le plugin Nginx est encore expérimental. Dans cet article, nous recommandons d’utiliser le plugin webroot pour Nginx qui permet de générer et renouveler son certificat sans interrompre le serveur Nginx.

Le plugin webroot crée un fichier temporaire /var/www/nextcloud/.well-known/acme-challenge dans le dossier racine de votre Nextcloud, celui-ci permettra aux serveurs de Let’s Encrypt de valider votre certificat en appelant ce fichier temporaire.

  • Générez votre certificat en remplaçant email@mondomaine.com et mondomaine.com par vos informations personnelles :
    Vous obtiendrez 4 fichiers dans le répertoire /etc/letsencrypt/live/cloud.mondomaine.com :

    • cert.pem : le certificat de votre domaine cloud.mondomaine.com
    • chain.pem : le certificat Let’s Encrypt
    • fullchain.pem : les certificats cert.pem et chain.pem combinés
    • privkey.pem : la clé privée du certificat.
  • SSL/TLS utilise un système de chiffrement asymétrique (comme RSA ou Diffie-Hellman) afin de sécuriser les échanges de vos flux. Par défaut, Nginx utilise une clé de 1048 bits. En augmentant la longueur de la clé à 4096 bits, vous augmenterez ainsi la sécurité de votre protocole SSL/TLS.

    Générez une nouvelle clé Diffie-Hellman (DH) de 4096 bits et attribuez-lui un minimum de permissions. La première commande peut prendre plusieurs heures :

  • Ajoutez ou modifiez les lignes en surbrillance dans votre virtual host (/etc/nginx/sites-available/nextcloud) en remplaçant les chemins des directives ssl_certificate, ssl_certificate_key, ssl_trusted_certificate et ssl_dhparam par l’emplacement de vos certificats et de la clé DH précédemment générés :

  • Rechargez votre configuration Nginx :

8.3 – Renouvellement automatique du certificat

Les certificats délivrés par Let’s Encrypt sont valides 90 jours. L’outil certbot fournit une option renew permettant de renouveler l’ensemble des certificats présents sur votre serveur si et seulement si ceux-ci expirent dans moins de 30 jours.

Nous allons créer une règle crontab où le script de renouvellement sera planifié pour exécution tous les lundis à 23h42. Les traces liées à l’exécution du script seront enregistrées dans un fichier /var/log/le-renew.log.

  • Éditez la crontab :
  • Ajoutez la ligne suivante :
  • Sauvegardez et quittez.

9 – HTTP2

Je vous conseille vivement d’activer le nouveau protocole HTTP2 qui augmentera la sécurité et la rapidité de votre Nextcloud.

HTTP2 permet notamment :

  • la compression des headers des requêtes et des réponses qui permet de réduire la bande passante lorsque les headers (comme les cookies) sont similaires
  • le multiplexage des requêtes au serveur consistant à faire passer de multiples informations via un seul tuyau de transmission. Ainsi, on économise les multiples connexions entre le client et le serveur. Les requêtes, quant à elles, sont effectuées simultanément par le navigateur. Les requêtes ne se suivent donc plus les unes derrière les autres (HTTP1) et les plus prioritaires (CSS par exemple) ne sont plus bloquées par les moins prioritaires (images par exemple)
  • le push des ressources du serveur au navigateur. Désormais, le serveur pourra envoyer l’ensemble des ressources référencées dans une même page (CSS, JS…), avant même que le navigateur n’ait analysé celle-ci.

L’activation du protocole HTTP2 est très simple et consiste en l’ajout de la directive http2 dans votre virtual host :

Une fois la modification effectuée, n’oubliez pas de recharger votre configuration Nginx :

10 – Nextcloud

Vous risquez d’obtenir un timeout lors du premier lancement de Nextcloud dans votre navigateur (dû aux processus en arrière-plan permettant la création du filesystem pour votre utilisateur, la création du schéma de la base données Nextcloud, etc.). Il est donc nécessaire d’augmenter le temps de réponse dans la configuration de PHP-FPM et Nginx.

  • Éditez le fichier /etc/php/7.2/fpm/pool.d/nextcloud.conf et ajoutant le paramètre request_terminate_timeout (valeur en secondes) :
  • Éditez le virtual host /etc/nginx/sites-available/nextcloud et ajoutant le paramètre fastcgi_read_timeout (valeur en secondes) :

La nouvelle configuration sera prise en compte après redémarrage des services Nginx et PHP-FPM :

Lancez votre navigateur et rendez-vous à l’adresse suivante : http://cloud.mondomaine.com/.

Configurez votre compte administrateur et les informations de votre base de données nécessaires à Nextcloud :

Vérifiez la force de votre protocole SSL/TLS en vérifiant votre Nextcloud sur SSL Labs. Avec une telle configuration, vous devriez obtenir un A+.

11 – Améliorer les performances de votre Nextcloud avec le cache

11.1 – Cache PHP : OPcache

OPcache (qui signifie Optimizer Plus Cache) est introduit depuis la version 5.5.0 de PHP. Il sert à cacher l’opcode de PHP, c’est-à-dire les instructions de bas niveau générées par la machine virtuelle PHP lors de l’exécution d’un script. Autrement dit, le code pré-compilé est stocké en mémoire. Cela évite ainsi l’étape de compilation à chaque requête PHP. De plus, OPcache va optimiser l’exécution du code afin d’en améliorer les performances.

  • Éditez le fichier /etc/php/7.2/fpm/php.ini, décommentez et modifiez les lignes suivantes dans la section [opcache] :
  • La nouvelle configuration sera prise en compte après redémarrage du service PHP-FPM :

11.2 – Cache de données : APCu & Redis

APCu permet notamment de mettre en cache les variables PHP et de les stocker en mémoire vive. Redis est un système de gestion de base de données NoSQL avec un système de clef-valeur scalable (s’adapte à la charge). Une des principales caractéristiques de Redis est de conserver l’intégralité des données en RAM. Cela permet d’obtenir d’excellentes performances en évitant les accès disques, particulièrement coûteux.

  • Installez les paquets APCu et Redis :
  • Connectez-vous sous l’utilisateur nextcloud afin de pouvoir modifier le fichier de configuration de votre Nextcloud :
  • Ajoutez les lignes suivantes dans le fichier /var/www/nextcloud/config/config.php :
  • Revenez sous votre super-utilisateur :
  • La nouvelle configuration sera prise en compte après redémarrage du service PHP-FPM :

12 – Améliorer la sécurité de votre Nextcloud avec Fail2ban

Développé en langage Python, Fail2Ban est un outil permettant d’analyser des fichiers de logs et de déclencher des actions si certaines choses suspectes sont détectées. Fail2ban est capable de détecter des connexions non autorisées et de bannir (via iptables) l’adresse IP de l’attaquant. Les attaques de type brute force (tests de différentes combinaisons nom d’utilisateur / mot de passe) seront ainsi bloquées.

Fail2Ban se base sur un système de prisons (jails) que l’on peut définir, activer ou désactiver dans un simple fichier de configuration.

Fail2ban écoutera les logs générés par Nextcloud. Si Fail2ban détecte plus de 3 tentatives d’accès frauduleuses provenant d’une même IP sur la page de login, celui-ci bloquera automatiquement cette IP pour une durée que nous préciserons dans le fichier de configuration.

  • Connectez-vous sous l’utilisateur nextcloud afin de pouvoir modifier le fichier de configuration de votre Nextcloud :
  • Activez les logs en ajoutant les lignes suivantes dans le fichier de configuration de Nextcloud /var/www/nextcloud/config/config.php :
    Le paramètre log_rotate_size permet d’activer la rotation des logs et limite la taille maximale du fichier de log. Dans cet exemple, lorsque le fichier atteindra 100 Mo (104857600 = 100 * 1024 * 1024 bytes), un nouveau fichier sera créé et l’ancien écrasé.
  • Revenez sous votre super-utilisateur :
  • Créez le répertoire /var/log/nextcloud et attribuez-le à l’utilisateur et au groupe nextcloud :
  • Installez le paquet fail2ban :
  • Créez le filtre /etc/fail2ban/filter.d/nextcloud.conf et ajoutez les lignes suivantes :
  • Créez le jail /etc/fail2ban/jail.local dédié à Nextcloud et ajoutez les lignes suivantes :
    Avec cette configuration, une machine sera bloquée pendant 60min (3600 secondes) au bout de 3 tentatives de connexion échouées.
  • Redémarrez le service fail2ban :

Vous pourrez vérifier périodiquement les IP bloquées dans le fichier de log de Fail2ban : /var/log/fail2ban.log.

Nextcloud sur Android…

Découvrez l’excellente application officielle Nextcloud sur Android qui vous permettra de synchroniser et de partager vos fichiers sur votre mobile.

NextcloudGmbHDisponible sur Google Play


Ubuntu Server 18.04 LTS (64bits)Nginx 1.14.0
PHP7-FPM 7.2.3
MariaDB 10.1.29
Nextcloud 13.0.2
Fail2ban 0.10.2

AuteurEdouard WATTECAMPS

54 réponses
  1. Yannick
    Yannick dit :

    Super Tuto !
    J’ai tout suivi et ça marche nickel. Petite remarque : le renouvellement automatique du certificat Let’s Encrypt serait pas mal à intégrer dans le tuto. Après ça se trouve assez facilement.
    Sinon j’ai un petit soucis mais ce n’est pas du à NextCloud enfin je pense. J’accède aussi à mes fichiers en Smb par depuis mon réseau local. Le problème c’est que lorsque je modifie un fichier avec Nextcloud, il l’attribut à Nexcloud:www-data. J’ai ajouté mes utilisateur smb à www-data mais les droits sont 644 donc je ne peux plus les modifier depuis smb. On ne peux pas forcer les droits 770 aux fichiers écrits par NextCloud?
    Sinon encore merci !

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Merci Yannick !
      Tu as raison, mon certificat est arrivé à expiration il y a peu et je me suis rendu compte que je n’avais pas traité cette partie, je vais l’ajouter.
      Concernant les droits des fichiers créés sous Nextcloud, tu dois modifier le umask du service php-fpm dont il est question au chapitre 5.3. C’est PHP qui définit les permissions de chaque dossier et fichier nouvellement créés. Pour les permissions 660 pour les fichiers et 770 pour les dossiers, le umask correspondant est 0007. Redémarre php-fpm pour prendre en compte la modification.
      Tiens moi au courant !
      W.

      Répondre
      • Yannick
        Yannick dit :

        Bonjour Edouard,
        Cela fonctionne très bien (du coup j’ai aussi appris comment fonctionne le umask).
        Du coup si tu n’as eu le problème c’est que tu n’as pas d’accès smb à tes fichiers ou c’est moi qui m’y suis pas pris correctement?
        Bonne journée.
        Yannick

        Répondre
  2. Hauser
    Hauser dit :

    Super tutoriel et de bonne qualité. Contrairement à d’autre tutoriel, celui ci utilise les derniers paquets à jours, l’optimisation de la performance est présente, bravo !

    Répondre
  3. Alain
    Alain dit :

    Bonjour,
    Excellent tuto.
    Je suis en train d’installer nextcloud sur debian 9 et je butte sur la création des certificats (chapitre 8.2).
    Une erreur apparait:
    – The following errors were reported by the server:

    Domain: srv-web.alc56.fr
    Type: unauthorized
    Detail: Invalid response from
    http://srv-web.alc56.fr/.well-known/acme-challenge/bpwKKma3MnsFM49oQ8tMijZIYfih9d9a9K-A55rF2Gw:
     »
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1&quot;

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A record(s) for that domain
    contain(s) the right IP address.
    J'ai crée un dynhost chez OVH. De plus j'ai mis en place une redirection vers l'ip du serveur.
    Lorsque je tape http://xx.xx.xx.xx, je suis redirigé vers ma livebox.
    Auriez-vous une idée?
    Merci.

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Bonjour Alain,

      Si je comprends bien, votre Nextcloud est installé sur un serveur chez vous ? Let’s Encrypt semble buter sur votre Livebox et ne pas réussir à atteindre votre serveur. Avez-vous ajouté une redirection de ports (80 et 443) vers l’IP locale de votre serveur (192.168.X.X) sur votre Livebox ?

      W.

      Répondre
  4. Julien
    Julien dit :

    Merci super Tuto !
    Installé sur un serveur Debian 9 pour une utilisation locale du calendrier. Et ça fonctionne (nait) nickel.
    Par contre depuis hier j’ai un bug. Je ne peux plus créer d’utilisateur dans l’interface d’administration. Lorsque j’essaye il ne se passe rien et si j’actualise la page, j’ai une erreur 500. Pour que cela fonctionne à nouveau je suis obligé de redémarrer le service php-fpm.
    Si quelqu’un a une piste…

    Répondre
  5. Olivier
    Olivier dit :

    Bravo pour ce tutoriel complet, et facile à suivre, et qui explique ce qu’on fait.
    Tout s’est déroulé comme sur des roulettes, et j’ai appris plein de truc.
    Vraiment du beau travail ! Merci.

    Répondre
    • Olivier
      Olivier dit :

      Juste une remarque: Peut-être prévenir le lecteur que la commande suivante prend plusieurs heures ^^° …

      sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

      Répondre
  6. Felder
    Felder dit :

    Bonjour , je suis confronté à un problème =s
    je me retrouve dans l’incapacité à redémarrer php7.0-fpm il me dit qu’il n’arrive pas à démarrer le FastCGI.
    Si quelqu’un à la solution je suis preneur Merci =)

    Répondre
  7. Sébastien
    Sébastien dit :

    Bonsoir.
    Super Tuto, j’ai tout suivi à la lettre et tout fonctionne correctement. J’aimerais pouvoir accéder à mon nextcloud depuis mon réseau interne, pouvez-vous m’éclaircir sur la façon de procéder. Merci

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Bonjour Sébastien,

      Pour accéder localement à votre Nextcloud, il est nécessaire de modifier votre virtual host et d’ajouter l’IP locale de votre serveur hébergeant Nextcloud aux directives server_name :

      De plus il est nécessaire d’ajouter l’IP locale de votre Nextcloud dans le fichier wp-config.php comme indiqué ici : https://help.nextcloud.com/t/adding-a-new-trusted-domain/26

      Puis redémarrez Nginx pour prendre en compte la nouvelle configuration :

      Et vous pourrez accéder à votre Nextcloud via http://192.168.0.42.

      W.

      Répondre
  8. Neco
    Neco dit :

    Hello there
    Many thanks for the guide. I have completed the installation. However, zimbra drive application added to the applications section is grayed enabled button.
    How do I activate the Enabled button?

    Répondre
  9. William Capié
    William Capié dit :

    Bonjour,
    J’apprécie fortement ce tutoriel très utile ! Bravo !
    Cependant, je bloque lors de la configuration de Let’s Encrypt car une erreur s’affiche. En fait j’ai écrit comme nom de serveur un nom au hasard, mais apparemment, il faut passer par des sites spéciaux… Du coup, plus généralement, comment fait-on pour avoir un nom de serveur (un url qui pointe vers notre serveur)? Que faut-il renseigner dans les paramètres de Free DNS (https://freedns.afraid.org/) par exemple (car apparemment on peut passer par ce site)? Qu’y a-t-il réellement à faire pour obtenir cet url en fait (parce que je crois il y a aussi une histoire avec des ports…)? Désolé, je suis vraiment peu qualifié pour ce genre de manip…

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Bonjour William,

      Comme vous le dites, vous ne pouvez pas spécifier un nom de domaine au hasard, il est nécessaire de passer par un provider qui référencera votre nom de domaine et qui vérifiera si celui-ci est disponible (Free DNS par exemple). Une fois inscrit et votre nom de domaine choisi, vous aurez dans votre interface d’administration une section Zone DNS où vous ajouterez une résolution DNS (vous ferez pointer votre domaine ou sous-domaine vers l’IP de votre serveur) :

      Enfin si votre serveur est hébergé chez vous, il est nécessaire de configurer votre box internet afin de rediriger les ports 80 et 443 de votre box vers l’IP interne de la machine hébergeant votre Nextcloud (en général de type 192.168.X.X).

      W.

      Répondre
  10. Gaby
    Gaby dit :

    Salut !

    Déjà un grand merci pour ce super tuto, c’est bien détaillé, bien expliqué, on apprend plein de choses, et le mieux c’est que tout se passe comme indiqué (c’est suffisamment rare pour être signalé :p).

    Bon par contre j’ai quand même un petit soucis sur un autre vhost depuis que j’ai ajouté nextcloud 🙁

    Pour la petite histoire je débute avec nginx, je suis un habitué d’apache mais vu que tout le monde s’accorde à dire que nginx est plus performant et plus sécurisé, j’ai fini par y jeter un œil. Pour me faire la main j’ai installé wiki.js et créé un vhost qui permet de rediriger les requêtes vers le serveur local.

    Voici le vhost en question :

    Rien d’incroyable, j’ai tout copié de la doc de wiki.js… Pour info la directive ssl_session_cache shared:SSL:50m; entrait en conflit avec celle du vhost de nextcloud, que j’ai donc mis à la même valeur. De plus j’ai purement et simplement désactivé l’écoute du port 80 pour les deux vhosts, mis à part ça tout est identique à ce qui est indiqué dans ce tuto.

    Le problème c’est que je ne peux plus accéder au wiki via wiki.domain.tld, mais ça marche depuis l’IP locale sur le port 3000. Le soucis vient bien de nginx, et si je désactive le vhost de nextcloud je peux à nouveau accéder au wiki via wiki.domain.tld. J’en déduis donc qu’il y a quelque part un truc qui plait pas au wiki, mais je n’arrive pas à savoir quoi -_-‘

    Donc si tu as une piste je suis preneur, je vais continuer à chercher de mon côté et je posterai la solution si j’en trouve une, mais je suis pas vraiment à l’aise avec pas mal de notions abordées dans le tuto (FPM, nginx, entre autres ^^).

    Voilou, je te remercie par avance pour ton aide, et te remercie encore une fois pour ce tuto !
    Gaby

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Bonjour Gaby,

      Merci pour tes encouragements 🙂
      La directive ssl_session_cache est partagée entre les différents vhosts si celle-ci est nommée de la même façon. Dans ton cas, le nom que tu as spécifié dans les deux vhosts est SSL : ssl_session_cache shared:SSL:50m;. Et dans ce cas la valeur spécifiée pour cette directive doit être la même dans chacun des vhosts.
      Concernant ton problème, visiblement tes deux vhosts entrent en conflit. Peux-tu me poster le résultat de la commande suivante :

      Tu as désactivé l’écoute sur le port 80, quelle modification as-tu fait exactement ? As-tu la directive server_name dans chacun des vhosts ? Peux-tu poster le vhost de ton Nextcloud ?

      Il est plutôt recommandé de rediriger les requêtes du port 80 vers le port 443 (comme dans ce tuto) et non de désactiver l’écoute du port 80.

      W.

      Répondre
      • Gaby
        Gaby dit :

        Salut !

        Merci pour l’explication du ssl_session_cache shared:SSL:50m;, je n’avais pas compris que SSL était nominatif ^^
        J’ai changé le nom pour mes autres vhosts mais la solution n’est pas aussi simple ^^ En tout un soucis de résolu :p

        Voici le contenu de /etc/nginx/sites-enabled :

        J’ai rajouté quelques trucs entre temps, et le même problème se produit partout, sachant que tous sont en fait des redirections proxy_pass. J’imagine qu’en résolvant un problème ça arrangera les autres. Tous fonctionnent si je désactive nextcloud. Par contre si je l’active je n’ai que lui qui marche -_-‘ Et j’ai bien le server_name dans chacun des vhosts.

        Pour la désactivation de l’écoute sur le port 80 j’ai simplement retiré le bloc concernant ce port. Par exemple le vhost du wiki dans mon premier post est identique à celui du serveur (sauf pour le nom de domaine bien sûr). Tous ces services étant avant tout personnels pour le moment je n’ai pas vraiment besoin du côté pratique de la redirection du 80 vers le 443. Après si ça peut être une source de problèmes je vais évidemment remettre ça en place !

        Enfin voici le vhost de nextcloud :

        Un grand merci pour ton aide !

        Répondre
        • Gaby
          Gaby dit :

          Ah ben problème résolu, après avoir remis les redirections du 80 vers le 443 tout fonctionne comme il faut ! Ça m’apprendra à en faire qu’à ma tête :p

          Encore merci pour ton aide et ce super tuto !

          Répondre
  11. Coco
    Coco dit :

    Bonjour, super tuto que j’ai réussi à suivre sans erreurs ou presque !
    En effet, je n’arrive pas à accéder à nextcloud dans mon réseau local même en ajoutant l’adresse ip du serveur dans le fichier nginx comme vous l’avez préconisé à une autre personne dans les commentaires. Que dois-je faire pour accéder dans mon réseau à Nextcloud? Je n’ai pas de loopback pour info (j’ai une livebox orange…).
    Coco

    Répondre
      • Coco
        Coco dit :

        Bonjour,
        Le serveur est installé sur mon réseau local. Dès que j’essaye d’accéder à nextcloud à partir d’un appareil connecté à ce même réseau, que ce soit en utilisant l’adresse IP, ou bien en utilisant le nom de domaine, une page d’erreur s’affiche comme quoi le temps d’attente est dépassé. Ajouter l’adresse IP du serveur dans les paramètres nextcloud ne change rien. Il s’agit d’une fresh install. Merci pour cette réponse déjà et j’attends avec impatience une aide !
        Coco

        Répondre
        • Coco
          Coco dit :

          Autre problème du coup : j’ai essayé de passer par apache pour installer nextcloud et non nginx. La connexion depuis le réseau où est hébergé le serveur fonctionne en renseignant l’adresse IP, mais pas avec le nom de domaine. De plus, je ne suis pas en HTTPS dans le réseau où est hébergé le serveur, alors que je le suis en dehors. Est ce normal?
          Coco

          Répondre
  12. Lolo
    Lolo dit :

    Bonjour,
    Pour la partie nom de domaine, si nous n’avons pas de nom de domaine et que nous avons juste l’adresse ip du serveur, faut il dans la configuration pour server_name inscrire quand même : cloud.mondomaine.com ? Et aussi, comment on fait pour le nom de domaine lors de la configuration du certificat ?
    Merci d’avance

    Cordialement

    Lolo

    Répondre
  13. valoux
    valoux dit :

    Super tuto, je m’en suis servi pour configurer un Nextcloud sur un Raspberry 3 tout a fonctionné parfaitement bien. J’ai juste ajouté smbclient pour mapper le disque dur d’une Freebox et modifié la configuration de OPCache par les valeurs que Nextcloud m’indique dans les paramètres tout est nickel (bon c’est un peu lent sur un Raspberry).

    J’apprécie particulièrement que tu explique le pourquoi de chaque commande. Merci

    Répondre
  14. Olivier
    Olivier dit :

    Bonjour,
    Sur presque tout vos tutos vous encapsulé les logiciels dans docker (ce que je trouve génial)
    Mais pour celui là, vous ne passez pas par l’image officiel nextcloud pour docker, il y a une raison à celà ?

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Bonjour Olivier,

      Effectivement je ne passe pas par Docker pour plusieurs raisons. L’image officielle de Nextcloud embarque un serveur apache et je ne veux tout simplement pas dupliquer les serveurs web pour chacun des sites / services hébergés sur mon dédié par souci de configuration et de performance. Ensuite (et surtout), la plupart des configurations proposées dans cet article ne sont pas applicables à un container docker. De mon point de vue, l’image officielle n’est pas complète et vous pousse à utiliser leur configuration par défaut (je pense notamment à PHP-FPM qui doit être configuré en fonction de la machine et des besoins de chacun). A moins de lancer une invite de commandes au sein du container et de le configurer comme vous le souhaitez mais Docker perd de son intérêt si l’image est incomplète et ne répond pas aux besoins.

      W.

      Répondre
  15. DocKoxx
    DocKoxx dit :

    Bonjour Edouard et merci pour ton tuto 🙂

    Malheureusement je me retrouve face à un soucis, j’ai repris plusieurs fois l’installation de NextCloud et malgré tout ça quand j’essaye de me connecter en ext ou local, je me retrouve face à une page « 403 Forbidden nginx »…
    Visiblement c’est un soucis de droit mais je ne vois pas où se pose le soucis, j’ai essayé de donner à un nouvel user comme dans ton tuto et aussi de laisser pi sans faire de restriction et pourtant ça ne fonctionne toujours pas. Je commence à désespérer ^^

    Si tu pouvais m’aider, merci 🙂

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Une erreur s’est glissée dans le virtual host à la ligne suivante :

      L’article a été mis à jour 😉

      W.

      Répondre
  16. david
    david dit :

    Bonjour,

    J’ai suivi votre super tuto mais lorsque j’essaie d’accéder à mon site, nginx me répond 403 forbidden .

    Auriez-vous une idée ?

    Merci

    Répondre
  17. Tom
    Tom dit :

    Bonjour, le tuto est vraiment complet et je tiens à remercier pour l’aide qu’il m’a apporté.
    Mais je bloque depuis quelques jours sur un problème.
    J’ai monté un projet cloud pour un collègue de boulot, mais je ne connais pas grand chose en web.
    J’apprends à maîtriser linux qui est fort agréable !

    Voici mon soucis.
    Après avoir fini le tuto , c’est à dire au moment où je dois me connecter au serveur web nextcloud, je tape le localhost qui m’affiche directement la page standard de Nginx.
    Donc j’ai cherché à modifier ça, j’ai carrément supprimer le fichier « Default » dans « /etc/nginx/sites-available/default ». Du coup il doit charger le fichier « nextcloud » au même endroit. (je pense que la liaison était dans le fichier conf /etc/nginx/nginx.conf // ligne virtual host configs ».
    Et là le problème c’est que ma page passe en time-out. Même en augmentant le délais rien ne change.
    Je précise que je passe par un proxy et le serveur est situé en DMZ. les port 80/443/22/3000/9000 sont ouvert.

    Je ne comprend pas pourquoi je bloque. J’ai beau faire pas mal de recherche avant de poster une demande d’aide, Je ne trouve point de solution. Peut être que c’est tout bête comme problème.
    Je vous mets le fichier conf /etc/nginx/sites-available/nextcloud.

    Au départ je pensais à un soucis de proxy, vu que le localhost me renvoie sur mon nom de domaine en HTTPS. Mais je pense plutot à un problème de configuration d’un fichier.
    Merci d’avance.
    Tom.

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Bonjour Thomas,

      Déjà il faut commencer par mettre à jour ton vhost sinon tu obtiendras une 403, une erreur s’est glissée à la ligne suivante :

      L’article a été mis à jour hier après-midi.

      Ensuite tu sembles accéder à localhost dans ton navigateur, mais tu dois taper la même URL définie pour la directive server_name définie dans ton vhost sinon Nginx sera incapable de résoudre ton domaine. Attention aussi à une chose, Nginx ne charge pas le fichiers de configuration du répertoire /etc/nginx/sites-available mais du répertoire /etc/nginx/sites-enabled d’où la création d’un lien symbolique dans le tutorial.

      Si après tout ça, tu ne peux accéder à Nextcloud, je penche pour un problème de flux ou de firewall devant ta DMZ. Ne connaissant rien de ton architecture et des règles en place au sein de ton réseau, cela va être très difficile pour moi de t’aider. As-tu la possibilité de faire une installation sur une VM ou une machine qui ne passe pas par un proxy ou la DMZ pour au moins valider le fait que ton problème est réseau ?

      W.

      Répondre
      • tom
        tom dit :

        Merci pour ta réponse.

        J’ai rectifié l’erreur dans le vhost.
        Concernant l’URL, je tape l’ip du serveur et j’ai le même soucis « Time Out ».
        Je penche aussi pour un problème firewall. Il reste peut etre un port de fermé, reste à savoir lequel.
        Je vais faire une VM avec un nextcloud/nginx sans certificat SSL.
        Thomas

        Répondre
        • Tom
          Tom dit :

          J’ai recréé une Vm sur la même IP sans certificat SSL/HTTPS.
          Le serveur a bien fonctionné correctement. Donc le soucis venait bien du SSL/HTTPS.
          Après vérification, il s’avère que le port 443 n’était pas forward et donc quand je tapais l’ip, il me redirigeait dans une impasse d’où le « time-out ».

          Merci pour l’aide et le soutien !
          J’ai énormément appris grâce à ce projet fort intéressant.

          A bientôt !
          Thomas.

          Répondre
  18. Adrien
    Adrien dit :

    Bravo, super tuto ! Très clair et très détaillé.
    Tout marche nickel pour moi jusqu’à la partie 11.2 – Cache de données : APCu & Redis, qui rend mon site inaccessible (erreur 500 internal server).
    Du coup j’ai refait l’installation sans cette partie et tout marche nickel 😉

    Répondre

Trackbacks (rétroliens) & Pingbacks

  1. […] installé mon instance NextCloud sur un KS-2 en suivant ce tuto et celui de Nicolas sur AbyssProject (Debian 9 avec NGINX, PHP 7 et […]

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

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

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