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
- NC refuse les sauts de majeure : on enchaîne 16→17→…→30, un upgrade à la fois.
version.php(entrypoint Docker) ≠ champversiondeconfig.php(occ upgrade) depuis NC 20. Resynchroniser après chaque upgrade, sinon « Updates between multiple major versions unsupported » alors qu’on n’a rien sauté.- Volumes en UID 33 (
www-dataconteneur) avant tout, sinon « Cannot write into config directory ». installed: truene suffit pas : vérifierneedsDbUpgrade: falsepour confirmer que la base a suivi.- MariaDB 10.6 couvre NC 16→30 : pas besoin de migrer le moteur de base pendant la chaîne.