Intermédiaire ⏱ 30 min de mise en œuvre Mis à jour le 11 août 2026

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.