Nextcloud¶
Documentation technique¶
Packaging¶
Nextcloud est packagé sur l’infrastructure d’ImmaeEu sous deux formes:
Une forme « mutualisée », hébergée sur https://cloud.immae.eu, où des personnes ont un compte individuel sur la même instance nextcloud.
Une forme « instanciée », où un utilisateur est administrateur d’une instance complète de Nextcloud et libre de gérer ses utilisateurs. L’utilisateur est responsable du nom de domaine de cette forme.
Chaque instance (la mutualisée ou chacune des instanciée) est attaché à son propre service php-fpm. L’instance mutualisée est servie par le httpd principal, alors que les formes instanciées sont généralement services par le httpd de production (en fonction du besoin de l’utilisateur)
Un module défini dans le dépôt git
(systems/eldiron/websites/tools/cloud/farm.nix
) permet d’instancier
facilement un nouveau Nextcloud. La création de la base de données et de
la première configuration reste pour le moment manuelle.
Le chargement de configuration de Nextcloud utilise une variable
d’environnement NEXTCLOUD_CONFIG_DIR
, pointant vers un dossier dans
lequel est recherché (par défaut) un fichier config.php
. À cela
Nextcloud (voir lib/private/Config.php#readData
) ajoute une recherche
de fichiers *.config.php
. Cette fonctionnalité permet d’avoir un
fichier config.php
écrivable par nextcloud, et des fichiers
override.config.php
pointant vers des objets fixes gérés par nix.
Inconvénient : lorsqu’on édite dans la GUI une configuration qui impacte
cette configuration, Nextcloud va réécrire config.php
toutes les
variables (y compris les supplémentaires donc). Les informations
habituellement contenues dans le config.php
original sont
version
, installed
, maintenance
et les clés
liées au mail mail_*
, habituellement gérées par l’administrateur
de l’instance dans l’interface d’administration.
Les variables de configuration sont référencées sur
la documentation Nextcloud.
Nouvelle instance¶
Déclarer la configuration dans le dépôt git, et activer la configuration NixOS:
# (...) nixos-rebuild switch # Variable utilisée dans la suite instance=someName
Créer la base de données:
CREATE USER nextcloud_$instance WITH PASSWORD 'somepassword'; CREATE DATABASE nextcloud_$instance WITH OWNER nextcloud_$instance;
Copier et adapter une configuration existante.
Modifier les infos de la base de données
Ne pas oublier de forcer
'appstoreenabled' => false,
Lancer l’initialisation. Elle créera automatiquement un utilisateur admin « immae »:
# Ligne d’installation à retester maintenant que le override.config.php est implémenté dans nix nextcloud-occ-$instance maintenance:install --database=pgsql --database-name=nextcloud_$instance --database-host=/run/postgresql --database-user=nextcloud_$instance --admin-user=immae --data-dir=/var/lib/nextcloud_farm/$instance/data
Ajuster les trusted domains dans le fichier config.php
Mises à jour¶
Les mises à jour de Nextcloud ne doivent pas sauter de version. Il faut également mettre à jour jusqu’à la dernière sous-version supportée avant de passer à la suivante.
Avant de faire la mise à jour, s’assurer que la nouvelle version est
bien compatible avec la version de php requise. Cette information est
disponible dans le fichier lib/versioncheck.php
.
Les apps (https://apps.nextcloud.com/) doivent êtres mises à jour
conjointement avec Nextcloud. Elles sont chacune dans un fichier, séparé
du dossier de la dérivation
(flakes/mypackages/pkgs/webapps/nextcloud/apps
). La définition de
l’application référence notamment chaque version de Nextcloud supportée
et la version correspondante pour l’application.
La version de nextcloud est elle définie dans
flakes/mypackages/pkgs/webapps/nextcloud/default.nix
et déclarée dans
flakes/mypackages/pkgs/webapps/default.nix
. Une fois les applications
et Nextcloud à jour (voir Processus rapide pour mettre à jour les dérivations des apps pour
les apps), chaque instance peut être mise à jour de façon indépendante
en modifiant le numéro de version associé. Gérer éventuellement les apps
oubliées (ou non supportées) à l’étape précédente, qui vont provoquer
une erreur à cette étape. La version de php utilisée se déclare au
niveau de la définition de l’instance.
Avant l’activation de la mise à jour, mettre l’instance en mode maintenance, éventuellement, faire un backup de la bdd. Puis après l’activation, lancer l’upgrade et ajouter les éventuels index manquant:
instance=librezo
nextcloud-occ-$instance maintenance:mode --on
sudo -u postgres pg_dump nextcloud_$instance > backup_$instance.sql
# (... Activer la configuration NixOS)
nextcloud-occ-$instance upgrade
nextcloud-occ-$instance maintenance:mode --off
nextcloud-occ-$instance db:add-missing-indices
Si le site est de retour après cela, réitérer pour les éventuels autres sauts de version.
Processus rapide pour mettre à jour les dérivations des apps¶
Pour chaque fichier d’apps, chercher les versions sur https://apps.nextcloud.com, récupérer les versions pertinentes (celles supportées) et mettre un hash
dummy
.Une fois toutes déclarées, compiler toutes les applications d’un coup:
nix build --keep-going ./flakes/mypackages#webapps-nextcloud_27-all
et recommencer jusqu’à ne plus avoir d’erreur
Points d’attention¶
Suivi des versions¶
Changelog de Nextcloud : https://nextcloud.com/changelog/
Fin de support : https://endoflife.date/nextcloud
Chaque application a son flux RSS : https://apps.nextcloud.com/fr/feeds/releases.atom?app=contacts
Suivi des bugs¶
Suivi des CVE¶
Accès / Suppression des données¶
Il n’est actuellement pas prévu dans Nextcloud de façon simple de récupérer l’ensemble des données de l’utilisateur. En plus des fichiers, il faut identifier et extraire des logs (httpd et fichier nextcloud) les lignes concernant l’utilisateur. Il faut également parcourir toutes les tables de la base de données nextcloud pour récupérer les données stockées par les éventuelles applications (liste à créer lorsque pertinent)
La suppression d’un utilisateur passe par la commande
nextcloud-occ user:delete
. Cette commande fait appel à un hookUserDeletedEvent
qui génère un événement indiquant aux applications de supprimer les données de l’utilisateur. L’exhaustivité de ce nettoyage n’est pas garanti, un deuxième passage dans les tables peut être nécessaire pour s’assurer que les données sont bien supprimées (liste à créer lorsque pertinent). Note: les clés étrangères dans la base de données de Nextcloud sont rares, ce qui n’aide pas à ce processus. Nextcloud ne doit pas être en mode « maintenance » lors de la suppression (les applications ne sont pas activées dans ce mode)