Table des matières

Objectifs

Cette page est essentiellement un aide mémoire des quelques opérations de maintenance et dépannage que j'ai eu à faire régulièrement, ou qui ont été pénibles. Si cela peut aider…

Note : à date de rédaction cela concerne surtout un Nextcloud auto-hébergé à partir des sources (pas d'installation via docker ou paquet snap).

Réglages

La page de paramètres de Nextcloud affiche assez souvent au départ quelques alertes concernant les réglages. Rien de grave et tout a pu se régler en suivant la documentation.

Connexion non sécurisée

Vous accédez à votre instance via une connexion sécurisée, pourtant celle-ci génère des URLs non sécurisées. Cela signifie probablement que vous êtes derrière un reverse-proxy et que les variables de réécriture ne sont pas paramétrées correctement. Merci de lire la page de documentation à ce propos.
  Accès non sécurisé au site via HTTP. Il est fortement conseillé de configurer votre serveur pour exiger HTTPS à la place, comme décrit dans les conseils de sécurité.

Un fichier de configuration correct de nginx évite normalement ce type de messages (avec les certificats associés).

Cache mémoire Redis

Aucun cache mémoire n'est configuré. Si possible, configurez un “memcache” pour améliorer les performances. Pour plus d'informations consultez la documentation.

Il a suffit de suivre la documentation qui se trouve plus bas. J'ai choisi Redis pour le cache local et distribué, ainsi que pour le verrouillage des fichiers.

Le fichier de configuration `config.php` contient alors les lignes suivantes :

'memcache.local' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => array(
   'host' => 'localhost',
   'port' => 6379,
   'timeout' => 0,
   'dbindex' => 0,
),
'memcache.locking' => '\OC\Memcache\Redis',
'filelocking.enabled' => true,

ou encore

'memcache.local' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
   'host' => '/var/run/redis/redis-server.sock',
   'port' => 0,
],
en prenant garde à bien configurer
/etc/redis/redis.conf

avec

  unixsocket /var/run/redis/redis-server.sock
  unixsocketperm 770

et sudo usermod -a -G redis www-data

Voici 2 autres tutoriels sur le sujet :

L'`OPcache` qui permet de stocker du code php compilé et de gagner en réactivité et temps de calcul :

La documentation PHP est utile à lire : https://www.php.net/manual/en/opcache.installation.php

Il a d'abord fallu trouver quel fichier d'initialisation modifier :

  utilisateur@hote:~ $ php -i | grep php.ini
  Configuration File (php.ini) Path => /etc/php/7.3/cli
  Loaded Configuration File => /etc/php/7.3/cli/php.ini

L'autre fichier est `/etc/php/7.3/fpm/php.ini`, que je n'ai pas modifié.

Par défaut l'OPcache est désactivé :

utilisateur@hote:~ $ sudo more /etc/php/7.3/cli/php.ini | grep "opcache"
[opcache]
;opcache.enable=1
;opcache.enable_cli=0
;opcache.memory_consumption=128
;opcache.interned_strings_buffer=8
;opcache.max_accelerated_files=10000
;opcache.max_wasted_percentage=5
...

Les seules lignes activées après modifications sont :

utilisateur@hote:~ $ more /etc/php/7.3/cli/php.ini | grep opcache
[opcache]
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.save_comments=1
La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo.

J'ai suivi ce tutoriel, c'est l'autre fichier de configuration PHP qu'il a fallu modifier. Le réglage était sur 128Mo. https://greedme.com/install-nextcloud-on-ubuntu-20-04-with-nginx-lemp-stack/

utilisateur@hote:~ $ more /etc/php/7.3/fpm/php.ini | grep memory_limit
memory_limit = 512M

Autre possibilité de réglage que je préfère, car spécifique au serveur :

https://docs.nextcloud.com/server/23/admin_manual/installation/source_installation.html#php-fpm-tips-label

/etc/php/7.4/fpm/pool.d/www.conf
Votre installation n’a pas de préfixe de région par défaut. C’est nécessaire pour valider les numéros de téléphone dans les paramètres du profil sans code pays. Pour autoriser les numéros sans code pays, veuillez ajouter “default_phone_region” avec le code ISO 3166-1 respectif de la région dans votre fichier de configuration.

Il suffit d'ajouter dans le fichier `config.php` :

'default_phone_region' =>  'FR',

Pour d'autres codes pays : https://en.wikipedia.org/wiki/ISO_3166-1

La configuration du serveur web ne permet pas d'atteindre “/.well-known/webfinger”. Vous trouverez plus d'informations dans la documentation.
La configuration du serveur web ne permet pas d'atteindre “/.well-known/nodeinfo”. Vous trouverez plus d'informations dans la documentation.

Ces alertes semblent activées car j'accède à mon serveur via un port qui n'est pas standard, pour tenter d'augmenter la sécurité. En pratique je n'ai pas encore rencontré de problèmes avec les clients DAV.

Mise à jour lente

Mes conseils :

Et plus simplement : à faire en ligne de commande !

$ sudo -u www-data php /var/www/nextcloud/occ upgrade
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Setting log level to debug
Turned on maintenance mode
Updating database schema
Updated database
Starting code integrity check...

Index manquants

$ sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Check indices of the schedulingobjects table.
Check indices of the oc_properties table.
Check indices of the oc_jobs table.
Check indices of the oc_direct_edit table.
Adding direct_edit_timestamp index to the oc_direct_edit table, this can take some time...
oc_direct_edit table updated successfully.

cron

<HTML><blockquote>

La dernière tâche de fond a été exécutée le mois dernier. Quelque chose s'est mal passé. Vérifier le réglage des tâches de fond ↗.

</blockquote></HTML>

sudo crontab -u www-data -l
no crontab for www-data

crontab -u www-data -e
*/15  *  *  *  * php -f /var/www/nextcloud/cron.php

Modules PHP manquants

Cela peut arriver sur un nouveau système ou sur changement de version de PHP.

Le module php-imagick n’a aucun support SVG dans cette instance. Pour une meilleure compatibilité, il est recommandé de l’installer.
  sudo apt install php-imagick imagemagick

:-)

Cette instance ne dispose pas de plusieurs modules PHP recommandés. Il est recommandé de les installer pour améliorer les performances, et la compatibilité. intl bcmath gmp

Solution :

sudo apt install php-intl php-bcmath php-gmp

Ensuite : Nextcloud répond :

Aucun pilote de base de données n’est installé (sqlite, mysql ou postgresql).

Le module PHP zip n’est pas installé. Le module PHP dom n’est pas installé. Le module PHP XMLWriter n’est pas installé. Le module PHP XMLReader n’est pas installé. Le module PHP libxml n’est pas installé. Le module PHP mbstring n’est pas installé. Le module PHP GD n’est pas installé. Le module PHP SimpleXML n’est pas installé. Le module PHP cURL n’est pas installé. Les modules PHP ont été installés mais sont toujours indiqués comme manquants ?

Donc installation des paquets :

sudo apt install php-zip php7.4-xml php-gd php-curl php-mbstring php-mysql

PHP et variables d’environnement

PHP ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(“PATH”) retourne seulement une réponse vide. Veuillez consulter les notes de configuration pour PHP dans la documentation d’installation ↗ ainsi que la configuration de votre serveur, en particulier en cas d’utilisation de php-fpm.

https://docs.nextcloud.com/server/23/admin_manual/installation/source_installation.html#php-fpm-tips-label

HTST

L’en-tête HTTP “Strict-Transport-Security” n’est pas configuré à au moins “15552000” secondes. Pour une sécurité renforcée, il est recommandé d’activer HSTS comme indiqué dans les éléments de sécurité ↗.

https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/

et pour tester : https://hstspreload.org/

Dépannages

Après une mise à jour de système ou de Nextcloud, cela ne fonctionne plus

Tenter de simplifier le fichier config.php vis à vis de redis, cache etc.

redis

Le serveur redis ne démarre pas toujours, ou une mise à jour change parfois les configurations. J'ai eu à aller chercher dans /etc/redis/redis.conf

Et vérifier les lignes suivantes

unixsocket /var/run/redis/redis-server.sock
unixsocketperm 700

Le disque externe des données change de désignation aléatoirement

Cette panne m'est arrivée fréquemment sur mon RPi2 suite à des coupures de courant, ou microcoupures, ou un câble d'alimentation soudé que j'ai finalement remplacé.

Le disque de données est /dev/sda, puis soudain /dev/sdb… Certainement du à un défaut d'alimentation, et redémarrages intempestifs

Edition du /etc/fstab

.Analyser la sortie de cette commande

utilisateur@nomserveur:~$ lsblk -o NAME,UUID,TYPE,MOUNTPOINTS,SIZE

Fichier fstab (/dev/sda1 est la partition contenant les données Nextcloud)

    #/dev/sda1 /mnt/disk_donnees btrfs     defaults        0       2
    #UUID=1c379a58-7a06-48e1-82da-607723cf1036    /mnt/disk_donnees btrfs     defaults        0       2
    PARTUUID=08a8dc71-01    /mnt/disk_donnees btrfs     defaults        0       2

Problème d'accès aux fichiers

Vérifier les droits et l'utilisateur sur le dossier `data' : `chown -R www-data:www-data`

Idem pour le dossier base de données : `chown -R mysql:mysql`

Serveur mariadb qui ne démarre pas

Cette panne m'est arrivée fréquemment sur mon RPi2 suite à des coupures de courant, ou microcoupures. Le serveur doit être arrété en pleine opération et cela corrompt certains fichiers.

 utilisateur@nomserveur:~ $ sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.15 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2022-11-05 19:05:47 CET; 8min ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 2432 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 2433 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 2435 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environ>
    Process: 2482 ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
   Main PID: 2482 (code=exited, status=1/FAILURE)
     Status: "MariaDB server is down"
        CPU: 926ms

  Nov 05 19:05:46 nomserveur mariadbd[2482]: 2022-11-05 19:05:46 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
  Nov 05 19:05:46 nomserveur mariadbd[2482]: 2022-11-05 19:05:46 0 [Note] InnoDB: 10.5.15 started; log sequence number 16632368616; transaction id 14447885
  Nov 05 19:05:46 nomserveur mariadbd[2482]: 2022-11-05 19:05:46 0 [Note] InnoDB: Loading buffer pool(s) from /mnt/disk_donnees/mysql_data/ib_buffer_pool
  Nov 05 19:05:46 nomserveur mariadbd[2482]: 2022-11-05 19:05:46 0 [Note] Plugin 'FEEDBACK' is disabled.
  Nov 05 19:05:46 nomserveur mariadbd[2482]: 2022-11-05 19:05:46 0 [ERROR] Could not open mysql.plugin table: "Unknown storage engine 'Aria'". Some plugins may be not loaded
  Nov 05 19:05:46 nomserveur mariadbd[2482]: 2022-11-05 19:05:46 0 [ERROR] Failed to initialize plugins.
  Nov 05 19:05:46 nomserveur mariadbd[2482]: 2022-11-05 19:05:46 0 [ERROR] Aborting
  Nov 05 19:05:47 nomserveur systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
  Nov 05 19:05:47 nomserveur systemd[1]: mariadb.service: Failed with result 'exit-code'.
  Nov 05 19:05:47 nomserveur systemd[1]: Failed to start MariaDB 10.5.15 database server.

L'erreur semble “Unknown storage engine 'Aria'”.

Il semble qu'il reste un fichier temporaire, qu'il suffit d'effacer : https://jira.mariadb.org/browse/MDEV-583

  rm aria_log.00000001 (423772160 octets)

C'est suffisant pour que le serveur redémarre. Reste une petite possibilité de perte de données.

Pas de démarrage du Nextcloud

Erreur Nextcloud “The required secret config variable is not configured in the config.php file.”

Cela m'est arrivé durant la mise à jour du Nextcloud 24 à 25.

https://help.nextcloud.com/t/passwordsalt-missing-from-config-php/148081/9

Il m'a fallu récupérer la valeur de passwordsalt depuis un ancien fichier config.php sauvegardé.

Mot de passe perdu pour l'administrateur Nextcloud

Facilement résolu avec un accès root au serveur.

  sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin

https://tutox.fr/2017/11/10/comment-reinitialiser-son-mot-de-passe-nextcloud/

Erreur 502

Erreur 502, due à FPM, site nginx mal configuré pour utiliser une adresse IP au lieu d'un socket. Inverser les commentaires des 2 lignes pour obtenir

    upstream php-handler {
        #server 127.0.0.1:9000;
        server unix:/var/run/php/php7.4-fpm.sock;
    }