Offre Durée limitée : -10% sur tout le site* avec le code WELCOME10

Installer Nextcloud sur un VPS Linux avec Docker Compose

Mis à jour le 26 octobre 2026 9 min de lecture 11 sections

Nextcloud et Docker Compose sur un VPS Linux

Nextcloud est une plateforme de cloud privé open source qui remplace les services de stockage en ligne propriétaires : synchronisation de fichiers, calendrier, contacts, visioconférence et édition collaborative de documents. Héberger Nextcloud sur votre propre VPS Linux vous donne le contrôle total sur vos données, vos sauvegardes et vos mises à jour.

Docker Compose permet de décrire l'ensemble de l'infrastructure dans un seul fichier YAML : le serveur Nextcloud, la base de données MariaDB, le cache Redis et le conteneur cron. Un docker compose up -d lance la pile complète. Si vous n'avez pas encore Docker sur votre serveur, commencez par notre guide installer Docker sur un VPS. Pour les bases de Docker Compose (volumes, réseaux, syntaxe du fichier YAML) : Docker Compose sur VPS Linux.

Ce guide déploie Nextcloud 35 (Hub 26 Summer, version 35.0.2 au moment de la rédaction) avec MariaDB, Redis, un reverse proxy Nginx et un certificat HTTPS Let's Encrypt. Chaque commande est prévue pour Ubuntu 24.04 LTS ou Debian 12, les deux distributions les plus courantes sur un VPS Linux.

Prérequis

  • Un VPS Linux avec au moins 2 Go de RAM et 20 Go de stockage (4 Go de RAM recommandés si plusieurs utilisateurs accèdent aux fichiers en parallèle) ;
  • Docker Engine et Docker Compose v2 installés (guide d'installation Docker) ;
  • Un nom de domaine (ou sous-domaine) pointant vers l'adresse IP publique du VPS (enregistrement DNS de type A) ;
  • Un accès SSH avec un utilisateur non root membre du groupe docker (sécuriser SSH sur VPS Linux) ;
  • Les ports 80 et 443 ouverts dans le pare-feu du VPS (ouvrir les ports avec UFW).

Préparer l'arborescence du projet

Créez un répertoire dédié sur le VPS. Tous les fichiers de configuration de la pile Docker Compose Nextcloud seront regroupés ici :

mkdir -p ~/nextcloud-docker
cd ~/nextcloud-docker

Créez un fichier db.env qui contient les identifiants de la base de données MariaDB. Ce fichier est référencé par env_file dans le fichier docker-compose.yml pour éviter de stocker les mots de passe en clair dans la configuration YAML :

cat > db.env <<'EOF'
MYSQL_PASSWORD=MotDePasseSecurise123
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
EOF

Remplacez MotDePasseSecurise123 par un mot de passe fort généré avec openssl rand -base64 32.

Le fichier docker-compose.yml

Ce fichier décrit quatre services : la base de données MariaDB, le cache Redis, l'application Nextcloud et un conteneur dédié aux tâches planifiées (cron). La configuration suit les recommandations du dépôt officiel nextcloud/docker sur GitHub.

cat > docker-compose.yml <<'EOF'
services:
  db:
    image: mariadb:lts
    command: --transaction-isolation=READ-COMMITTED
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=MotDePasseRootSecurise456
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env

  redis:
    image: redis:alpine
    restart: always

  app:
    image: nextcloud:35-apache
    restart: always
    ports:
      - 127.0.0.1:8080:80
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - NEXTCLOUD_TRUSTED_DOMAINS=cloud.exemple.fr
      - OVERWRITEPROTOCOL=https
      - OVERWRITECLIURL=https://cloud.exemple.fr
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  cron:
    image: nextcloud:35-apache
    restart: always
    volumes:
      - nextcloud:/var/www/html
    entrypoint: /cron.sh
    depends_on:
      - db
      - redis

volumes:
  db:
  nextcloud:
EOF

Points importants de cette configuration Docker Compose :

  • mariadb:lts fournit la branche LTS stable de MariaDB (10.11 ou supérieure), compatible avec Nextcloud 35 qui exige MariaDB 10.11+ ou MySQL 8.4+.
  • --transaction-isolation=READ-COMMITTED est le niveau d'isolation requis par Nextcloud pour éviter les verrous excessifs sur la base de données.
  • redis:alpine active le cache mémoire et le verrouillage transactionnel des fichiers, ce qui améliore les performances de Nextcloud avec plusieurs utilisateurs simultanés.
  • 127.0.0.1:8080:80 expose le port uniquement en local. Le reverse proxy Nginx se chargera d'exposer le service sur les ports 80 et 443 avec HTTPS.
  • OVERWRITEPROTOCOL=https indique à Nextcloud que les requêtes arrivent en HTTPS via le reverse proxy, pour générer les bonnes URL dans l'interface.
  • Le conteneur cron partage le même volume nextcloud et exécute les tâches planifiées de Nextcloud (nettoyage, génération de miniatures, expiration des partages).
  • Les volumes nommés db et nextcloud persistent les données entre les redémarrages du conteneur.

Remplacez cloud.exemple.fr par votre nom de domaine réel et MotDePasseRootSecurise456 par un mot de passe root MariaDB généré avec openssl rand -base64 32.

Configurer Nginx en reverse proxy avec HTTPS

Le serveur web Nginx installé directement sur le VPS Linux reçoit les connexions HTTPS des utilisateurs et les transfère au conteneur Docker Nextcloud sur le port local 8080. Installez Nginx et Certbot :

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

Créez le fichier de configuration du virtual host Nginx :

sudo nano /etc/nginx/sites-available/nextcloud.conf

Contenu du fichier de configuration Nginx pour Nextcloud :

server {
    listen 80;
    server_name cloud.exemple.fr;

    client_max_body_size 10G;
    fastcgi_buffers 64 4K;

    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;
    }

    location /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }
    location /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
    }
}

Activez le site et obtenez un certificat HTTPS Let's Encrypt :

sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d cloud.exemple.fr

Certbot modifie automatiquement le fichier de configuration Nginx pour ajouter le bloc listen 443 ssl, les chemins vers le certificat Let's Encrypt et la redirection HTTP vers HTTPS. Le renouvellement est automatique via un timer systemd (en savoir plus sur les timers systemd et cron).

client_max_body_size 10G autorise l'envoi de fichiers volumineux vers votre instance Nextcloud. Ajustez cette valeur selon vos besoins.

Les redirections /.well-known/carddav et /.well-known/caldav permettent aux clients CalDAV et CardDAV (calendrier et contacts) de découvrir automatiquement le point d'accès du serveur Nextcloud.

Lancer le déploiement

Depuis le répertoire ~/nextcloud-docker, démarrez la pile Docker Compose :

docker compose up -d

Docker télécharge les images Nextcloud, MariaDB et Redis, crée les volumes nommés et démarre les quatre conteneurs. Vérifiez que tous les services sont en cours d'exécution :

docker compose ps

Les quatre conteneurs (app, db, redis, cron) doivent afficher le statut Up. Si un conteneur redémarre en boucle, consultez ses logs :

docker compose logs app
docker compose logs db

Ouvrez https://cloud.exemple.fr dans un navigateur. L'assistant d'installation de Nextcloud s'affiche. Créez le compte administrateur et confirmez que la base de données MariaDB est bien détectée (les identifiants sont déjà configurés via les variables d'environnement).

Premiers réglages après installation

Une fois connecté à l'interface d'administration de Nextcloud, vérifiez la configuration depuis le terminal SSH avec la commande occ :

docker compose exec --user www-data app php occ status

La sortie doit confirmer la version 35.0.x et le statut installed: true.

Configurez le mode de tâches planifiées sur Cron (au lieu d'AJAX, moins fiable) :

docker compose exec --user www-data app php occ background:cron

Vérifiez que le cache Redis est actif :

docker compose exec --user www-data app php occ config:system:get memcache.distributed

La valeur attendue est \OC\Memcache\Redis. Si le cache n'est pas configuré automatiquement, ajoutez les lignes suivantes dans le fichier de configuration Nextcloud :

docker compose exec --user www-data app php occ config:system:set memcache.distributed --value="\OC\Memcache\Redis"
docker compose exec --user www-data app php occ config:system:set memcache.locking --value="\OC\Memcache\Redis"
docker compose exec --user www-data app php occ config:system:set redis host --value="redis"
docker compose exec --user www-data app php occ config:system:set redis port --value="6379" --type=integer

Vérifiez ensuite la page Paramètres d'administration > Vue d'ensemble dans l'interface web. Nextcloud y liste les avertissements de configuration (proxy, cache, base de données, tâches planifiées) et confirme que le serveur fonctionne correctement.

Vérifier que l'image PHP est patchée (PHP2Shell)

En octobre 2026, deux failles critiques dans le runtime PHP ont été rendues publiques sous le nom de PHP2Shell (CVE-2026-109618 et CVE-2026-109619). Ces vulnérabilités permettent une exécution de code à distance sans authentification sur toute application PHP, Nextcloud inclus. Les correctifs sont intégrés dans PHP 8.3.36, 8.4.27 et 8.5.12.

L'image officielle nextcloud:35-apache a été reconstruite le 21 octobre 2026 avec PHP 8.5.12, qui corrige les deux CVE. Vérifiez la version PHP embarquée dans votre conteneur :

docker compose exec app php -v

La sortie doit afficher PHP 8.5.12 ou supérieur. Si vous voyez une version antérieure, mettez à jour l'image :

docker compose pull app cron
docker compose up -d

Pour un audit complet de vos conteneurs Docker PHP et les étapes de correction détaillées, consultez notre guide PHP2Shell : auditer et patcher vos conteneurs Docker PHP.

Mettre à jour Nextcloud et ses dépendances

Pour mettre à jour Nextcloud vers une nouvelle version, modifiez le tag de l'image dans le fichier docker-compose.yml (par exemple nextcloud:36-apache lors de la prochaine version majeure), puis relancez la pile :

docker compose pull
docker compose up -d
docker compose exec --user www-data app php occ upgrade

La commande occ upgrade applique les migrations de base de données entre les versions de Nextcloud. Avant toute mise à jour majeure, sauvegardez les volumes Docker :

docker compose down
docker run --rm -v nextcloud-docker_nextcloud:/data -v $(pwd):/backup alpine \
  tar czf /backup/nextcloud-data-$(date +%F).tar.gz -C /data .
docker run --rm -v nextcloud-docker_db:/data -v $(pwd):/backup alpine \
  tar czf /backup/nextcloud-db-$(date +%F).tar.gz -C /data .

Pour automatiser les mises à jour de sécurité des paquets système du VPS lui-même : automatiser les mises à jour de sécurité sur Ubuntu.

Nextcloud : variantes de l'image Docker

VarianteServeur webTaille de l'imageCas d'usage
nextcloud:35-apacheApache intégréPlus volumineuseDéploiement simple, idéal pour un premier VPS
nextcloud:35-fpmPHP-FPM (Nginx ou Caddy à ajouter)Plus légèreContrôle fin du serveur web, configuration avancée
nextcloud:35-fpm-alpinePHP-FPM sur Alpine LinuxLa plus légèreEmpreinte minimale, administration expérimentée

Ce guide utilise la variante apache qui embarque son propre serveur web dans le conteneur Docker. C'est la configuration la plus simple pour les administrateurs qui débutent avec Nextcloud sur un VPS Linux. La variante fpm offre plus de flexibilité mais nécessite d'ajouter un conteneur Nginx ou Caddy dédié dans le fichier docker-compose.yml.

Conclusion

Votre instance Nextcloud fonctionne sur votre VPS Linux, avec MariaDB pour la persistance des données, Redis pour le cache distribué, un certificat HTTPS Let's Encrypt et une image Docker dont la version PHP est vérifiée contre les failles PHP2Shell. Toute la pile se gère avec trois commandes : docker compose up -d, docker compose pull et docker compose down.

Pour renforcer la sécurité de votre serveur au-delà de Nextcloud, consultez nos guides sécuriser SSH sur VPS Linux et sécuriser un VPS Ubuntu avec SSH, UFW et Fail2ban.

FAQ

Combien de RAM faut-il pour faire tourner Nextcloud avec Docker Compose sur un VPS ?

Nextcloud avec MariaDB et Redis consomme environ 1 Go de RAM au repos. Avec plusieurs utilisateurs simultanés et la synchronisation de fichiers, prévoyez 2 Go minimum et 4 Go pour un usage confortable. La base de données MariaDB est le composant le plus gourmand si le volume de fichiers est important.

Peut-on utiliser PostgreSQL au lieu de MariaDB avec Nextcloud Docker ?

Oui. Nextcloud prend en charge PostgreSQL comme base de données. Remplacez le service MariaDB par une image postgres:16-alpine dans le fichier docker-compose.yml et adaptez les variables d'environnement (POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD). La configuration du conteneur Nextcloud utilise alors POSTGRES_HOST au lieu de MYSQL_HOST.

Comment sauvegarder une instance Nextcloud déployée avec Docker Compose ?

Arrêtez les conteneurs avec docker compose down, puis sauvegardez les deux volumes Docker nommés (nextcloud pour les fichiers et db pour la base de données) avec docker run --rm et une archive tar.gz. Vous pouvez aussi exporter la base MariaDB avec docker compose exec db mariadb-dump avant l'arrêt.

L'image Nextcloud Docker est-elle affectée par les failles PHP2Shell ?

Les images Nextcloud 33.0.10, 34.0.5 et 35.0.2 ont été reconstruites le 21 octobre 2026 avec PHP 8.5.12, qui corrige CVE-2026-109618 et CVE-2026-109619. Vérifiez la version PHP de votre conteneur avec docker compose exec app php -v et mettez à jour l'image avec docker compose pull si nécessaire.

Quelle est la différence entre nextcloud:apache et nextcloud:fpm ?

La variante apache embarque un serveur web Apache dans le conteneur, prête à l'emploi derrière un reverse proxy. La variante fpm ne contient que PHP-FPM et nécessite un conteneur Nginx ou Caddy supplémentaire dans le fichier docker-compose.yml pour servir les fichiers statiques. La variante apache est plus simple à déployer, la variante fpm offre plus de contrôle sur la configuration du serveur web.

Comment activer le cache Redis dans Nextcloud Docker ?

Ajoutez un service redis:alpine dans le fichier docker-compose.yml et la variable REDIS_HOST=redis dans l'environnement du conteneur Nextcloud. Après le premier démarrage, vérifiez avec docker compose exec --user www-data app php occ config:system:get memcache.distributed. Si la valeur est vide, configurez-la avec occ config:system:set memcache.distributed et memcache.locking.