Catégories
Docker Tut's Linux

[docker-compose] Traefik, nginx et Nextcloud

Objectif de l’article : obtenir un serveur Nextcloud derrière Nginx et le reverse-proxy Traefik. La configuration HTTPS effectuée par le fichier « traefik_dynamic.yml » et les labels correspondants.

  • Mise à jour le 03/02/2021 : mise à jour des des configurations Nginx et Traefik.

Logiciels exploités :

  • Debian 10 (buster)
  • Docker CE = 19.03.x
  • Docker-compose = 1.28.x
  • Traefik = 2.4 « livarot »
  • Nginx = 1.19.x (version stable)
  • MariaDB = 10.15 (focal)
  • Nextcloud =  21.x
  • PHP = 7.4x-fpm
  • Redis = 6.x

Mise en place de la stack Nextcloud

J’utilise le dossier /srv/docker pour mettre en place ces conteneurs. Libre à vous de modifier l’emplacement. A l’intérieur de ce dossier, plusieurs choses sont faites : création des dossiers nécessaires (conf + conf/traefikdynamic, logs, fichier acme.json (pour Let’s Enycrypt))

mkdir -p /srv/docker/conf/traefikdynamic
mkdir /srv/docker/conf/nginx-nextcloud
mkdir /srv/docker/logs

touch /srv/docker/logs/traefik.log
touch /srv/docker/conf/acme.json

chmod 0600 /srv/docker/conf/acme.json

Pour une meilleure lisibilité de l’article, les blocs de code pour la configuration de Traefik et Nextcloud ont été enlevés. A la place, des liens vers le dépôt GitHub sont mis.

Sans plus attendre, voici les fichiers de configuration pour Traefik :

Maintenant, les fichiers de configuration pour Nginx et Nextcloud :

Enfin, les fichiers nécessaires pour docker :

fichier .env

MYSQLUSER=nextcloudsqluser
MYSQLPASSWORD=nextcloudsqlpassword
MYSQLDB=nextclouddb
NEXTCLOUDVERSION=21-fpm
MARIADBVERSION=focal
REDISVERSION=6
NGINXVERSION=stable
TRAEFIKVERSION=livarot

fichier docker-compose.yml

---
version: '3.6'
services:
  traefik:
    image: traefik:${TRAEFIKVERSION}
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./conf/traefik.yml:/etc/traefik/traefik.yml:ro
      - ./conf/traefikdynamic:/traefikdynamic:ro
      - ./logs/traefik.log:/etc/traefik/applog.log
      - ./conf/acme.json:/acme.json
 
  nginxnextcloud:
    image: nginx:${NGINXVERSION}
    restart: unless-stopped
    container_name: nginxnextcloud
    volumes:
      - datanextcloud:/var/www/html
      - datanginxnextcloudlogs:/var/log/nginx
      - ./conf/nginx-nextcloud:/etc/nginx
 
  nextcloud:
    image: nextcloud:${NEXTCLOUDVERSION}
    restart: unless-stopped
    container_name: nextcloudfpm
    volumes:
      - datanextcloud:/var/www/html
    environment:
      MYSQL_HOST: sqlnextcloud
      MYSQL_USER: ${MYSQLUSER}
      MYSQL_PASSWORD: ${MYSQLPASSWORD}
      MYSQL_DATABASE: ${MYSQLDB}
      REDIS_HOST: redisnextcloud
    links:
      - mariadb
    labels:
      traefik.enable: false
 
  mariadb:
    image: mariadb:${MARIADBVERSION}
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: unless-stopped
    container_name: sqlnextcloud
    volumes:
      - datadbnextcloud:/var/lib/mysql
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
      MYSQL_USER: ${MYSQLUSER}
      MYSQL_PASSWORD: ${MYSQLPASSWORD}
      MYSQL_DATABASE: ${MYSQLDB}
    labels:
      traefik.enable: false

  redis:
    image: redis:${REDISVERSION}
    restart: unless-stopped
    volumes:
      - dataredisnextcloud:/data
    labels:
      traefik.enable: false

volumes:
  datanextcloud:
  datadbnextcloud:
  datanginxnextcloudlogs:
  dataredisnextcloud:

Avec cette « stack », vous êtes en mesure d’avoir votre serveur Nextcloud derrière Traefik, en SSL (automatique) et avec une faible empreinte logicielle. Un petit docker-compose up -d et le tour est joué.

Vous pouvez retrouver l’intégralité des scripts sur le GitHub à cette adresse : https://github.com/Mettmett/docker-compose/tree/master/traefik-nginx-nextcloud-sql-redis.

Une réponse sur « [docker-compose] Traefik, nginx et Nextcloud »

Merci pour cet article.
J’ai neanmoins un probleme a l’utilisation : chaque requete genere un grand nombre de 302 avant de parvenir a la page desiree…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *