Projet PAINS : configuration de Nextcloud | Partie 6

Projet PAINS : configuration de Nextcloud | Partie 6

Cette fois-ci on finalise : 

  • règle NAT sur OPNsense
  • HTTPS
  • configurations internes de nextcloud
  • CRON et REDIS

On commence par le plus simple : la règle NAT

Actuellement elle redirige vers le port 80 du serveur Nextcloud. Sauf que notre page WEB nextcloud écoute sur le port 2500. On change ça.

J'ai voulu tester ma règle, tout content, et ça marche. Enfin...

En lisant la documentation, c'est normal. En allant dans le fichier /var/www/nextcloud/config/config.php, je vois que mon IP n'est pas digne de confiance pour le site. 
je vais rajouter mon IP public et problème résolu.

 

 

Avant d'attaquer le HTTPS, j'ai visité nextcloud et je suis allé dans le panel administrateur. Et j'ai vu ça : 

C'est parti pour corriger chacun de ces problèmes.

Nous avons 3 types de problèmes : Les urgents, les importants et les recommandations. 
On va commencer par les plus urgents :

Le HTTPS. Nous allons obtenir un certificat TLS via Let’s Encrypt, une autorité de certification gratuite et reconnue par les navigateurs.
Let’s Encrypt nous permet de chiffrer les échanges entre le client et le serveur et d’éviter les avertissements de sécurité dans le navigateur.

Pour cela, il faut un nom de domaine. Mais je suis à l'économie. Actuellement j'ai un nom de domaine, utilisé ici : antoninsio.com .
Problème, ce nom de domaine, même si acheté chez ionos, est géré par l'hébergeur de ce site, o2switch.
Solution : redirection. nc.antoninsio.com redirige vers mon nextcloud, soit sur l'ip et le port. 
Sur ma VM nextcloud, j'installe certbot, et vu que je suis sur apache, il faut aussi installer python3-certbot-apache. Et je créer le certificat avec la commande :

certbot --apache -d nc.antoninsio.com

Le problème vient du fait que mon serveur WEB nextcloud écoute sur le port 2500 et non 80.
la solution : la bidouille

  • actuellement nc.antoninsio.com est géré par o2switch et fait une redirection vers monIP:2500. ça marche, mais Let's Encrypt n'est pas content, car il ne veut passer que par le port 80
  • ma solution serait d'utiliser la page WEB par défaut de apache que j'ai laissée. Il faudrait juste faire une redirection sur ma box internet puis sur mon proxmox, puis sur mon OPNsense
  • Mais l'objectif, c'est juste d'avoir le https, pour le bonheur de nextcloud.
  • Donc j'allais dire de simplement faire un certificat auto-signé, pas grave si les navigateurs ne seraient pas content de mon certificat. 
  • Mais c'est vrai que je prévois d'heberger mon site WEB sur ce serveur. Donc sur le port 443 et le port 80. 
  • Du coup ça va faire les redirections... Autant le faire maintenant, que faire des bidouilles, puis faire vraiment ce qu'il faut plus tard.

C'est parti pour faire toutes les redirections :



post-up iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.5
post-down iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.5

Et en théorie ça marche.

Maintenant autre bidouille : modifier ma redirection de nc.antoninsio.com .
Actuellement elle redirige directement vers le port et non simplement l'ip. Pas grave, tous les 3 mois je ferai manuellement la modification de retirer le port pour renouveler mon certificat. Et oui ,j'ai vu que, courant l'année prochaine, ce sera tous les 45 jours .



Maintenant que ça marche, on continue les bidouilles.
La création du certificat à créé un nouveau fichier dans /etc/apache2/sites-enabled/ : nextcloud-le-ssl.conf. On va juste rentrer dedans et changer son port 443 par le port 2500. Ensuite on va dans le /var/www/nextcloud/config/config.php et on rajoute le nom de domaine ( nc.antoninsio.com )
Et après vérification nextcloud, nous avons une erreur critique retirée. 

Donc le NAS est accessible par : https://nc.antoninsio.com:2500 . Même si les navigateurs se plaignent, du fait que le https ne passe pas par le port standard 443, c'est sécurisé.
Avant de continuer, il faut se mettre à jour sur quelques petits soucis de route http et https. 
http://nc.antoninsio.com = monIP = page apache2 par défaut
https://nc.antoninsio.com = impossible d'accéder à la page, le navigateur le bloque, car le certificat ne correspond pas à la bonne page.
http://nas.antoninsio.com:2500 = bloqué car le serveur WEB attend maintenant du https
https://nas.antoninsio.com:2500 = ça marche mais le navigateur met toujours "site non sécurisé", du fait que ce n'est pas le port habituel.

On va désactiver une règle qui va empêcher d'accéder à la page par défaut d'apache. ( soit à la page par défaut d'apache )


Et on pourra la réactiver quand on aura besoin de renouveler le certificat.

Problème suivant, 
La limite de mémoire PHP
Il suffit de nous rendre dans le fichier /etc/php/8.4/apache2/php.ini , et de modifier la valeur memory_limit. Chez moi elle est à 128M. NC demande 512M. J'ai mis 1024M.
Je profite d'être dans ce fichier pour modifier le upload_max_filesize et le post_max_size à 512M. J'ai augmenté mon max_execution_time à 300 et le max_input_time à 120.

On peut maintenant s'occuper du démon AppAPI.
Pour celui là, c'est spécial. Il ne fonctionne que si on a un docker ou podman. Il permet d'automatiser l'installation et la MAJ des external app.
Dans mon cas, ça ne marche pas et ne m'intéresse pas. Du coup, on va juste le désactiver. 
Une commande permet de le faire :

sudo -u www-data php /var/www/nextcloud/occ app:disable app_api

On l'exécute dans le CLI de notre VM nextcloud

Et le dernier est l'Infrastructure de haute performance.
Je vais laisser cette erreur pour l'instant.
Ce problème vient du fait que j'ai installé Nextcloud talk, et qu'il demande un serveur à part qui contient HPB. Comme ça, les flux audio/vidéo sont transmis à ce serveur qui va le gérer.
Vu que je l'ai installé pour tester, pas besoin de lui dédier plus de ressources.

On peut maintenant passer aux problèmes moins importants : 

Début de la fenêtre de maintenance
NC n'est pas content car on ne lui en a pas configuré.
Lui indiquer une heure lui permet de faire des tâches lourdes, ralentissant le serveur aux horaires indiqués.
Dans mon cas je ne peux pas le mettre la nuit, puisque j'éteins le serveur de 23h à 7h. Donc je vais lui mettre à 7h. 
Pour cela, il faut rentrer la commande suivante :

sudo -u www-data php /var/www/nextcloud/occ config:system:set maintenance_window_start --type=integer --value=5

Il faut penser à mettre la valeur en heure UTC et non à la française. Et penser aux décalages horaires des heures d'hiver et d'été.

Migrations de type MIME disponibles :

Un peu plus simple encore puisque la commande pour la réparer est écrite :

sudo -u www-data php /var/www/nextcloud/occ maintenance:repair --include-expensive 

C'est juste pour mettre à jour les types MIME, des associations pour dire que ce type de fichier est soit une image ou une vidéo pour faire simple.
Elle peut être plus longue si vous avez beaucoup de fichiers.

Entêtes HTTP :

Nextcloud n'est pas content car on peut encore accéder au site par HTTP.
Sauf que c'est faux à cause de mes bidouilles. Mais pour lui mes bidouilles n'existent pas. Donc il faut rajouter une ligne dans le /etc/apache2/sites-available/nextcloud-le-ssl.conf ,dans la partie "directory" :


<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15552000"
</IfModule>

15552000 correspond à 180 jours 
J'ai mis 14 jours de mon coté, soit 1209600 secondes

Il faut ensuite reload Apache2

Indices manquants de la base de données :

Encore un soucis simple puisuqu'il nous donne la commande

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

C'est pour rajouter les colonnes manquantes dans la base de données. Dans notre cas, normal vu qu'on a juste créé la DB sans rien faire dessus.
ça peut être plus long si votre DB contient déjà des données.

PHP opcache

Il va falloir retourner dans le fichier de configuration  /etc/php/8.4/apache2/php.ini , trouver la ligne opcache.interned_strings_buffer=8 et changer la valeur 8 par plus grande, de préférence un multiple de 8. J'ai mis 32 mais on peut mettre 16.

Client Push :
Client Push n'est pas installé, cela peut entraîner des problèmes de performances lors de l'utilisation de clients de synchronisation.

On va corriger le problème plus tard. Pour résoudre ce soucis, il faut installer un service externe, REDIS.
NC voit ça comme un soucis car dans cette config, c'est les clients qui vont demander si les fichiers ont été modifiés.
L'installation de REDIS, permet de faire l'inverse : C'est NC ; par l'intermédiaire de REDIS ; qui va prévenir les clients que les fichiers ont été modifiés.
Ce que m'a dit ChatGPT car j'ai rien trouvé sur internet
 
Maintenant les petits détails. Ils sont au nombre de 6. 

Les deux premiers sont ensemble, car cela concerne le Memcache. Et pour l'instant on s'en occupe pas. Tout simplement car c'est l'installation de Redis qui va régler ce problème. 
 
Indicatif téléphonique par défaut :
Il suffit d'aller dans /var/www/nextcloud/config/config.php , et de rajouter la ligne 'default_phone_region' => 'FR', ( pour les Français, sinon mettez votre pays ) dans la zone qui contient datadirectory, dbname, dbhost, configpreset...
 
Test d’e-mail :
 
Je ne le résoudrai pas. Je n'ai pas besoin que Nextcloud ait une boite mail pour l'instant. Et vu que je suis le seul utilisateur de nextcloud, pas besoin d'en mettre une. On pourrait voir ça plus tard si besoin.
 
 
Modules PHP :

Les deux dernières erreurs sont par rapport à des modules PHP manquant. Donc on va les installer. apt install php8.4-gmp .

Dans mon cas, avec le certificat, les apt marchaient plus. Pour résoudre le problème, j'ai du retirer la règle NAT du proxmox ( j'ai pu laisser celle du OPNsense et de la box ).

Pour imagik, le problème vient que la version par défaut ne prend pas en charge le .SVG. Pour cela il faut installer imagemagick et librsvg2-bin
 
Après tout ça, je redémarre la VM, et je vois ce qu'il reste en erreur : 
Pour le PHP opcache, j'avais modifié le php.ini du cli et non du apache2, d'où le fait qu'il n'a pas vu la modification.
 
Je vais devoir monter la valeur de mon entête HTTP pour que l'avertissement n'apparaisse plus.
Pour les logs, c'est des tests que je faisais qui ont rajouté des erreurs, donc ça va disparaître au bout d'un moment.
Et on va pouvoir passer à REDIS.
 
REDIS
on va sur notre CLI de VM nextcloud et on installe php-apcu , redis-server et php8.4-redis .
On vérifie qu'il est démarré avec systemctl status redis-server et que PHP le voit avec php -m | grep redis

Pour une fois, tout va bien.
 
On va ensuite de nouveau dans /var/www/nextcloud/config/config.php , rajouter des lignes à la fin du fichier ( juste avant le ); )
 
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',

  'redis' => [
    'host' => '127.0.0.1',
    'port' => 6379,
  ],

Je me suis juste basé sur les tutoriels et la documentation officielle pour ces lignes.

Ensuite on redémarre apache2 et on voit ce que dit la vérification nextcloud ( qui prend un temps monstrueux ) :

Pour moi, j'ai fait ce qu'il fallait. Les logs, je n'aurais qu'a les supprimer pour que ça enlève l'avertissement.
Le test d'e-mail, j'ai pas besoin d'adresse mail pour lui, et infrastructure de haute performance n'est pas nécessaire pour l'instant vu que c'est NC talk qui le demande et qu'il est sur mon infra, en test, donc je ne sais pas si je le garde encore.

Par contre le Client PUSH, C'est un petit soucis. Et je ne comprend pas comment le résoudre. Donc tant pis, c'est pas quelque chose d'important.


Maintenant on va mettre CRON. Pour cela on se dirige sur le panel admin et on coche " CRON ". 


Oui, Nextcloud a déjà son CRON de configuré, donc juste besoin d'appuyer sur un bouton.

 

Pour bien finir Nextcloud cette année, on le rajoute en disque de réseau windows. 
Comme ça on aura la preuve que ça marche, et que c'est fonctionnel.

Pour cela, clic droit sur "ce PC" dans l'explorateur de fichier Windows, ajouter un emplacement réseau, et en lien on met https://<ton-domaine>[:port]/remote.php/dav/files/<nom_utilisateur>/

On peut aussi utiliser dans la CMD : net use N: https://<nom de domaine>/remote.php/dav/files/TON_USER /persistent:yes

Avec possibilité de devoir rajouter le nom du dossier où est stocké le site Nextcloud, juste avant le remote.php

On met nos identifiants, et ça marche. 

L'inconvénient, c'est ça :

 

On ne voit pas le stockage restant et le stockage total.
On va donc faire un script. Je le mets dans /etc/vision_stockage.sh , mais mettez le où vous voulez. 

#!/bin/bash

# Chemin vers le dossier Nextcloud de l'utilisateur
dossier="/bighddd/nextcloud/route/files/"

# Extension bidon pour nos fichiers de suivi
EXT=".xxx"

# Supprime tous les fichiers précédents avec cette extension
rm -f "$dossier"/*"$EXT"

# Calcul du stockage total et libre en Go
DISK_TOTAL=$(df -BG "$dossier" | awk 'NR==2 {gsub("G","",$2); print $2}')
DISK_FREE=$(df -BG "$dossier" | awk 'NR==2 {gsub("G","",$4); print $4}')

# Calcule le stockage utilisé
DISK_USED=$((DISK_TOTAL - DISK_FREE))

# Crée un fichier dont le nom contient le stockage utilisé / total
FILENAME="${DISK_USED}Go_SUR_${DISK_TOTAL}Go$EXT"
echo -n "" > "$dossier/$FILENAME"
chown www-data:www-data "$dossier/$FILENAME"
sudo -u www-data php /var/www/nextcloud/occ files:scan route

Ensuite je fais :

sudo crontab -e -u root 

et je rajoute la ligne */15 * * * * /etc/vision_stockage.sh
Cela va faire que toute les 15 minutes, le fichier va s'actualiser.

Voilà ce que ça donne. À l'avenir je verrai bien une image au lieu d'un fichier vierge pour indiquer le stockage en pourcentage, avec de la copie de fichier image pour l'afficher, mais pour l'instant on va rester sur ça car ça marche très bien et que actuellement il est 2h du matin, de nouvelle année. 

Donc je vous souhaite une bonne année, et que mon serveur fonctionne, salut !

Posté le 1 janvier 2026 par _Antonin_