PHP 7.4 et NextCloud 18 sous OpenMediaVault 4

OpenMediaVault

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 :

Plugin OMV-Extras.org
Plugin OMV-Extras.org

Et pour finir il n’y a qu’à installer le plugin Docker :

Plugin Docker GUI
Plugin Docker GUI disponible sur OMV-Extras.org

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 :

OMV Docker pull image
OMV Docker pull image php.

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.so

Autre 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] = 512M

Mise 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-docker

Pour 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-data

Création du container

La création d’un container passe par un clic sur le bouton « Démarrer l’image » :

Démarrer l'image
Démarrer l’image docker dans OMV.

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.
Création d'un container Docker
Création d’un container Docker à partir d’une image.

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:9001

Puis 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/nextcloud

Et 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.php

Mise à 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 upgrade

Au final, ça donne ça :

NextCloud Files
Le module Files de NextCloud 18.
NextCloud Deck
Le plugin Deck de NextCloud 18.
NextCloud Notes
Le module Notes de NextCloud 18.

Pour finir un petit scan de sécurité histoire de contrôler son instance NextCloud :

NextCloud Security scan
Check the security of your private Nextcloud server.

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

Pierre

De Pierre le 31 mars 2020

OMV 5 est sorti hier, basée sur Debian 10...

Guillaume Kulakowski

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...

Pierre

De Pierre le 1 avril 2020

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?

Guillaume Kulakowski

Et pourquoi pas docker ? C'est pour quoi le VM ? Sinon ProxMox avec OMV dans une VM ?

Pierre

De Pierre le 1 avril 2020

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...)

Guillaume Kulakowski

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 😃.

Pierre

De Pierre le 1 avril 2020

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.

Les commentaires pour ce poste sont fermés.

Réseaux sociaux