Yunohost et plusieurs instances de Nextcloud (1/N)

, par  Genma , popularité : 3%

Merci à https://mamot.fr/@janusz pour son tutoriel qui a abouti à ce qui est devenu une série de tutoriel ;)

Le besoin : avoir plusieurs instances de Nextcloud sur un même serveur géré par Yunohost. Ce billet de blog présentera un bilan de mon expérimentation. Teaser : ça marche.

Quelques rappels - nécessitant de connaître un peu comment Yunohost fonctionne

Yunohost permet d’installer une application sur un domaine particulier ou sur un sous-domaine. On peut donc ajouter le domaine mondomaine.org dans la partie administration de Yunohost. Et ensuite installer des applications sur un chemin lié à ce domaine. Par exemple Nextcloud sera accessible via l’adresse mondomaine.org/nextcloud.

Il est également possible d’ajouter un sous-domaine dans Yunohost. Par exemple demo.mondomaine.org et production.mondomaine.org comme sous domaine de mondomaine.org. Il faut que ces sous-domaines soient bien configurés au niveau de l’entrée DNS sur le serveur / prestataire gérant mondomaine.org (le plus simple étant d’associer mondomaine.org et *.mondomaine.org à l’adresse IP du serveur sur lequel tourne Yunohost). Pour un sous-domaine, il est possible là encore de faire des installations dans des dossiers, pratique si on a une instance multi-utilisateurs pour avoir par exemple des chemins du type :
 toto.mondomaine.org/nextcloud
 titi.mondomaine.org/nextcloud

On aura donc deux Nextcloud, chacun pour un utilisateur donné (par exemple).

Mon instance étant mono-utilisateur, je fais au plus simple : j’installe directement mes applications à la racine du sous-domaine (et il n’est alors plus possible d’installer d’autres applications sur ce sous-domaine, dans un "sous-répertoire".

Une même application peut être installée plusieurs fois. Il faut définir l’endroit où on l’installe et donner un nom. Le nom doit être différent pour l’affichage (ne pas être trop proche).

Préparation de Yunohost

J’ai donc préparé plusieurs entrées dans la configuration DNS pour répondre à mon besoin de plusieurs instances Nextcloud.
 demonextcloud.mondomaine.org
 productionnextcloud.mondomaine.org
 testnexcloud.mondomaine.org

Avec pour objectifs :
 demonextcloud : avoir une instance de démonstration de Nextcloud, un bac à sable avec des données non critiques, et des comptes de démos.
 productionnextcloud : une instance de production avec des données de travail.
 testnexcloud : une instance bac à sable mais avec une version supérieure / beta de Nextcloud. Le détail sur la montée en version de la version par défaut, à savoir la version 15 pour l’application Nextcloud tel que packagée pour Yunohost à la version 17), se trouve un peu plus bas.

Installation

Sur chacun des domaines ajoutés dans Yunohost, j’ai donc installé à la racine de ce sous-domaine l’application Nextcloud telle que packagée dans Yunohost. J’ai donc trois fois une instance Yunohost sur le même serveur. Nous verrons dans les futurs articles les conséquences que cela peut avoir.

Gestion des utilisateurs

L’avantage est que Nextcloud s’appuie sur le LDAP de Yunohost et que les comptes sont donc communs à toutes les instances de Nextcloud. Pour les applications de démo, si l’on veut ne pas passer par le SSO et se retrouver connecté automatiquement et si l’on ne veut pas créer de comptes bidons dans Yunohost, on créé les utilisateurs de démo directement dans Nextcloud. Et au niveau de Yunohost, il faut rendre l’application publique. Dans ce cas, la gestion de la sécurité se fait directement par Nextcloud (on n’a plus le SSO), il faut donc des mots de passe solides et si possible activer la double authentification pour les comptes (fonctionnalité présente dans Nextcloud).

Montée en version

Pour la montée en version de l’application Nextcloud installée sur testnexcloud.mondomaine.org, j’ai donc suivi le tutoriel de https://mamot.fr/@janusz que je cite dans son intégralité ci-dessous, avec son accord :

# Notes d'installation - Nextcloud avec Yunohost

Notes de configuration de Nextcloud hébergé par Yunohost.

## Upgrade de Nextcloud (v16 ou v17)

La version actuelle de Yunohost (v3.X) fonctionne avec la version de PHP 7.0 qui n'est plus supporté par les dernières versions de Nextcloud (versions 16 ou 17). Il faut donc installer PHP 7.1, 7.2 ou 7.3 en plus de l'actuelle 7.0.

L'astuce consiste donc à laisser Yunohost tourner sur sa version (PHP 7.0), mais de configurer Nextcloud pour qu'il travaille en PHP supérieur (ici PHP 7.3).

**Attention**, la méthode décrite ci-dessous vous coupe de l'installation automatisée de Nextcloud en passant par Yunohost.

<details>
    <summary>Installation de PHP 7.3</summary>

**Configuration de PHP 7.3**

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zaCIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgZGF0YS1sYW5ndWFnZT0ic2giPjxjb2RlPnN1ZG8gc3UgLQ0Kd2dldCAtcSAtTyAvZXRjL2FwdC90cnVzdGVkLmdwZy5kL3BocC5ncGcgaHR0cHM6Ly9wYWNrYWdlcy5zdXJ5Lm9yZy9waHAvYXB0LmdwZw0KZWNobyAmcXVvdDtkZWIgaHR0cHM6Ly9wYWNrYWdlcy5zdXJ5Lm9yZy9waHAvICQobHNiX3JlbGVhc2UgLXNjKSBtYWluJnF1b3Q7IHwgc3VkbyB0ZWUgL2V0Yy9hcHQvc291cmNlcy5saXN0LmQvcGhwNy5saXN0DQphcHQgdXBkYXRlDQphcHQgaW5zdGFsbCBwaHAtY3VybCBwaHAtaW1hZ2ljayBwaHA3LjMgcGhwNy4zLWFwY3UgcGhwNy4zLWJjbWF0aCBwaHA3LjMtY3VybCBwaHA3LjMtZnBtIHBocDcuMy1nZCBwaHA3LjMtaW50bCBwaHA3LjMtbGRhcCBwaHA3LjMtbWJzdHJpbmcgcGhwNy4zLW15c3FsIHBocDcuMy14bWwgcGhwNy4zLXppcA0KdXBkYXRlLWFsdGVybmF0aXZlcyAtLXNldCBwaHAgL3Vzci9iaW4vcGhwNy4wDQo8L2NvZGU+PC9wcmU+PC9kaXY+"></div>

**Configuration de Nginx**

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zaCIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgZGF0YS1sYW5ndWFnZT0ic2giPjxjb2RlPnZpbSAvZXRjL25naW54L2NvbmYuZC9uY2xvdWQubW9uLXNpdGUub3JnLmQvbmV4dGNsb3VkLmNvbmYNCjwvY29kZT48L3ByZT48L2Rpdj4="></div>

    #fastcgi_pass unix:/var/run/php/php7.0-fpm-nextcloud.sock;
    fastcgi_pass unix:/var/run/php/php7.3-fpm-nextcloud.sock;

**Configuration de php-fpm**

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zaCIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgZGF0YS1sYW5ndWFnZT0ic2giPjxjb2RlPmNwIC9ldGMvcGhwLzcuMC9mcG0vcG9vbC5kL25leHRjbG91ZC5jb25mIC9ldGMvcGhwLzcuMy9mcG0vcG9vbC5kLw0Kcm0gLXJmIC9ldGMvcGhwLzcuMy9mcG0vcG9vbC5kL3d3dy5jb25mDQp2aW0gL2V0Yy9waHAvNy4zL2ZwbS9wb29sLmQvbmV4dGNsb3VkLmNvbmYNCjwvY29kZT48L3ByZT48L2Rpdj4="></div>

    listen = /var/run/php/php7.3-fpm-nextcloud.sock

Relancez les services

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zaCIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgZGF0YS1sYW5ndWFnZT0ic2giPjxjb2RlPnN5c3RlbWN0bCByZXN0YXJ0IG5naW54DQpzeXN0ZW1jdGwgcmVzdGFydCBwaHA3LjMtZnBtDQo8L2NvZGU+PC9wcmU+PC9kaXY+"></div>

</details>

<details>
    <summary>Mettre à jour Nextcloud</summary>

Configurez le canal de mise à jour.

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zaCIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgZGF0YS1sYW5ndWFnZT0ic2giPjxjb2RlPnZpbSAvdmFyL3d3dy9uZXh0Y2xvdWQvY29uZmlnL2NvbmZpZy5waHANCjwvY29kZT48L3ByZT48L2Rpdj4="></div>

      'updatechecker' => true,
      'updater.release.channel' => 'stable',

Lancez la mise à jour

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zaCIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgZGF0YS1sYW5ndWFnZT0ic2giPjxjb2RlPnN1ZG8gLXUgbmV4dGNsb3VkIHBocDcuMyB1cGRhdGVyL3VwZGF0ZXIucGhhcg0Kc3VkbyAtdSBuZXh0Y2xvdWQgcGhwNy4zIG9jYyB1cGdyYWRlDQpzdWRvIC11IG5leHRjbG91ZCBwaHA3LjMgb2NjIG1haW50ZW5hbmNlOm1vZGUgLS1vZmYNCjwvY29kZT48L3ByZT48L2Rpdj4="></div>

Résultat :

![](media/capt-nextcloud_upgrade_v16.png)

</details>

## Avertissements de sécurité & configuration de Nextcloud

Dans la partie administration, la section "Avertissements de sécurité & configuration" vous permet d'optimiser Nextcloud pour obtenir une configuration optimale. Menu _Paramètres > Administration > Vue d'ensemble_

Voici quelques questions / réponses

<details>
    <summary>La base de données a quelques index manquant.</summary>

La base de données a quelques index manquant. 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.

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+c3VkbyAtdSBuZXh0Y2xvdWQgcGhwNy4zIG9jYyBkYjphZGQtbWlzc2luZy1pbmRpY2VzDQo8L2NvZGU+PC9wcmU+PC9kaXY+"></div>

</details>

<details>
    <summary>La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo.</summary>

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+dmltIC9ldGMvcGhwLzcuMy9mcG0vcG9vbC5kL25leHRjbG91ZC5jb25mDQo8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
    php_value[upload_max_filesize] = 16G
    php_value[post_max_size] = 16G
    php_admin_value[memory_limit] = 512M

</details>

<details>
    <summary>Corriger les problèmes d'accès à .well-known/***dav</summary>

<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+dmltIC9ldGMvbmdpbngvY29uZi5kL25jbG91ZC5tb24tc2l0ZS5vcmcuZC9uZXh0Y2xvdWQuY29uZg0KPC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>
Ajoutez vers la fin du fichier :

      location = /.well-known/carddav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
      }

      location = /.well-known/caldav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
      }

</details>

--  
Janusz / 2019-11-10  

Conclusion

Fin du premier article de cette série Yunohost et plusieurs instances de Nextcloud (1/N). La suite dans quelques jours ;)