J’ai depuis plusieurs années un NAS sous OpenMediaVault. Bien que je fasse les mises à jour au grès de leurs sorties et alors que j’utilise la dernière version stable d’OMV, force est de constater que celle-ci est encore basée sur Debian 9.
Du coup, qui dit Debian 9, dit PHP 7.0. Or cette version n’est plus supportée depuis plus d’1 an et cela m’empêche d’élever la version de NextCloud au delà de la v15. C’est pour cela que j’ai étudié les possibilités pour palier à ce problème.
Quelques explications sur mon installation de NextCloud
Mon installation de NextCloud est une installation classique, sans aucun plugin OpenMediaVault :
- Création d’un virtual host à la main, consommant le PHP natif d’OpenMediaVault.
- Installation au sein d’un sous répertoire de /var/www/.
- Utilisation du serveur mail d’OpenMediaVault.
- Utilisation du MySQL d’OpenMediaVault, pour ça j’utilise un plugin.
Je me retrouve donc avec un NextCloud sur mon NAS installé en parallèle d’OpenMediaVault mais jouissant d’une certaine indépendance.
Les différentes solutions envisagées
Mise à jour de PHP
Malheureusement OpenMediaVault est écrit, entre autre, en PHP. Et mettre à jour la version courante de PHP présente de forts risques de voir toute l’interface ne plus fonctionner. Du coup cette solution a été exclue.
Ajout d’une seconde version de PHP en parallèle
Apparemment pour Debian il existe un dépôt qui ferait l’affaire: Sury. Cependant, j’ai voulu l’essayer et je me suis rendu compte qu’il installait bien la dernière version de PHP mais qu’il touchait également à la version courante… Trop risqué, solution rejetée.
Utilisation d’un container Docker
C’est la solution de la containérisation que j’ai donc retenue et ça tombe bien il y a un plugin OpenMediaVault pour manager Docker ! Mon seul problème étant que PHP-FPM tourne généralement sous le port 9000, port déjà utilisé dans mon cas, mais après quelques modifications le problème est vite résolu.
Installation d’un container PHP 7.4 sous OpenMediaVault 4
Installation de Docker
Installer le plugin Docker est assez simple. Il suffit de commencer par installer le plugin OMV-Extras.org, puis ensuite d’activer le dépôt Docker CE :
Et pour finir il n’y a qu’à installer le plugin Docker :
Récupération de l’image PHP
Récupérer une image via le plugin Docker est super simple ! Prenons par exemple mon image PHP qui fonctionne parfaitement avec NextCloud :
Préparation de la configuration et des optimisations du container
Maintenant nous allons préparer les fichiers de configurations qui seront montés en volume Docker afin de se substituer à ceux présents dans l’image.
En effet, mon image est assez complète, trop même puisqu’elle embarque x-debug par défaut. J’ai donc fait une modification pour décharger ce module :
cat /srv/docker/docker-php-ext-xdebug.ini
;zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.soAutre modification, j’ai déjà une application qui tourne sur mon port 9000 : Logitech Media Server qui assure le multi-room chez moi. Du coup, là encore, j’ai du faire quelques modifications pour faire tourner PHP sur un port différent (9001) mais également pour élever la quantité de mémoire disponible pour PHP comme le conseille les recommandations de NextCloud.
cat /srv/docker/zz-docker.conf
[global]
daemonize = no
[www]
listen = 9001
php_admin_value[memory_limit] = 512MMise en place d’un utilisateur dédié
L’image alpine utilise par défaut un utilisateur web avec pour UID et GID 82 qui n’est pas présent sous Debian. Du coup j’ai du le créer. Comme nom, j’ai choisi www-docker afin de ressembler au fameux utilisateur et groupe www-data de Debian :
groupadd -g 82 www-docker
useradd -u 82 -g 82 -M www-dockerPour que le Nginx d’OpenMediaVault puisse accéder aux informations, on va rajouter ww-data au groupe www-docker :
usermod -a -G www-docker www-dataCréation du container
La création d’un container passe par un clic sur le bouton « Démarrer l’image » :
Puis ensuite on configure le future container en prenant soin de monter :
- Le répertoire où se trouve les sources de NextCloud.
- Le dossier contenant les données de NextCloud.
- Le répertoire de logs de NextCloud.
- Les fichiers de configuration préparés précédemment.
- Tout les volumes partagés dans NextCloud.
Bascule de NextCloud vers le container PHP
La bascule demande de modifier la configuration de Nginx pour taper sur le nouveau port :
fastcgi_pass 127.0.0.1:9001Puis ensuite il faut réattribuer quelques droits :
chown -R www-docker:www-docker /var/www/nextcloud /var/log/nextcloud /srv/dev-disk-by-label-omvdata/nextcloudEt pour finir on modifie la tache planifiée pour passer par docker :
cat /etc/cron.d/nextcloud
# Settings
NC_PATH=/var/www/nextcloud
PHP_UID=82
DOCKER_IMAGE=php
# Global
#*/15 * * * * www-data php -f ${NC_PATH}/cron.php
*/15 * * * * root docker exec -u ${PHP_UID} -i ${DOCKER_IMAGE} php -f ${NC_PATH}/cron.phpMise à jour de NextCloud vers la dernière version
Pour mettre à jour NextCloud, rien de plus simple : il suffit d’utiliser l’interface web et de ne pas oublier que pour lancer la commande occ upgrade on doit maintenant passer par docker :
docker exec -u 82 -i php php -f /var/www/nextcloud/occ upgradeAu final, ça donne ça :
Pour finir un petit scan de sécurité histoire de contrôler son instance NextCloud :
Me voila enfin sous la dernière version de NextCloud tournant sous PHP 7.4 ! Je ne sais pas si c’est du ressenti ou pas mais je trouve l’interface plus rapide à parcourir avec PHP 7.4 !















Commentaires
7 réponses à “PHP 7.4 et NextCloud 18 sous OpenMediaVault 4”
OMV 5 est sorti hier, basée sur Debian 10…
J’ai préparé l’article il y a plusieurs jours… Zut. J’adore le mode de mise à jour au passage… Pas officiel mais on dit pas que ça marche pas…
J’attendais cette version car je dois ré-installé le mien: HP N54L. Il est toujours en version 2.1 (stoneburner). Je sais, c’est pas bien. Ce qui m’embête c’est que j’ai une VM qui tourne dessus et que Debian a abandonné le support VirtualBox dans la version 10. Donc, plus de plugin VirtualBox. Il va falloir bricoler.
Je comptais tester la nouvelle version d’OMV dans une VM. Elle ne marche pas?
Et pourquoi pas docker ? C’est pour quoi le VM ? Sinon ProxMox avec OMV dans une VM ?
J’ai un serveur de mail qui tourne dessus avec une config un peu complexe et j’ai la flemme de tout refaire. J’avais également un serveur Nextcloud que je viens de migrer vers un Kimsufi (Ça a aussi du bon le confinement…)
Rien qui ne peut aller dans Docker. Ça sera plus léger et surtout as Code donc migrable plus facilement 😃.
Sinon j’attends les premiers retours et je tente une migration 😃.
Je ne suis pas super fan de tout ce qui est containerisation, ça bouge trop et trop vite. je n’ai pas envie d’y passer ma vie.
Je vais attendre un peu aussi.
Merci pour les articles.