Applications

Installer Nextcloud avec Docker (et le rendre rapide)

Mis à jour le 4 octobre 2026 · 12 min de lecture

Nextcloud remplace Google Drive, Google Agenda et Google Contacts : vos fichiers synchronisés sur tous vos appareils, des partages par lien, un agenda et un carnet d’adresses compatibles avec tous les téléphones.

C’est aussi l’application qui a la réputation d’être lente. Elle ne l’est pas forcément : la plupart des lenteurs viennent d’une installation trop minimale. Ce guide installe la bonne base, puis applique les réglages qui font la différence. Je les ai mesurés sur mon propre serveur.

Ce qu’il vous faut

L’architecture : 4 conteneurs

Conteneur Rôle Pourquoi il est indispensable
nextcloud L’application web —
db (PostgreSQL) La base de données SQLite, le choix par défaut, devient très lent dès quelques milliers de fichiers
redis Le cache et les verrous Sans lui, chaque page recalcule tout, et les synchronisations se bloquent entre elles
cron Les tâches de fond Sans lui, les tâches tournent pendant que vous naviguez et ralentissent chaque page

Le docker-compose.yml

Créez un dossier /opt/stacks/nextcloud, puis un fichier .env qui contient le mot de passe de la base :

sudo mkdir -p /opt/stacks/nextcloud && cd /opt/stacks/nextcloud
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" | sudo tee .env >/dev/null
sudo chmod 600 .env

Puis le fichier compose.yml :

name: nextcloud
services:
  app:
    image: nextcloud:34-apache        # version majeure fixée : on change de version à la main
    restart: unless-stopped
    depends_on: [db, redis]
    env_file: .env
    environment:
      POSTGRES_HOST: db
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      REDIS_HOST: redis
      NEXTCLOUD_TRUSTED_DOMAINS: cloud.mondomaine.fr
      OVERWRITEPROTOCOL: https       # Nextcloud est derrière un proxy HTTPS
      TRUSTED_PROXIES: 172.16.0.0/12 # le réseau Docker du reverse proxy
      PHP_UPLOAD_LIMIT: 16G
      PHP_MEMORY_LIMIT: 1G
    volumes:
      - ./html:/var/www/html
      - ./data:/var/www/html/data
    ports:
      - "127.0.0.1:8080:80"          # joignable seulement par le reverse proxy

  cron:
    image: nextcloud:34-apache
    restart: unless-stopped
    entrypoint: /cron.sh
    depends_on: [db, redis]
    volumes:
      - ./html:/var/www/html
      - ./data:/var/www/html/data

  db:
    image: postgres:17-alpine
    restart: unless-stopped
    env_file: .env
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
    volumes:
      - ./db:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: unless-stopped

Lancez le tout :

sudo docker compose up -d

Le générateur docker-compose produit la même base, avec les étiquettes Traefik ou la configuration Caddy déjà prêtes.

Pourquoi fixer la version majeure ? Nextcloud ne permet de monter que d’une version majeure à la fois (33 vers 34, puis 34 vers 35). Avec l’étiquette latest, une mise à jour automatique peut sauter une version et rendre l’installation impossible à démarrer. Avec 34-apache, vous recevez les correctifs de la 34, et vous choisissez le moment de passer à la 35.

Le reverse proxy

Avec Caddy, deux lignes suffisent, plus la redirection dont les applis d’agenda et de contacts ont besoin :

cloud.mondomaine.fr {
    redir /.well-known/carddav /remote.php/dav/ 301
    redir /.well-known/caldav /remote.php/dav/ 301
    reverse_proxy 127.0.0.1:8080
}

Avec Traefik, ajoutez les étiquettes habituelles et un middleware redirectRegex pour ces deux mêmes adresses.

Deux réglages évitent les mauvaises surprises :

  • Pas d’en-tête X-Frame-Options: DENY sur ce site. Nextcloud affiche certaines pages dans un cadre : avec DENY, l’éditeur de documents ou les aperçus restent vides. Utilisez SAMEORIGIN.
  • Des délais longs sur le reverse proxy (une heure, par exemple), sinon l’envoi de gros fichiers est coupé en plein milieu.

Premier démarrage

Ouvrez https://cloud.mondomaine.fr : Nextcloud propose de créer le compte administrateur. Choisissez un nom qui n’est pas admin et un long mot de passe généré.

Puis lancez ces commandes une fois, pour compléter l’installation :

# Raccourci : lancer une commande Nextcloud (occ) dans le conteneur
occ() { sudo docker compose exec -u www-data app php occ "$@"; }

occ background:cron                               # les tâches de fond passent par le conteneur cron
occ config:system:set default_phone_region --value=FR
occ config:system:set maintenance_window_start --type=integer --value=1   # tâches lourdes la nuit (1 h UTC)
occ db:add-missing-indices
occ maintenance:repair --include-expensive

Dans Paramètres d’administration → Vue d’ensemble, il ne doit plus rester d’avertissement important.

Le rendre rapide

C’est ici que tout se joue. Sur mon serveur, l’écran principal mettait plusieurs secondes à s’afficher. Après ces trois réglages, il s’ouvre presque instantanément.

1. Désactiver les applis que vous n’utilisez pas

Nextcloud active d’office une vingtaine d’applis. Chacune ajoute du code à chaque page. Les plus inutiles pour un usage familial :

for a in firstrunwizard nextcloud_announcements recommendations related_resources \
         support survey_client weather_status user_status app_api; do
  occ app:disable "$a"
done

Vous pourrez toujours les réactiver depuis la page Applications.

2. Préparer les miniatures à l’avance

Par défaut, Nextcloud fabrique la miniature d’une photo au moment où vous l’affichez. Un dossier de 500 photos déclenche donc 500 calculs, et la page rame. L’appli Preview Generator les prépare à l’avance :

occ app:install previewgenerator
# Seulement les tailles réellement affichées : moins de calcul, moins de disque
occ config:app:set previewgenerator squareSizes --value="32 256"
occ config:app:set previewgenerator widthSizes  --value="256 384"
occ config:app:set previewgenerator heightSizes --value="256"
occ config:system:set preview_max_x --value=2048 --type=integer
occ config:system:set preview_max_y --value=2048 --type=integer
occ config:app:set preview jpeg_quality --value=70

# Une première fois pour tous les fichiers existants (long : laissez tourner)
occ preview:generate-all

Puis, pour les nouveaux fichiers, planifiez preview:pre-generate toutes les 30 minutes (un timer systemd ou une ligne cron sur le serveur) :

sudo docker compose -f /opt/stacks/nextcloud/compose.yml exec -T -u www-data app php occ preview:pre-generate

3. Vérifier que Redis et le cron travaillent

occ config:system:get memcache.locking     # doit afficher \OC\Memcache\Redis
occ background-job:list --limit=3          # des tâches récentes : le cron tourne

Si l’interface reste lente, mesurez avant de chercher plus loin : dans le navigateur (F12 → Réseau), regardez si c’est la première réponse du serveur qui est lente (problème de serveur ou de base) ou le chargement des fichiers JavaScript (applis en trop, connexion lente).

Les applications

  • Ordinateur : le client de synchronisation Nextcloud (Windows, Mac, Linux).
  • Téléphone : l’appli Nextcloud, avec l’envoi automatique des photos si vous n’utilisez pas Immich.
  • Agenda et contacts sur Android : l’appli DAVx⁵, avec l’adresse https://cloud.mondomaine.fr.
  • iPhone : Réglages → Calendrier → Comptes → Ajouter un compte CalDAV, même adresse.

Créez un compte par personne, et désactivez les inscriptions publiques si vous aviez activé une appli qui les permet.

Sauvegarder Nextcloud

Trois choses à sauvegarder, toutes nécessaires pour restaurer :

Quoi Où Comment
Les fichiers ./data Copie classique (restic, rsync…)
La base de données conteneur db pg_dump chaque nuit, pas une copie du dossier ./db à chaud
La configuration ./html/config/config.php Copie classique : il contient les clés de chiffrement
sudo docker compose exec -T db pg_dump -U nextcloud nextcloud | gzip > nextcloud-$(date +%F).sql.gz

Puis envoyez le tout hors du serveur : sauvegarder son serveur avec restic.

Mettre à jour

  • Correctifs (34.0.x) : sudo docker compose pull && sudo docker compose up -d.
  • Version majeure : sauvegardez, changez 34-apache en 35-apache dans les deux services app et cron, relancez, puis suivez les messages dans Vue d’ensemble. Une version majeure à la fois.

Plus de détails : mettre à jour ses applications Docker sans rien casser.

En cas de problème

Symptôme Cause probable Solution
« Accès par un domaine non approuvé » Le domaine n’est pas dans trusted_domains occ config:system:set trusted_domains 1 --value=cloud.mondomaine.fr
Boucle de redirection, ou liens en http:// Nextcloud ne sait pas qu’il est en HTTPS OVERWRITEPROTOCOL=https et TRUSTED_PROXIES corrects
Connexion refusée après plusieurs essais Protection anti force brute occ security:bruteforce:reset <IP>
Un client de synchronisation oublié boucle sur un ancien mot de passe Il déclenche la protection en boucle Déconnectez-le ou mettez-le à jour
Envoi de gros fichiers coupé Délai du reverse proxy trop court Augmentez les délais de lecture et d’écriture

Prêt à vous lancer ?

Choisissez vos applications et récupérez une installation complète.

Créer mon serveur