Héberger Nextcloud sur un VPS (alternative Google Drive)
Reprenez le contrôle de vos fichiers avec votre propre Nextcloud plutôt que Google Drive ou Dropbox. Voici comment le déployer proprement sur un VPS, en France, avec HTTPS et sauvegardes.
Héberger Nextcloud sur un VPS permet de retrouver les fonctions essentielles de Google Drive ou Dropbox sans confier ses fichiers à une plateforme étrangère : stockage, synchronisation, partage, agenda et contacts. L’administrateur contrôle l’emplacement des données, les comptes utilisateurs, les sauvegardes et les règles d’accès.
Pour une PME, une association ou un particulier technique, cette maîtrise facilite aussi la conformité au RGPD. Choisir un hébergeur français comme TalCloud permet de conserver les données sur des serveurs situés en France, avec un support humain, du stockage NVMe et une protection Anti-DDoS Netrix. Les VPS TalCloud sont disponibles à partir de 4,99 € par mois. Ce guide reste toutefois valable quel que soit l’hébergeur retenu.
Nous allons déployer Nextcloud avec Docker Compose, PostgreSQL, Redis et Caddy. Ce dernier servira de reverse proxy et générera automatiquement le certificat HTTPS.
Prérequis et dimensionnement du VPS
Il vous faut :
- un VPS Linux récent, par exemple Debian ou Ubuntu
- un accès SSH avec un compte disposant de
sudo - Docker Engine et le module
docker compose(voir installer Docker sur un VPS) - un nom de domaine ou sous-domaine, par exemple
cloud.exemple.fr - un enregistrement DNS de type A pointant vers l’adresse IPv4 du VPS
- les ports TCP 80 et 443 accessibles depuis Internet
- un espace de sauvegarde distinct du VPS
Pour un usage léger de 1 à 3 personnes, 2 Go de RAM peuvent suffire, mais 4 Go offrent une marge plus confortable pour PostgreSQL, Redis, les miniatures et les mises à jour. Pour 5 à 20 utilisateurs actifs, prévoyez généralement 4 à 8 Go de RAM et au moins 2 vCPU. Au-delà, le besoin dépend surtout de la simultanéité des connexions, des applications installées, de la génération d’aperçus et du volume de fichiers.
Le stockage doit couvrir les fichiers, la base de données, les versions antérieures et la corbeille. Par exemple, 200 Go de fichiers utilisateurs ne tiennent pas durablement sur un disque de 200 Go. Gardez une marge de 20 à 30 %, puis ajoutez un stockage séparé pour les sauvegardes. Un instantané du VPS est utile, mais il ne remplace pas une sauvegarde exportée et testée.
Avant l’installation, vérifiez que le DNS répond avec l’adresse du VPS :
dig +short cloud.exemple.fr
Créez ensuite un répertoire de travail :
sudo mkdir -p /opt/nextcloud
sudo chown "$USER":"$USER" /opt/nextcloud
cd /opt/nextcloud
Installer Nextcloud avec Docker Compose
Créez un fichier .env pour centraliser le domaine et les mots de passe :
NEXTCLOUD_DOMAIN=cloud.exemple.fr
POSTGRES_DB=nextcloud
POSTGRES_USER=nextcloud
POSTGRES_PASSWORD=remplacez_par_un_secret_long_et_unique
REDIS_PASSWORD=remplacez_par_un_autre_secret_long
Protégez ce fichier :
chmod 600 .env
Créez ensuite compose.yaml :
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- backend
healthcheck:
test:
- CMD-SHELL
- pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"
interval: 10s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
restart: unless-stopped
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${REDIS_PASSWORD}
volumes:
- redis_data:/data
networks:
- backend
app:
image: nextcloud:apache
restart: unless-stopped
environment:
POSTGRES_HOST: db
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
REDIS_HOST: redis
REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DOMAIN}
NEXTCLOUD_TRUSTED_PROXIES: 172.28.0.0/24
OVERWRITEHOST: ${NEXTCLOUD_DOMAIN}
OVERWRITEPROTOCOL: https
OVERWRITECLIURL: https://${NEXTCLOUD_DOMAIN}
PHP_MEMORY_LIMIT: 512M
PHP_UPLOAD_LIMIT: 10G
volumes:
- nextcloud_data:/var/www/html
networks:
- backend
- frontend
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
cron:
image: nextcloud:apache
restart: unless-stopped
entrypoint: /cron.sh
volumes:
- nextcloud_data:/var/www/html
networks:
- backend
depends_on:
- app
caddy:
image: caddy:2-alpine
restart: unless-stopped
environment:
NEXTCLOUD_DOMAIN: ${NEXTCLOUD_DOMAIN}
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
networks:
- frontend
depends_on:
- app
volumes:
postgres_data:
redis_data:
nextcloud_data:
caddy_data:
caddy_config:
networks:
backend:
frontend:
ipam:
config:
- subnet: 172.28.0.0/24
Le réseau frontal utilise ici 172.28.0.0/24, déclaré comme proxy de confiance dans Nextcloud. Si ce sous-réseau entre en conflit avec votre réseau Docker ou privé, remplacez-le aux deux endroits.
L’étiquette nextcloud:apache suit la version courante de l’image. En production, il est préférable de sélectionner une version majeure officiellement prise en charge, puis de contrôler les changements de version. Les mises à niveau majeures de Nextcloud doivent être effectuées une version à la fois.
Configurer le domaine et HTTPS
Créez le fichier Caddyfile :
{$NEXTCLOUD_DOMAIN} {
encode zstd gzip
redir /.well-known/carddav /remote.php/dav 301
redir /.well-known/caldav /remote.php/dav 301
header Strict-Transport-Security "max-age=15552000"
reverse_proxy app:80
}
Caddy demandera et renouvellera automatiquement un certificat TLS public. Le domaine doit déjà pointer vers le VPS et les ports 80 et 443 ne doivent pas être utilisés par un autre service.
Démarrez la pile :
docker compose config
docker compose pull
docker compose up -d
docker compose ps
Consultez les journaux en cas de problème :
docker compose logs --tail=100 app caddy db
Avec un pare-feu, n’ouvrez que les services nécessaires. Par exemple avec UFW :
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
L’application Nextcloud n’expose aucun port directement sur l’hôte. Les requêtes passent obligatoirement par Caddy et HTTPS.
Premier login et réglages essentiels
Ouvrez https://cloud.exemple.fr. Créez le compte administrateur avec un mot de passe long et unique. Les paramètres PostgreSQL sont normalement injectés automatiquement par l’image Docker.
Contrôlez ensuite l’état de l’installation :
docker compose exec -u www-data app php occ status
docker compose exec -u www-data app php occ config:system:get trusted_domains
La variable NEXTCLOUD_TRUSTED_DOMAINS autorise le domaine public. Les paramètres OVERWRITEHOST et OVERWRITEPROTOCOL évitent que Nextcloud génère des liens internes en HTTP derrière le reverse proxy.
Activez le mode cron pour les tâches d’arrière-plan :
docker compose exec -u www-data app php occ background:cron
Le conteneur cron exécutera ensuite régulièrement les tâches de nettoyage, d’indexation et de maintenance. C’est plus fiable que le mode AJAX déclenché lors des visites.
La limite PHP de 512 Mo convient à de nombreux petits déploiements. La limite d’envoi de 10 Go est seulement un plafond technique. Vérifiez que le stockage, la connexion des utilisateurs et vos sauvegardes peuvent réellement absorber des fichiers de cette taille.
Dans l’interface d’administration, ouvrez la page Vue d’ensemble et corrigez les avertissements restants. Configurez aussi l’envoi d’e-mails SMTP afin que les utilisateurs puissent recevoir les invitations, notifications et liens de réinitialisation de mot de passe.
Sécuriser et sauvegarder Nextcloud
Utilisez des mots de passe distincts pour PostgreSQL, Redis et le compte administrateur. Ne publiez jamais .env dans un dépôt Git. Protégez également l’accès SSH avec des clés, désactivez l’authentification SSH par mot de passe si possible et installez rapidement les mises à jour de sécurité du système.
Activez l’authentification à deux facteurs depuis le catalogue d’applications Nextcloud, par exemple avec TOTP. Pour une organisation, imposez-la au minimum aux administrateurs et aux comptes ayant accès à des données sensibles.
Une sauvegarde exploitable doit contenir la base PostgreSQL, le volume Nextcloud et le fichier .env. Pour réaliser une sauvegarde cohérente :
mkdir -p backups
docker compose exec -u www-data app php occ maintenance:mode --on
docker compose exec -T db pg_dump -U nextcloud -d nextcloud > backups/nextcloud.sql
docker compose exec -T app tar -C /var/www/html -czf - . > backups/nextcloud-data.tar.gz
docker compose exec -u www-data app php occ maintenance:mode --off
Copiez ensuite ces fichiers vers un emplacement externe chiffré. Automatisez l’opération, appliquez une politique de rétention et testez périodiquement une restauration. Notre guide sur la stratégie de sauvegarde d’un serveur détaille cette approche. Une sauvegarde présente uniquement sur le même VPS disparaîtra avec lui en cas de panne grave ou de compromission.
Avant une mise à jour, effectuez une sauvegarde puis lancez :
docker compose exec -u www-data app php occ maintenance:mode --on
docker compose pull
docker compose up -d
docker compose exec -u www-data app php occ upgrade
docker compose exec -u www-data app php occ maintenance:mode --off
docker compose exec -u www-data app php occ status
Consultez les notes de version avant tout changement majeur. Mettez également à jour les applications Nextcloud depuis l’interface ou avec occ, car une extension incompatible peut bloquer une montée de version.
Utiliser Nextcloud au quotidien
L’application Fichiers fournit le stockage, les dossiers partagés, les liens publics, les versions antérieures et la corbeille. Les applications Calendar et Contacts ajoutent agenda et carnet d’adresses, synchronisables avec les protocoles CalDAV et CardDAV.
Installez le client Nextcloud officiel sur Windows, macOS ou Linux pour synchroniser automatiquement certains dossiers. Les applications Android et iOS permettent de consulter les documents et d’envoyer automatiquement les photos. Pour éviter de saturer le VPS, définissez des quotas par utilisateur et surveillez régulièrement l’espace disponible :
df -h
docker system df
docker compose exec -u www-data app php occ status
Pour une équipe, créez des groupes, attribuez les droits de partage avec prudence et désactivez les liens publics lorsqu’ils ne sont pas nécessaires. Le déploiement est alors prêt pour les premiers comptes, avec un accès HTTPS, des données persistantes, Redis, PostgreSQL et une procédure de sauvegarde reproductible.