Aller au contenu
Sylvain Joffraud l4w
Retour

Migrer Nextcloud v16→v30 en Docker : le config.php qui ment

Nextcloud refuse les sauts de version : pour passer de la 16 à la 30, il faut enchaîner les upgrades majeurs un par un. Je scripte la chaîne (upgrade-chain.sh), je lance… et ça casse à la v21 :

Updates between multiple major versions are unsupported.

Sauf que je n’ai sauté aucune version. Le problème est ailleurs.

Piège 1 : l’entrypoint Docker et occ upgrade ne sont pas d’accord sur la version

Depuis NC 20, l’entrypoint Docker met à jour version.php au démarrage du conteneur. Mais occ upgrade ne reporte pas toujours ce numéro dans le champ version de config.php. Résultat : version.php dit « 21 », config.php est resté à « 19 », NC croit qu’on tente un saut de 2 majeures → refus.

Fix : après chaque occ upgrade, resynchroniser config.php depuis version.php.

real_version=$(php -r "include '/var/www/html/version.php'; echo implode('.', \$OC_Version);")
occ config:system:set version --value="$real_version"

C’est l’étape 5b de mon upgrade-chain.sh, rejouée à chaque maillon.

Piège 2 : permissions des volumes

Les volumes nc-html/ et nc-data/ doivent appartenir à UID 33 (le www-data du conteneur), pas à mon user hôte. Sinon, dès le premier upgrade : Cannot write into config directory.

sudo chown -R 33:33 nc-html/ nc-data/   # AVANT de lancer la chaîne

Piège 3 : le script rapporte un faux succès

Mon premier check de validation : occ status | grep "installed: true". Insuffisant. NC peut être installed: true tout en ayant une base restée à une mauvaise version — le flag installed ne dit rien sur l’état du schéma.

Fix : vérifier aussi needsDbUpgrade: false. Les deux ensemble = upgrade réellement abouti.

Le bilan

Les trois pièges réglés : 15 étapes (NC 16 → 30) enchaînées en ~11 min. MariaDB 10.6 a tenu toute la chaîne sans changement de version — inutile de migrer la base en parallèle.

Lessons learned

Questions fréquentes

Pourquoi Nextcloud affiche « Updates between multiple major versions are unsupported » alors que je n’ai sauté aucune version ?
Depuis NC 20, l’entrypoint Docker met à jour version.php au démarrage du conteneur, mais occ upgrade ne reporte pas toujours ce numéro dans le champ version de config.php. Du coup version.php dit « 21 » pendant que config.php est resté à « 19 », et NC croit que vous tentez un saut de deux majeures. Resynchronisez config.php sur version.php après chaque upgrade pour lever l’erreur.
Comment migrer Nextcloud d’une vieille version (ex. v16) vers la v30 en Docker ?
Nextcloud refuse les sauts de majeure : il faut enchaîner les upgrades un par un, 16→17→…→30, un seul upgrade majeur à la fois. Scriptez la chaîne et, à chaque maillon, rejouez occ upgrade puis resynchronisez la version dans config.php. Dans ce cas réel, les 15 étapes se sont enchaînées en environ 11 minutes.
Comment resynchroniser le champ version de config.php après un occ upgrade Nextcloud ?
Lisez la vraie version depuis version.php et réécrivez-la dans config.php via occ. Concrètement : real_version=$(php -r "include '/var/www/html/version.php'; echo implode('.', \$OC_Version);") puis occ config:system:set version --value="$real_version", à rejouer après chaque upgrade de la chaîne.
Pourquoi Nextcloud renvoie « Cannot write into config directory » au premier upgrade en Docker ?
Les volumes nc-html/ et nc-data/ doivent appartenir à l’UID 33 (le www-data du conteneur), pas à votre utilisateur hôte. Faites sudo chown -R 33:33 nc-html/ nc-data/ avant de lancer la chaîne d’upgrade pour éviter cette erreur d’écriture.
Pourquoi « installed: true » ne suffit pas à valider un upgrade Nextcloud ?
Le flag installed ne dit rien sur l’état du schéma de base : NC peut être installed: true tout en ayant une base restée à une mauvaise version. Vérifiez aussi needsDbUpgrade: false ; les deux ensemble confirment que l’upgrade a réellement abouti, base comprise.

Partager cet article :

Article précédent
« Compatible Traccar » : 80 % des colliers GPS sont faux
Article suivant
Qwen3.6-27B dense bat un MoE 397B sur le code, en local