MES TUTOS
VEILLE
Chargement de la veille...
HOMELAB / CLOUD

Nextcloud : Votre Cloud Privé (Docker + Redis + Traefik)

Google Drive et Dropbox sont pratiques, mais vos données ne vous appartiennent pas. Nextcloud est la solution open-source pour synchroniser fichiers, agendas et contacts. Mais attention : sans une configuration soignée (Cache Redis, Base de données dédiée), l'interface peut être lente. Voici comment déployer une instance performante.

1. L'Architecture

Pour une installation robuste, nous n'utiliserons pas la base de données SQLite intégrée (trop lente). Nous allons déployer 3 conteneurs :


2. Le fichier docker-compose.yml

Créez un dossier nextcloud et le fichier YAML suivant. (Nous supposons que vous utilisez Traefik comme vu dans le tutoriel précédent, sinon décommentez la section "ports").

version: '3.8'

services:
  db:
    image: mariadb:10.6
    container_name: nextcloud_db
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=mot_de_passe_root_robuste
      - MYSQL_PASSWORD=mot_de_passe_user
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    networks:
      - default

  redis:
    image: redis:alpine
    container_name: nextcloud_redis
    restart: always
    networks:
      - default

  app:
    image: nextcloud:latest
    container_name: nextcloud_app
    restart: always
    depends_on:
      - db
      - redis
    volumes:
      - nextcloud_data:/var/www/html
    environment:
      - MYSQL_PASSWORD=mot_de_passe_user
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      # Optimisations vitales pour Traefik
      - OVERWRITEHOST=cloud.mondomaine.fr
      - OVERWRITEPROTOCOL=https
    networks:
      - default
      - proxy # Le réseau de Traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nextcloud.rule=Host(`cloud.mondomaine.fr`)"
      - "traefik.http.routers.nextcloud.entrypoints=websecure"
      - "traefik.http.routers.nextcloud.tls.certresolver=myresolver"
      # Middleware pour corriger les headers CalDAV/CardDAV
      - "traefik.http.middlewares.nextcloud-dav.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
      - "traefik.http.middlewares.nextcloud-dav.redirectregex.replacement=https://$${1}/remote.php/dav/"
      - "traefik.http.routers.nextcloud.middlewares=nextcloud-dav"

volumes:
  db_data:
  nextcloud_data:

networks:
  proxy:
    external: true

3. Optimisation Post-Installation (Le secret de la vitesse)

Une fois lancé, Nextcloud fonctionnera, mais il vous affichera des avertissements de performance. Corrigeons-les.

A. Passer les tâches de fond en "Cron" (et non AJAX)

Par défaut, Nextcloud lance ses tâches de maintenance à chaque chargement de page (AJAX), ce qui ralentit l'utilisateur. Passons au vrai Cron système.

1. Dans l'interface Web Nextcloud : Paramètres > Paramètres de base > Tâches de fond -> Cochez Cron.

2. Sur votre serveur (Hôte), ajoutez cette ligne dans votre crontab (crontab -e) :

*/5 * * * * docker exec -u www-data nextcloud_app php -f /var/www/html/cron.php

Cela force le conteneur à exécuter le script de maintenance toutes les 5 minutes sans ralentir l'interface.

B. Augmenter la limite mémoire PHP

Par défaut, PHP est limité à 512Mo. Pour les gros transferts, c'est peu. Modifions cela sans recréer l'image.

Ajoutez cette ligne dans la section environment: du service app dans le docker-compose :

- PHP_MEMORY_LIMIT=1024M
- PHP_UPLOAD_LIMIT=10G

4. Configuration du Reverse Proxy (Trusted Proxies)

Si vous êtes derrière Traefik, Nextcloud va se plaindre qu'il ne connait pas l'IP du proxy. Il faut éditer le fichier de config.

docker exec -u www-data nextcloud_app php occ config:system:set trusted_proxies 0 --value="172.0.0.0/8"

Cette commande occ (la CLI de Nextcloud) autorise toutes les IP privées Docker à agir comme proxy.

5. La maintenance (Mise à jour)

Mettre à jour Nextcloud Docker est simple, mais il ne faut pas sauter les étapes (versions majeures une par une).

docker compose pull
docker compose up -d
# Attendre le démarrage puis lancer la migration DB
docker exec -u www-data nextcloud_app php occ upgrade

Conclusion

Vous avez maintenant un cloud privé aussi rapide que Dropbox, mais hébergé chez vous. Grâce à Redis, la navigation dans les galeries photos est instantanée, et grâce à la base MariaDB, vous pouvez gérer des milliers de fichiers sans ralentissement.

← Retour à la bibliothèque