Nextcloud – Espace de collaboration (Docker)

Nextcloud : Collaboration & fichiers

Déploiement de Nextcloud sous Docker (Apache) avec MariaDB et Redis pour offrir un espace de stockage, partage et collaboration conforme RGPD. Persistance data/config/apps, optimisations APCu/Redis, sauvegardes et préparation à l’exposition via reverse proxy.

Docker Compose Nextcloud (Apache) MariaDB LTS Redis / APCu Reverse Proxy / TLS RGPD
  • Catégorie : Collaboration / Fichiers
  • Contexte : VM Debian 12 (pilote DSI)
  • Livrables : compose, config persistance, scripts backup, doc
Voir le repository GitHub
Contexte & objectifs

La collectivité souhaite centraliser stockage, partage et collaboration (fichiers, calendriers, contacts) pour réduire les partages réseau hétérogènes et les e-mails lourds. Exigences : auto-hébergé, RGPD, web/mobile, extensible.

  • Pilote pour 30–50 comptes (1–2 directions)
  • Stack simple & reproductible (Docker Compose)
  • Persistance data/config/apps & performances (APCu/Redis)
  • Préparer la montée en charge (reverse proxy, sauvegardes, supervision)
Architecture (Docker)
  • app : nextcloud:stable-apache (Apache inclus)
  • db : mariadb:lts
  • redis : redis:alpine

Volumes persistants : ./data → /var/www/html/data, ./config → /var/www/html/config, ./custom_apps → /var/www/html/custom_apps, ./db → /var/lib/mysql.

Docker Compose (aligné déploiement)
version: '3.8'

services:
  db:
    image: mariadb:lts
    container_name: nextcloud_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_PASSWORD: nextcloudpass
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
    volumes:
      - ./db:/var/lib/mysql
    networks: [nextcloud]

  redis:
    image: redis:alpine
    container_name: nextcloud_redis
    restart: always
    networks: [nextcloud]

  app:
    image: nextcloud:stable-apache
    container_name: nextcloud_app
    restart: always
    depends_on: [db, redis]
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: nextcloudpass
      REDIS_HOST: redis
      NEXTCLOUD_ADMIN_USER: admin
      NEXTCLOUD_ADMIN_PASSWORD: adminpass
      # Garder uniquement si un reverse proxy nommé "reverse_proxy" est présent
      TRUSTED_PROXIES: reverse_proxy
      OVERWRITEPROTOCOL: http
    volumes:
      - ./data:/var/www/html/data
      - ./config:/var/www/html/config
      - ./custom_apps:/var/www/html/custom_apps
    ports:
      - "8082:80"
    networks: [nextcloud]

networks:
  nextcloud:

🔎 Correction clé : monter /var/www/html/data (et non tout /var/www/html), sinon tu écrases le core Nextcloud.

Mise en service (pas à pas)
  1. Prérequis : VM Debian 12, Docker + Compose, DNS/FQDN interne si besoin.
  2. Arbo Git : docker-compose.yml, config/, custom_apps/, data/, db/, backups/.
  3. Lancement : docker compose up -d → accès http://IP_VM:8082 (admin auto si variables définies).
  4. Optimisations : APCu + Redis + cron.
// config/apcu.config.php
<?php
$CONFIG['memcache.local'] = '\\OC\\Memcache\\APCu';
// config/redis.config.php
<?php
$CONFIG['memcache.locking'] = '\\OC\\Memcache\\Redis';
$CONFIG['redis'] = ['host' => 'redis', 'port' => 6379];
// config/config.php (extraits)
<?php
$CONFIG = [
  'trusted_domains' => ['localhost','10.0.0.10','cloud.collectivite.local'],
  'overwrite.cli.url' => 'http://cloud.collectivite.local',
  'default_phone_region' => 'FR',
];
# Cron Nextcloud (toutes les 5 min)
*/5 * * * * docker compose exec -u www-data nextcloud_app php -f cron.php >/dev/null 2>&1
Sécurisation (paliers)
  • Pilote interne : accès LAN, secrets forts, sauvegardes basiques.
  • Pré-prod/Prod : reverse proxy (Traefik/NPM/Caddy) + TLS Let’s Encrypt, TRUSTED_PROXIES (IP/CIDR) & OVERWRITEPROTOCOL=https, headers de sécurité, fail2ban, politique d’apps (liste blanche), quotas & 2FA.
Sauvegardes & restauration
#!/usr/bin/env bash
set -euo pipefail
STAMP=$(date +%F_%H%M)
mkdir -p backups
mysqldump -u nextcloud -pnextcloudpass -h 127.0.0.1 nextcloud > backups/db_${STAMP}.sql
tar -czf backups/config_${STAMP}.tar.gz config/
tar -czf backups/data_${STAMP}.tar.gz data/
find backups -type f -mtime +14 -delete
echo "Backup OK -> ${STAMP}"

Restauration : docker compose down → restaurer db SQL, config/, data/docker compose up -d → vérifier logs, occ maintenance:mode --off si nécessaire.

Résultats & bilan
  • Plateforme unique de partage & collaboration
  • Moins d’e-mails lourds, liens sécurisés
  • Accès multi-devices (web/bureau/mobile)
  • Base solide pour montée en charge et ouverture sécurisée
Bilan personnel
  • Déploiement Nextcloud (Apache) + MariaDB LTS + Redis en Docker
  • Persistances propres (data/, config/, custom_apps/, db/)
  • Optimisations clés (APCu, Redis, cron) & paliers de sécurité
  • Projet industrializable et réutilisable pour d’autres services