===== 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. * https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html * https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/files_locking_transactional.html 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 : * https://www.it-connect.fr/nextcloud-activer-et-configurer-le-cache-redis/ * https://linuxfr.org/wiki/tuto-howto-nextcloud-activer-systeme-de-cache-memcache-avec-redis 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 : * surveiller l'utilisation du CPU du serveur via SSH avant de passer aux étapes suivantes * rafraîchir la page, et ne pas cliquer "retry" * parfois se reconnecter sur l'interface, puis revenir sur la mise à jour permet de reprendre là où elle s'était arrêtée * [[https://www.peltier-net.fr/procedure-de-mise-a-jour-manuelle-serveur-nextcloud/]] 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 ====
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 ↗.
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 * PARTUUID ou UUID pour éviter problèmes lors de reboot * 0 2 en fin de ligne : pour pas de dump, et analyse après le système de fichier principal .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; }