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-dockerCré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
EOFRemplacez 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:
EOFPoints importants de cette configuration Docker Compose :
mariadb:ltsfournit 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-COMMITTEDest le niveau d'isolation requis par Nextcloud pour éviter les verrous excessifs sur la base de données.redis:alpineactive 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:80expose le port uniquement en local. Le reverse proxy Nginx se chargera d'exposer le service sur les ports 80 et 443 avec HTTPS.OVERWRITEPROTOCOL=httpsindique à Nextcloud que les requêtes arrivent en HTTPS via le reverse proxy, pour générer les bonnes URL dans l'interface.- Le conteneur
cronpartage le même volumenextcloudet exécute les tâches planifiées de Nextcloud (nettoyage, génération de miniatures, expiration des partages). - Les volumes nommés
dbetnextcloudpersistent 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-nginxCréez le fichier de configuration du virtual host Nginx :
sudo nano /etc/nginx/sites-available/nextcloud.confContenu 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.frCertbot 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 -dDocker 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 psLes 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 dbOuvrez 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 statusLa 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:cronVérifiez que le cache Redis est actif :
docker compose exec --user www-data app php occ config:system:get memcache.distributedLa 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=integerVé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 -vLa 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 -dPour 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 upgradeLa 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
| Variante | Serveur web | Taille de l'image | Cas d'usage |
|---|---|---|---|
nextcloud:35-apache | Apache intégré | Plus volumineuse | Déploiement simple, idéal pour un premier VPS |
nextcloud:35-fpm | PHP-FPM (Nginx ou Caddy à ajouter) | Plus légère | Contrôle fin du serveur web, configuration avancée |
nextcloud:35-fpm-alpine | PHP-FPM sur Alpine Linux | La plus légère | Empreinte 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.
FiveM
Minecraft
Rust
RedM
Hytale