Guide de déploiement

Héberger Nextcloud sur VPS : guide NC 35, PHP 8.3 et MariaDB 11

Déployer sur un VPS Cloud →

Tutoriel

Self-hosting

Héberger Nextcloud sur VPS : guide NC 35, PHP 8.3 et MariaDB 11

Nextcloud est l'une des applications les plus déployées en self-hosting — et l'une des plus mal configurées. Entre l'instance qui tourne sans Redis (et qui rame), sans TLS forcé (et qui expose les données), la mise à jour de mai 2026 qui corrige deux vulnérabilités critiques de contournement du 2FA, et désormais les régressions propres à NC 34.0.0 — apps recommandées absentes au premier démarrage, contrainte dupliquée sur PostgreSQL qui peut provoquer une explosion CPU — chaque version apporte ses propres pièges. Nextcloud 35 (Hub 26 Summer, sorti le 15 septembre 2026) ajoute deux contraintes majeures : PHP 8.3 minimum obligatoire et la suppression de mysqldump dans MariaDB 11. Ce guide vous emmène de l'installation complète à la vérification de sécurité, en couvrant les correctifs NC 34.0.2, le chemin NC35 et les 5 erreurs les plus fréquentes.

20 min de lecture11 étapes
Sommaire· Alerte sécurité — CVE de contournement 2FA de mai 20261/25
  1. 01Alerte sécurité — CVE de contournement 2FA de mai 2026
  2. 02NC 34.0.0 — apps recommandées absentes au premier démarrage
  3. 03NC 34.0.0 — contrainte dupliquée sur PostgreSQL et explosion CPU
  4. 04Prérequis et dimensionnement
  5. 05Installation de Nextcloud avec Docker Compose
  6. 06Vérifier si votre instance est vulnérable aux CVE 2FA
  7. 07Optimiser les performances avec Redis et OPcache
  8. 08Les 5 erreurs fréquentes sur une instance Nextcloud
  9. 09Vérification de l'efficacité de Redis avec occ
  10. 10Envois de plus de 40 Go derrière Cloudflare : l'assemblage perdu
  11. 11Les limites à aligner, du CDN jusqu'à PHP
  12. 12Configurer Nextcloud pour les très gros envois
  13. 13Dépannage des gros envois : les messages réels
  14. 14Sauvegardes Nextcloud — données, base et config
  15. 15Sauvegarde avec MariaDB 11 — mariadb-dump remplace mysqldump
  16. 16Prochaines étapes — aller plus loin avec votre instance
  17. 17Office 2021 en fin de vie : activer la co-édition avec Collabora Online ou OnlyOffice
  18. 18Collabora Online ou OnlyOffice : lequel choisir ?
  19. 19Quel éditeur choisir ?
  20. 20Office 2021 : ce qui s'arrête, et le dépannage de Collabora
  21. 21Mettre à jour Nextcloud en production
  22. 22PHP 8.3 : migration et prérequis Nextcloud 35
  23. 23Nextcloud 35 : chemin de mise à jour et versions PHP supportées
  24. 24Vérifier la compatibilité de vos apps avant de passer à Nextcloud 35
  25. 25Recognize v7 — déboguer l'erreur silencieuse « sh: exec: line 1 »

Alerte sécurité — CVE de contournement 2FA de mai 2026

En mai 2026, deux vulnérabilités critiques de contournement de l'authentification à deux facteurs ont été divulguées dans Nextcloud :

CVE-2026-45690 (score CVSS 5.9, divulguée le 15 mai 2026) : un attaquant disposant de l'identifiant et du mot de passe d'un compte peut contourner la vérification 2FA en utilisant une connexion HTTP Basic Auth (authentification basique via l'en-tête Authorization: Basic base64(user:pass)). Nextcloud, dans les versions affectées, acceptait HTTP Basic Auth même lorsque le 2FA était activé pour le compte ciblé, sans exiger la vérification du second facteur.

CVE-2026-45691 (score CVSS 5.9, divulguée le 13 mai 2026) : même classe de vulnérabilité, mais exploitable via un token Bearer DAV — le protocole WebDAV, notamment utilisé par les clients de synchronisation de bureau (Nextcloud Desktop, Nautilus, Finder). Un attaquant pouvant intercepter ou deviner un token WebDAV peut accéder à l'instance sans 2FA.

Les deux CVE sont corrigées dans Nextcloud 32.0.9 (branche 32) et 33.0.3 (branche 33). Les branches 34.x et supérieures ne sont pas affectées. Vérifier si votre instance est vulnérable (voir section dédiée plus bas).

NC 34.0.0 — apps recommandées absentes au premier démarrage

Nextcloud 34.0.0 introduit une régression dans le wizard d'installation : les applications recommandées (Notes, Calendar, Contacts) ne sont pas proposées lors de la configuration initiale. La liste des apps suggérées reste vide, quel que soit le profil d'installation choisi.

Impact concret : une instance fraîche en NC 34.0.0 ne dispose pas des applications de base. Les utilisateurs qui espèrent synchroniser leur agenda CalDAV ou leurs contacts CardDAV doivent les installer manuellement depuis l'interface d'administration.

Sources : issues GitHub #61313 et #61611 — corrigé dans 34.0.2.

Vérifier si vos apps sont présentes :

docker compose exec -u www-data app php occ app:list | grep -E 'calendar|contacts|notes'

Si la commande ne retourne rien, les apps ne sont pas installées. Pour les ajouter manuellement :

docker compose exec -u www-data app php occ app:install calendar
docker compose exec -u www-data app php occ app:install contacts
docker compose exec -u www-data app php occ app:install notes

Recommandation : démarrer directement en 34.0.2 ou supérieur plutôt qu'en 34.0.0. Si votre instance tourne en 34.0.0, la mise à jour vers 34.0.2 restaure le wizard — mais les apps manquantes sur l'instance existante doivent tout de même être installées manuellement.

NC 34.0.0 — contrainte dupliquée sur PostgreSQL et explosion CPU

Sur les instances utilisant PostgreSQL (en lieu et place de MariaDB/MySQL), une migration interrompue de Nextcloud 34.0.0 peut laisser une contrainte dupliquée sur la table oc_filecache_extended. Ce doublon passe inaperçu au démarrage mais provoque une explosion de CPU et de RAM lors du prochain scan de fichiers (files:scan) ou d'une maintenance automatique.

Symptômes : charge CPU anormalement élevée sur le conteneur Nextcloud, scan de fichiers qui ne se termine pas, erreurs dans les logs du type duplicate key value violates unique constraint.

Source : issue GitHub #61597.

Vérification et correctif :

# 1. Nettoyer les entrées orphelines du cache de fichiers
docker compose exec -u www-data app php occ files:cleanup

# 2. Recréer les index de la table problématique
docker compose exec -u www-data app php occ db:add-missing-indices

# 3. Vérifier qu'aucun index dupliqué ne subsiste
docker compose exec -u www-data app php occ db:add-missing-columns

Si les erreurs persistent, passer directement à 34.0.2 qui contient le correctif de migration.

Note : ce problème ne touche pas les instances MariaDB/MySQL. Les instances PostgreSQL en production sur NC 34.0.0 doivent appliquer ces commandes avant le prochain scan automatique.

Prérequis et dimensionnement

Nextcloud est une application PHP polyvalente qui peut tourner légèrement sur un petit VPS ou devenir gourmande si vous l'utilisez comme stockage principal de fichiers volumineux.

Configuration minimale recommandée :
- VPS avec 2 Go de RAM (4 Go si vous gérez plus de 5 utilisateurs actifs).
- SSD obligatoire : Nextcloud effectue de nombreuses opérations de fichiers et de miniatures. Un disque HDD rend l'interface très lente.
- 20 Go d'espace minimum pour l'installation, plus l'espace pour vos données (prévoyez 2× la taille de vos fichiers pour les vignettes et les versions).
- Ubuntu 22.04 ou Debian 12.
- Docker Engine ≥ 24 et Docker Compose V2.
- Un nom de domaine et un certificat TLS (Let's Encrypt via Certbot).
- Les ports 80 et 443 ouverts dans votre firewall.

Installation de Nextcloud avec Docker Compose

  1. Étape 1 — Créer la structure du projet

    mkdir -p /opt/nextcloud && cd /opt/nextcloud

    Créez le fichier docker-compose.yml :

    version: '3.8'
    services:
      db:
        image: mariadb:10.11
        restart: unless-stopped
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: nextcloud
          MYSQL_USER: nextcloud
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
        volumes:
          - db:/var/lib/mysql
    
      redis:
        image: redis:7-alpine
        restart: unless-stopped
        command: redis-server --requirepass ${REDIS_PASSWORD}
        volumes:
          - redis:/data
    
      app:
        image: nextcloud:34.0.4-apache
        restart: unless-stopped
        ports:
          - '127.0.0.1:8080:80'
        environment:
          MYSQL_HOST: db
          MYSQL_DATABASE: nextcloud
          MYSQL_USER: nextcloud
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
          NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER}
          NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
          NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DOMAIN}
          REDIS_HOST: redis
          REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
        volumes:
          - nextcloud:/var/www/html
        depends_on:
          - db
          - redis
    
    volumes:
      db:
      redis:
      nextcloud:
  2. Étape 2 — Créer le fichier d'environnement

    cat > /opt/nextcloud/.env << 'EOF'
    MYSQL_ROOT_PASSWORD=root_password_fort
    MYSQL_PASSWORD=nextcloud_password_fort
    REDIS_PASSWORD=redis_password_fort
    NEXTCLOUD_ADMIN_USER=admin
    NEXTCLOUD_ADMIN_PASSWORD=admin_password_fort
    NEXTCLOUD_DOMAIN=cloud.votredomaine.com
    EOF
  3. Étape 3 — Lancer les conteneurs

    docker compose up -d

    Le premier démarrage prend 2 à 4 minutes : Nextcloud installe et configure l'application, crée les tables de base de données et configure Redis. Suivez la progression avec :

    docker compose logs -f app

    Attendez le message Nextcloud was successfully installed avant de continuer.

  4. Étape 4 — Configurer Nginx avec TLS

    apt install -y nginx certbot python3-certbot-nginx
    
    cat > /etc/nginx/sites-available/nextcloud << 'EOF'
    server {
        server_name cloud.votredomaine.com;
        client_max_body_size 10G;
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_read_timeout 3600s;
        }
    }
    EOF
    
    ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
    certbot --nginx -d cloud.votredomaine.com
    nginx -t && systemctl reload nginx
  5. Étape 5 — Configurer l'URL de confiance dans Nextcloud

    Après l'installation, Nextcloud doit connaître son domaine public pour générer des liens corrects et accepter les connexions.

    Éditez config.php dans le conteneur :

    docker compose exec -u www-data app php occ config:system:set trusted_domains 0 \
      --value=cloud.votredomaine.com
    docker compose exec -u www-data app php occ config:system:set overwrite.cli.url \
      --value=https://cloud.votredomaine.com
    docker compose exec -u www-data app php occ config:system:set htaccess.RewriteBase --value='/'
    docker compose exec -u www-data app php occ maintenance:update:htaccess

Vérifier si votre instance est vulnérable aux CVE 2FA

Si votre instance Nextcloud tourne sur une version 32.x antérieure à 32.0.9 ou 33.x antérieure à 33.0.3 (et que vous avez le 2FA activé), voici comment vérifier votre exposition et la corriger. Les branches 34.x et supérieures ne sont pas affectées.

Vérifier la version actuelle :

docker compose exec -u www-data app php occ status
# Affiche : Nextcloud version: 32.0.X, 33.0.X ou 34.0.X

Versions vulnérables : toutes les versions Nextcloud 32.x < 32.0.9 et 33.x < 33.0.3. Les branches 34.x et supérieures ne sont pas affectées par ces CVE.

Test de vulnérabilité (sur votre propre instance uniquement) :

# Testez si HTTP Basic Auth contourne le 2FA
curl -u utilisateur:motdepasse -X PROPFIND \
  https://cloud.votredomaine.com/remote.php/dav/files/utilisateur/ \
  -H "Depth: 0" -s -o /dev/null -w "%{http_code}"

Si la commande retourne 207 Multi-Status sans que le code 2FA ne soit demandé, votre instance est vulnérable à CVE-2026-45690.

Mettre à jour vers la version corrigée :

# Branche 32 → 32.0.9
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:32.0.9-apache|g' docker-compose.yml
# Branche 33 → 33.0.3
# sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:33.0.3-apache|g' docker-compose.yml
docker compose pull app
docker compose up -d app
docker compose exec -u www-data app php occ upgrade

Optimiser les performances avec Redis et OPcache

Nextcloud sans Redis est une Nextcloud lente. Redis joue deux rôles critiques : cache de sessions (évite les lectures/écritures disque à chaque requête authentifiée) et verrou distribué (file locking) qui empêche les conflits lors de synchronisations simultanées.

Vérifiez que Redis est bien connecté :

docker compose exec -u www-data app php occ config:system:get redis
# Doit afficher un tableau avec host, port, password

Si rien n'apparaît, ajoutez manuellement dans config.php du volume Nextcloud :

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
    'host' => 'redis',
    'port' => 6379,
    'password' => 'VOTRE_REDIS_PASSWORD',
],

OPcache PHP. L'image Docker officielle de Nextcloud inclut OPcache préconfiguré. Vérifiez qu'il est actif :

docker compose exec app php -r "echo opcache_get_status()['opcache_enabled'] ? 'OPcache actif' : 'OPcache inactif';"

Résultat attendu : l'interface Nextcloud doit être notablement plus réactive avec Redis. La différence est perceptible dès la première navigation : les requêtes qui lisaient le disque à chaque accès s'appuient désormais sur le cache en mémoire.

Les 5 erreurs fréquentes sur une instance Nextcloud

Erreur 1 — Redis non configuré. L'interface est lente et les synchronisations simultanées créent des conflits. Solution : vérifier et configurer Redis comme décrit ci-dessus.

Erreur 2 — overwrite.cli.url pointant vers http:// au lieu de https://. Les liens de partage, les notifications e-mail et les liens OIDC génèrent des URLs HTTP non sécurisées. Solution : php occ config:system:set overwrite.cli.url --value=https://votre-domaine.com.

Erreur 3 — trusted_domains mal configuré. Accès refusé avec l'erreur « You are accessing the server from an untrusted domain ». Solution : ajouter votre domaine avec php occ config:system:set trusted_domains 0 --value=votre-domaine.com.

Erreur 4 — Taille max des fichiers upload limitée à 2 Mo. La valeur par défaut de PHP est trop basse pour de vrais fichiers. Solution : dans Nginx, ajouter client_max_body_size 10G; et dans le conteneur PHP, configurer upload_max_filesize=10G et post_max_size=10G dans un fichier .ini monté.

Erreur 5 — Mise à jour manquée et instance vulnérable. Nextcloud publie des mises à jour de sécurité régulièrement. Sans surveillance des CVE et sans mise à jour automatique, l'instance devient vulnérable. Solution : configurer les notifications de mise à jour dans l'interface admin et planifier des mises à jour régulières.

Vérification de l'efficacité de Redis avec occ

Nextcloud fournit un outil de diagnostic intégré pour vérifier que votre cache Redis est effectivement utilisé :

# Vérifier l'état général de l'instance
docker compose exec -u www-data app php occ status

# Vérifier les avertissements de configuration (memcache, Redis, HTTPS…)
docker compose exec -u www-data app php occ check

# Afficher la configuration Redis actuelle
docker compose exec -u www-data app php occ config:system:get redis

La commande occ check liste tous les problèmes de configuration détectés : Redis absent, HTTPS non forcé, serveur de mail non configuré, fichiers de données dans le répertoire web (risque de sécurité), etc. C'est le premier diagnostic à lancer sur toute instance Nextcloud existante avant de la déclarer propre.

Envois de plus de 40 Go derrière Cloudflare : l'assemblage perdu

Nextcloud n'envoie pas un gros fichier d'un bloc : le client le découpe en fragments (chunks), déposés dans un dossier temporaire, puis demande au serveur de les assembler par une requête finale MOVE …/.file.

L'issue nextcloud/server #65408, ouverte le 12 octobre 2026 sur Nextcloud 35, montre ce qui casse : un fichier d'environ 43 Go déposé par lien de partage public, tous les fragments acceptés (201), puis un assemblage d'environ 17 minutes. Cloudflare coupe une réponse qui dépasse son délai de lecture (125 secondes par défaut selon sa documentation, environ 100 secondes mesurées par le rapporteur via Cloudflare Tunnel) et renvoie une 524.

Le point d'entrée des partages publics, publicremote.php, n'appelle pas ignore_user_abort(true), contrairement à remote.php : PHP interrompt l'assemblage à la fermeture de la connexion, puis le navigateur supprime les fragments par une requête DELETE. Les fichiers de 4 à 5 Go passent encore. Au 22 octobre 2026, l'issue est ouverte, sans correctif publié.

Les limites à aligner, du CDN jusqu'à PHP

  • Corps de requête Cloudflare — 100 Mo par requête en Free et Pro, 200 Mo en Business, jusqu'à 5 Go en Enterprise ; au-delà, réponse 413. Chaque fragment doit rester en dessous.
  • Taille des fragments — files.chunked_upload.max_size vaut 104857600 octets (100 Mio) par défaut, un peu plus que 100 Mo : descendez à 50 Mio en Free ou Pro.
  • Délai du CDN — 125 secondes, relevable jusqu'à 6 000 secondes en Enterprise seulement : c'est la limite que l'assemblage dépasse.
  • nginx — proxy_request_buffering off transmet le corps au fil de sa réception au lieu de le lire en entier ; proxy_read_timeout vaut 60 secondes par défaut.
  • PHP — la documentation Nextcloud propose max_execution_time et max_input_time à 3600 ; ignore_user_abort = On laisse l'assemblage finir après la coupure du proxy.

Configurer Nextcloud pour les très gros envois

  1. Sortir les envois lourds du proxy

    Cloudflare recommande un sous-domaine non proxifié (DNS uniquement) pour les requêtes de plus de 125 secondes. Créez upload.votre-domaine.com en DNS uniquement, ajoutez-le avec docker compose exec -u www-data app php occ config:system:set trusted_domains 1 --value=upload.votre-domaine.com, puis certbot --nginx -d upload.votre-domaine.com. Ce nom expose l'IP du serveur : réservez-le aux transferts lourds.

  2. Réduire les fragments

    docker compose exec -u www-data app php occ config:system:set files.chunked_upload.max_size --type int --value 52428800 fixe 50 Mio (valeur en octets).

  3. Ajuster nginx

    Dans location /, ajoutez proxy_request_buffering off; et proxy_send_timeout 3600s;, gardez proxy_read_timeout 3600s;, puis nginx -t && systemctl reload nginx.

  4. Ajuster PHP

    Créez /opt/nextcloud/php-uploads.ini avec ignore_user_abort = On, max_execution_time = 3600 et max_input_time = 3600, montez-le dans le service app : - ./php-uploads.ini:/usr/local/etc/php/conf.d/zz-uploads.ini:ro, puis docker compose up -d app.

  5. Vérifier et tester

    docker compose exec app php -i | grep ignore_user_abort doit afficher ignore_user_abort => On => On. Envoyez ensuite un fichier de plusieurs gigaoctets par le sous-domaine et suivez docker compose logs -f app.

  6. Choisir ce qui passe par Cloudflare

    Le domaine principal peut rester proxifié, seul le sous-domaine des transferts lourds passant en DNS uniquement : voyez notre guide sur le proxy Cloudflare.

Dépannage des gros envois : les messages réels

Error 524: a timeout occurred — la réponse au MOVE …/.file final n'est pas arrivée dans le délai de Cloudflare. Remède : le sous-domaine non proxifié.

413 Request entity too large — un fragment dépasse le plafond du plan Cloudflare ou client_max_body_size. Remède : réduire files.chunked_upload.max_size.

Could not open file: web-file-upload-<id>/75 … file doesn't seem to exist — relevé dans l'issue #65408 : l'assemblage continuait alors que le navigateur avait supprimé les fragments. Le rapporteur bloque la requête DELETE sur /public.php/dav/uploads/ ; la tâche UploadCleanup purge ensuite les fragments abandonnés après 24 heures. Avec nginx, l'équivalent est un bloc location ^~ /public.php/dav/uploads/ contenant if ($request_method = DELETE) { return 403; } et le même proxy_pass. Contournement non officiel, à retirer dès un correctif.

504 Gateway Time-out pendant le MOVE — c'est nginx qui abandonne : la documentation Nextcloud cite fastcgi_read_timeout en PHP-FPM, ici proxy_read_timeout.

Sauvegardes Nextcloud — données, base et config

Nextcloud stocke ses données dans trois endroits distincts, et une sauvegarde complète doit couvrir les trois :

1. La base de données MariaDB : contient les métadonnées des fichiers, les utilisateurs, les partages, les applications installées et leur configuration.
2. Le volume nextcloud (données de l'application) : contient le code PHP de Nextcloud, les applications installées et config/config.php — le fichier de configuration principal.
3. Les fichiers utilisateurs : par défaut dans le volume Docker ou dans un chemin external défini par datadirectory dans config.php.

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/opt/nextcloud/backups
mkdir -p $BACKUP_DIR

# 1. Activer le mode maintenance pour cohérence
docker compose exec -u www-data app php occ maintenance:mode --on

# 2. Sauvegarder la base de données (MariaDB 10.x)
docker compose exec -T db \
  mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud | gzip > $BACKUP_DIR/db-$DATE.sql.gz

# 3. Sauvegarder config.php
docker compose cp app:/var/www/html/config/config.php $BACKUP_DIR/config-$DATE.php

# 4. Désactiver le mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --off

Note MariaDB 11+ : si vous utilisez mariadb:11.x, remplacez mysqldump par mariadb-dump (voir section dédiée ci-dessous).

Sauvegarde avec MariaDB 11 — mariadb-dump remplace mysqldump

À partir de MariaDB 11.0, les binaires mysqldump et mysql ont été retirés de l'image Docker officielle. Seules les commandes mariadb-dump et mariadb sont désormais disponibles. Si votre docker-compose.yml monte une image mariadb:11.x ou ultérieure et que vos scripts de sauvegarde utilisent encore mysqldump, ils échoueront silencieusement — la commande n'est pas trouvée, le script sort en erreur sans message explicite dans les logs Nextcloud.

Vérifier votre version MariaDB :

docker compose exec db mariadb --version
# ou
docker compose exec db mariadb -u nextcloud -p${MYSQL_PASSWORD} -e "SELECT VERSION();"

Script de sauvegarde compatible MariaDB 11+ :

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/opt/nextcloud/backups
mkdir -p $BACKUP_DIR

# 1. Mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --on

# 2. Dump avec mariadb-dump (MariaDB 11+) — remplace mysqldump
docker compose exec -T db \
  mariadb-dump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
  | gzip > $BACKUP_DIR/db-$DATE.sql.gz

# 3. Vérification de l'archive
if gzip -t $BACKUP_DIR/db-$DATE.sql.gz 2>/dev/null; then
  echo "Sauvegarde OK : $BACKUP_DIR/db-$DATE.sql.gz"
else
  echo "ERREUR : archive corrompue ou vide"
  docker compose exec -u www-data app php occ maintenance:mode --off
  exit 1
fi

# 4. Sauvegarder config.php
docker compose cp app:/var/www/html/config/config.php $BACKUP_DIR/config-$DATE.php

# 5. Quitter le mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --off

Restauration :

# Restaurer la base de données
gunzip -c $BACKUP_DIR/db-$DATE.sql.gz | \
  docker compose exec -T db mariadb -u nextcloud -p${MYSQL_PASSWORD} nextcloud

Note : si vous restez sur mariadb:10.11 (encore supportée, EOL février 2028), mysqldump et mariadb-dump fonctionnent tous les deux. La suppression du binaire mysqldump ne touche que MariaDB 11.0 et supérieur. Cependant, adopter mariadb-dump dès maintenant rend vos scripts pérennes pour la migration future.

Prochaines étapes — aller plus loin avec votre instance

Une fois Nextcloud installé et sécurisé, vous pouvez aller plus loin :

Activer Talk (visioconférence) : installez l'application Nextcloud Talk depuis l'interface d'administration. Pour les réunions de plus de 4–5 participants, un serveur TURN est requis (Coturn sur un VPS dédié).

Activer OnlyOffice ou Collabora Online (édition de documents en ligne) : ces applications nécessitent leur propre conteneur Docker et une configuration Nextcloud Office. Elles permettent de créer et modifier des fichiers .docx, .xlsx et .pptx directement dans l'interface web.

Monitoring de l'instance : configurez les alertes dans Administration → Monitoring pour recevoir des notifications e-mail si Nextcloud détecte des erreurs de configuration, des mises à jour de sécurité ou des problèmes de quota.

Office 2021 en fin de vie : activer la co-édition avec Collabora Online ou OnlyOffice

Microsoft Office 2021 a atteint sa fin de vie le 13 octobre 2026 : plus aucun patch de sécurité ne sera publié. Pour les équipes qui co-éditent des fichiers .docx, .xlsx et .pptx dans Nextcloud, deux suites bureautiques open source couvrent ce besoin directement depuis l'interface web.

Collabora Online est la version en ligne de LibreOffice. Elle est distribuée sous licence AGPL et s'intègre dans Nextcloud via l'application *Nextcloud Office* (anciennement Collabora Online App). L'éditeur tourne dans un conteneur séparé basé sur collabora/code:latest et communique avec Nextcloud par WebSocket.

OnlyOffice Document Server offre une interface plus proche de Microsoft Office — menus ruban, présentation des outils familière pour les utilisateurs Windows. Il est lui aussi distribué sous licence AGPL. L'intégration s'effectue via l'application *ONLYOFFICE* disponible dans le Nextcloud App Store.

Activation via le Nextcloud App Store (méthode intégrée) :

# Collabora Online
docker compose exec -u www-data app php occ app:install richdocuments

# OnlyOffice
docker compose exec -u www-data app php occ app:install onlyoffice

Déploiement Docker séparé — exemple pour Collabora Online :

Ajoutez ce service dans votre docker-compose.yml :

  collabora:
    image: collabora/code:latest
    restart: unless-stopped
    environment:
      domain: cloud\.votredomaine\.com
      username: admin
      password: ${COLLABORA_PASSWORD}
      extra_params: --o:ssl.enable=false --o:ssl.termination=true
    ports:
      - '127.0.0.1:9980:9980'
    cap_add:
      - MKNOD

Configure ensuite l'URL du serveur Collabora dans Nextcloud (Administration → Office → URL du serveur Collabora : https://office.votredomaine.com).

Empreinte mémoire : Collabora Online ajoute environ +300 Mo de RAM par processus actif (un processus par document ouvert simultanément). OnlyOffice est légèrement plus gourmand : +400 Mo par instance active. Sur un VPS 2 Go, limitez l'usage simultané à 2–3 documents ou passez à 4 Go.

Formats supportés : les deux apps lisent et écrivent les formats Microsoft Office (.docx, .xlsx, .pptx) ainsi que les formats OpenDocument (.odt, .ods, .odp).

Collabora Online ou OnlyOffice : lequel choisir ?

Faites défiler le tableau

CritèreCollabora OnlineOnlyOffice Docs
Interface utilisateurLibreOffice familière — courbe d'adaptation pour les équipes WindowsRuban identique à Microsoft Office — adoption immédiate
Compatibilité .docx/.xlsx/.pptxBonne ; .odt/.ods excellentsTrès fidèle aux originaux Microsoft
RAM estimée~300 Mo/processus actif~400 Mo/instance active
SSO/SAML NextcloudIntégration nativeConfiguration supplémentaire requise
Connexions simultanéesSelon l'édition (CODE ou entreprise)Limitées (version communautaire)
CommunautéLibreOffice active, MàJ fréquentesSolide, orientée compat. Microsoft

Quel éditeur choisir ?

Pour une équipe mixte Linux/Windows travaillant majoritairement sur des fichiers Microsoft Office, OnlyOffice réduit la friction à l'adoption. Pour une équipe déjà sur LibreOffice ou avec des contraintes mémoire serrées, Collabora Online est le choix naturel. Les deux apps sont compatibles Nextcloud 35.

Office 2021 : ce qui s'arrête, et le dépannage de Collabora

Selon la page de cycle de vie de Microsoft, Office 2021 (Famille et Petite Entreprise, Famille et Étudiant, Professionnel, versions Mac comprises) et Office LTSC 2021 pour Windows ne reçoivent plus de correctifs depuis le 13 octobre 2026 ; seul Office LTSC 2021 pour Mac passe en support étendu.

À l'activation de Collabora, « Could not establish connection to the Collabora Online server. » (Administration → Office) signifie que Nextcloud ne joint pas l'URL déclarée. Testez depuis le conteneur : docker compose exec app curl -sI https://office.votredomaine.com/hosting/discovery. Pour reconfigurer et diagnostiquer : docker compose exec -u www-data app php occ richdocuments:activate-config --wopi-url=https://office.votredomaine.com ; une réponse Failed to fetch discovery endpoint from … désigne le réseau ou TLS. L'avertissement « You have not configured the allow-list for WOPI requests » se lève en déclarant l'IP du serveur Collabora dans la liste d'autorisation WOPI. Comparatif détaillé : Collabora Online ou OnlyOffice.

Mettre à jour Nextcloud en production

La mise à jour de Nextcloud doit toujours passer par le mode maintenance pour éviter les corruptions de données pendant que des clients synchronisent :

# 1. Activer le mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --on

# 2. Sauvegarder la base de données (adapter selon votre version MariaDB)
# MariaDB 10.x :
docker compose exec -T db mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
  | gzip > /opt/nextcloud/backups/pre-update-db.sql.gz
# MariaDB 11+ :
# docker compose exec -T db mariadb-dump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
#   | gzip > /opt/nextcloud/backups/pre-update-db.sql.gz

# 3. Changer la version dans docker-compose.yml (ex: 34.0.4-apache)
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.4-apache|g' docker-compose.yml

# 4. Télécharger la nouvelle image et redémarrer
docker compose pull app
docker compose up -d app

# 5. Exécuter les migrations
docker compose exec -u www-data app php occ upgrade

# 6. Désactiver le mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --off

Vérifiez les logs après la mise à jour (docker compose logs app) et testez un accès utilisateur avant de déclarer la mise à jour réussie.

PHP 8.3 : migration et prérequis Nextcloud 35

Nextcloud 35 rend PHP 8.3 obligatoire — PHP 8.2 n'est plus supporté. Ce changement est documenté dans les notes de mise à jour officielles et dans la matrice de compatibilité PHP de Nextcloud (GitHub wiki *Releases and PHP versions*). Si vous utilisez une installation native (sans Docker) ou une image Docker verrouillée sur PHP 8.2, vous devez migrer PHP avant de pouvoir passer à NC 35.

Vérifier la version PHP utilisée par votre instance :

# En Docker (image officielle nextcloud)
docker compose exec app php --version

# En natif (Apache/PHP-FPM)
php8.2 --version || php8.3 --version

Chemin de migration recommandé sur Ubuntu 22.04 / Debian 12 (installation native) :

# Ajouter le dépôt Ondřej Surý (PHP multi-version)
apt install -y lsb-release apt-transport-https ca-certificates
curl -sSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /etc/apt/keyrings/php.gpg
echo "deb [signed-by=/etc/apt/keyrings/php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" \
  > /etc/apt/sources.list.d/php.list
apt update

# Installer PHP 8.3 avec les extensions requises par Nextcloud
apt install -y php8.3 php8.3-fpm php8.3-mysql php8.3-redis php8.3-gd \
  php8.3-xml php8.3-mbstring php8.3-curl php8.3-zip php8.3-intl \
  php8.3-bcmath php8.3-gmp php8.3-imagick php8.3-opcache

En Docker — l'image nextcloud:35.x-apache embarque déjà PHP 8.3+ : pas de migration PHP manuelle à faire, l'image inclut la version PHP requise. Il suffit de mettre à jour le tag :

# Dans docker-compose.yml
image: nextcloud:35.0.0-apache

Extensions PHP requises par Nextcloud 35 (référence officielle) :

| Extension | Rôle |
|-----------|------|
| gd ou imagick | Génération de miniatures |
| redis | Cache distribué et file locking |
| intl | Internationalisation |
| bcmath, gmp | Cryptographie |
| zip | Gestion des archives |
| opcache | Performances PHP (obligatoire) |

Vérifier les extensions manquantes :

docker compose exec -u www-data app php occ check

La commande occ check liste les extensions PHP manquantes ou mal configurées et indique clairement si PHP 8.3 minimum est satisfait.

Nextcloud 35 : chemin de mise à jour et versions PHP supportées

Nextcloud 35.0.0 est sorti le 15 septembre 2026 (Hub 26 Summer). Cette version impose un chemin de mise à jour séquentiel strict, une version PHP minimale obligatoire (PHP 8.3 — PHP 8.2 abandonné), et entraîne des changements importants pour les environnements MariaDB 11.

PHP 8.3, 8.4 et 8.5 supportés — PHP 8.2 abandonné

Nextcloud 35 supporte officiellement PHP 8.3 (minimum obligatoire), 8.4 et 8.5 (recommandé). PHP 8.2 n'est plus supporté dans NC 35 — une instance tournant sur PHP 8.2 ne pourra pas démarrer après mise à jour vers NC 35. Épinglez toujours sur un tag Docker explicite pour maîtriser la version PHP :

# À éviter : tag implicite
image: nextcloud:latest

# Recommandé : tag précis avec version PHP maîtrisée
image: nextcloud:35.0.0-apache
# ou pour la variante FPM :
image: nextcloud:35.0.0-fpm

Chemin séquentiel obligatoire : v33 → v34 → v35

Nextcloud ne supporte pas les sauts de version dans ses migrations de base de données. Passer directement de v32 ou v33 à v35 peut corrompre la base de données silencieusement, sans message d'erreur clair. Le chemin obligatoire est :

v33.x → v34.x (dernière mineure) → v35.0.0

Chaque étape exige l'exécution de occ upgrade avant de passer à la suivante :

# Étape 1 : montée vers NC 34 (dernière version stable)
docker compose exec -u www-data app php occ maintenance:mode --on
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.4-apache|g' docker-compose.yml
docker compose pull app && docker compose up -d app
docker compose exec -u www-data app php occ upgrade
docker compose exec -u www-data app php occ maintenance:mode --off

# Étape 2 : montée vers NC 35 (après vérification de NC 34)
docker compose exec -u www-data app php occ maintenance:mode --on
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:35.0.0-apache|g' docker-compose.yml
docker compose pull app && docker compose up -d app
docker compose exec -u www-data app php occ upgrade
docker compose exec -u www-data app php occ maintenance:mode --off

Désactiver les apps incompatibles avant chaque montée

Avant de lancer occ upgrade, vérifiez que toutes vos apps tierces sont compatibles avec la version cible. Une app incompatible peut bloquer la migration ou provoquer des erreurs au démarrage :

# Lister les apps actives et leur état
docker compose exec -u www-data app php occ app:list

# Désactiver une app incompatible (exemple : une app communautaire non encore portée)
docker compose exec -u www-data app php occ app:disable nom_de_lapp

Consultez la matrice de compatibilité sur apps.nextcloud.com avant chaque montée de version majeure.

Vérifier la compatibilité de vos apps avant de passer à Nextcloud 35

Avant d'upgrader vers NC 35, lancez la vérification de compatibilité intégrée :

docker exec -u www-data <nom_du_conteneur> php occ app:check-platform-compatibility

Si une app retourne une erreur de compatibilité, désactivez-la avant de lancer la mise à jour :

docker exec -u www-data <nom_du_conteneur> php occ app:disable nom_de_lapp

Les apps les plus souvent bloquantes lors des montées de version majeures : Talk, Calendar, Contacts et les intégrations tierces (OnlyOffice, Collabora). Vérifiez leur compatibilité sur apps.nextcloud.com avant chaque upgrade — la page de chaque app indique les versions Nextcloud supportées.

Rappel : après l'upgrade, relancez occ check pour détecter d'éventuels problèmes de configuration induits par la montée de version :

docker compose exec -u www-data app php occ check

Recognize v7 — déboguer l'erreur silencieuse « sh: exec: line 1 »

L'application Recognize (reconnaissance d'images et de visages) peut échouer silencieusement sur certaines installations Docker avec une erreur du type :

Classifier process output: sh: exec: line 1: recognize/bin/node: not found

Cette erreur n'apparaît pas dans l'interface d'administration — elle se lit uniquement dans les logs du conteneur ou les logs Nextcloud. L'app semble installée et active, mais aucun tag n'est généré.

Causes principales :
- Incompatibilité d'architecture CPU : le binaire Node.js embarqué dans Recognize est compilé pour x86_64. Sur ARM64 (Raspberry Pi, certains VPS ARM), il n'est pas exécutable.
- Binaire manquant ou non exécutable : permissions incorrectes après un montage de volume.

Diagnostic :

# 1. Vérifier les logs du processus de classification
docker compose logs app | grep -i recognize

# 2. Tester le binaire Node directement dans le conteneur
docker compose exec app sh -c "ls -la /var/www/html/apps/recognize/bin/"
docker compose exec app sh -c "/var/www/html/apps/recognize/bin/node --version"

# 3. Vérifier l'architecture du système
docker compose exec app uname -m
# Résultat attendu pour un fonctionnement normal : x86_64

Correctif sur x86_64 :

# Forcer le mode WASM (WebAssembly) si le binaire Node natif échoue
docker compose exec -u www-data app php occ config:app:set recognize \
  tensorflow.gpu_enabled --value=false
docker compose exec -u www-data app php occ config:app:set recognize \
  node_binary --value=""

# Relancer la classification manuelle
docker compose exec -u www-data app php occ recognize:classify

Sur ARM64 : activez le mode WASM dans les paramètres de l'app (Administration → Recognize → Use WASM backend). Ce mode est plus lent mais fonctionne sur toutes les architectures.

Un VPS fiable pour votre instance Nextcloud

Nextcloud a besoin d'un VPS SSD avec une bonne bande passante pour que la synchronisation des fichiers soit fluide. Nos offres VPS Cloud démarrent à 4 GB de RAM avec des snapshots à la demande — exactement ce qu'il faut pour une instance Nextcloud sereine.