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
- un serveur avec Docker (installer Docker) et au moins 2 Go de RAM libres ;
- un reverse proxy qui gère le HTTPS (le reverse proxy expliqué) ;
- un sous-domaine, par exemple
cloud.mondomaine.fr, qui pointe vers le serveur (nom de domaine et DNS) ; - de la place sur le disque pour vos fichiers, plus de la marge.
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: DENYsur ce site. Nextcloud affiche certaines pages dans un cadre : avecDENY, l’éditeur de documents ou les aperçus restent vides. UtilisezSAMEORIGIN. - 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-apacheen35-apachedans les deux servicesappetcron, 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 |