From 40d3117d9fb8f9222b6205a198f3793aee3af891 Mon Sep 17 00:00:00 2001 From: Quentin Duchemin <quentinduchemin@tuta.io> Date: Fri, 4 Sep 2020 15:49:11 +0200 Subject: [PATCH] Upgrade all services for Traefik v2 ; clean Compose files ; update doc --- doc/guide_bonnes_pratiques.md | 25 +++++++---- doc/update_and_test.md | 2 +- pica-db-backup/docker-compose.yml | 10 ++--- pica-dokuwiki/docker-compose.yml | 18 ++++---- pica-etherpad/docker-compose.yml | 58 +++++++++----------------- pica-grafana-prom/docker-compose.yml | 13 +++--- pica-graphbot/config.json | 8 ++-- pica-lufi/docker-compose.yml | 9 ++-- pica-mail/docker-compose.yml | 7 ++-- pica-mattermost/docker-compose.yml | 19 +++++---- pica-metrics-bot/docker-compose.yml | 11 ++--- pica-mumble-web/docker-compose.yml | 15 ++++--- pica-murmur/docker-compose.yml | 20 ++++----- pica-nextcloud/cet/docker-compose.yml | 16 ++++--- pica-nextcloud/pica/docker-compose.yml | 20 +++++---- pica-nginx/README.md | 7 ++-- pica-nginx/docker-compose.yml | 46 +++++++++++--------- pica-openldap/docker-compose.yml | 2 +- pica-plume/docker-compose.yml | 9 ++-- pica-registry/docker-compose.yml | 11 ++--- pica-traefik/README.md | 30 +++++-------- pica-uploads/docker-compose.yml | 17 ++++---- pica-wekan/docker-compose.yml | 18 ++++---- template/docker-compose.yml | 12 +++--- 24 files changed, 199 insertions(+), 204 deletions(-) diff --git a/doc/guide_bonnes_pratiques.md b/doc/guide_bonnes_pratiques.md index 84c748c8..526337f5 100644 --- a/doc/guide_bonnes_pratiques.md +++ b/doc/guide_bonnes_pratiques.md @@ -112,30 +112,37 @@ Il est suggéré d'éviter les volumes déclarés `external` : ## Reverse-proxy -Si le service est un service **HTTP(S)** (*i.e.* Web), on utilisera systématiquement le reverse-proxy [Traefik](https://wiki.picasoft.net/doku.php?id=technique:infrastructure:archi#traefik) et on bindera **pas** son port interne sur un port de l'hôte. +Si le service est un service **HTTP(S)** (*i.e.* Web), on utilisera systématiquement le reverse-proxy Traefik et on bindera **pas** son port interne sur un port de l'hôte. En effet, Traefik permet de gérer tout pour nous : la redirection vers le bon conteneur et le bon port en fonction du nom de domaine, la création et le renouvellement des certificats, etc. -Il suffit pour ce faire d'ajouter les bons labels, et d'ajouter le conteneur au réseau par défaut de Traefik, qui s'appelle `docker_default`, et existe indépendamment de Docker Compose. +Il suffit pour ce faire d'ajouter les bons labels, et d'ajouter le conteneur au réseau par défaut de Traefik, qui s'appelle `proxy`, et existe indépendamment de Docker Compose. Exemple à reprendre : ```yaml networks: - docker_default: + proxy: external: true services: exemple: networks: - - docker_default + - proxy labels: # Traefik va prendre ce conteneur en compte traefik.enable: true + # websecure correspond au port 443 de la machine (config Traefik) + # Remplacer <exemple> par le nom du conteneur + traefik.http.routers.<exemple>.entrypoints: websecure # Il redirigera vers ce port, exposé par le conteneur - traefik.port: <port> + # Remplacer <exemple> par le nom du conteneur + # Remplacer app.picasoft.net par l'URL souhaitée + traefik.http.routers.<exemple>.rule: Host(`app.picasoft.net`) # Lorsque l'utilisateur consulte cette URL - traefik.frontend.rule: <exemple>.picasoft.net + # Remplacer <exemple> par le nom du conteneur + # Remplacer 80 par le port du service + traefik.http.services.<exemple>.loadbalancer.server.port: 80 ``` ## Healthcheck @@ -182,7 +189,7 @@ Ce qui nous donnerait quelque chose comme : networks: # C'est le réseau dans lequel se trouve # Traefik sur toutes les machines. - docker_default: + proxy: external: true # Ce réseau est créé uniquement pour # ce fichier Compose. @@ -190,11 +197,11 @@ networks: services: exemple: - # On voit que le service est dans le réseau docker_default, pour être + # On voit que le service est dans le réseau proxy, pour être # accessible depuis Traefik, mais aussi dans le réseau db, pour # pouvoir parler à la base de données. networks: - - docker_default + - proxy - db # La base de donnée n'est que dans son réseau, et n'est donc # pas accessible depuis Internet. diff --git a/doc/update_and_test.md b/doc/update_and_test.md index 09caf745..66cc18e3 100644 --- a/doc/update_and_test.md +++ b/doc/update_and_test.md @@ -114,7 +114,7 @@ Si nécessaire. Certains services ne sont pas accessibles depuis Internet. Remplacez les URL de production (`.picasoft.net`) par des URL de tests (`.test.picasoft.net`), sauf dans le nom de l'image : -* Si le service utilise Traefik, voir du côté de `traefik.frontend.rule` dans le fichier Compose +* Si le service utilise Traefik, voir du côté de `traefik.http.services.<service>.loadbalancer.server.port` dans le fichier Compose * Si le service utilise des fichiers de configuration, remplacez les références aux URL... ### Créer les fichiers d'example diff --git a/pica-db-backup/docker-compose.yml b/pica-db-backup/docker-compose.yml index 12f10294..e6359d8b 100644 --- a/pica-db-backup/docker-compose.yml +++ b/pica-db-backup/docker-compose.yml @@ -2,16 +2,13 @@ version: "3.7" networks: etherpad_main: - name: "etherpad_main" + external: true etherpad_week: - name: "etherpad_week" + external: true plume: - name: plume + external: true wekan: - name: "wekan" - docker_default: external: true - name: "docker_default" services: db-backup: @@ -24,7 +21,6 @@ services: env_file: - ./secrets/db.secrets networks: - - docker_default - etherpad_main - etherpad_week - plume diff --git a/pica-dokuwiki/docker-compose.yml b/pica-dokuwiki/docker-compose.yml index 79cdf89c..985279da 100644 --- a/pica-dokuwiki/docker-compose.yml +++ b/pica-dokuwiki/docker-compose.yml @@ -1,11 +1,11 @@ -version : "2.4" +version : "3.7" volumes: dokuwiki-app: name: "dokuwiki-app" networks: - docker_default: + proxy: external: true services: @@ -15,15 +15,11 @@ services: container_name: dokuwiki-app volumes: - dokuwiki-app:/var/www/html - security_opt: - - no-new-privileges - mem_limit: "2048m" - cpus: "0.20" - pids_limit: 1024 labels: - - "traefik.frontend.rule=Host:wiki.picasoft.net" - - "traefik.port=80" - - "traefik.enable=true" + traefik.http.routers.dokuwiki-app.entrypoints: websecure + traefik.http.routers.dokuwiki-app.rule: Host(`wiki.picasoft.net`) + traefik.http.services.dokuwiki-app.loadbalancer.server.port: 80 + traefik.enable: true restart: unless-stopped networks: - - docker_default + - proxy diff --git a/pica-etherpad/docker-compose.yml b/pica-etherpad/docker-compose.yml index 44bf014b..4fa9ece7 100755 --- a/pica-etherpad/docker-compose.yml +++ b/pica-etherpad/docker-compose.yml @@ -1,4 +1,4 @@ -version : "2.4" +version : "3." volumes: etherpad-db: @@ -12,33 +12,26 @@ volumes: networks: standard: - name: "etherpad_main" + name: etherpad_main week: - name: "etherpad_week" - docker_default: + name: etherpad_week + proxy: external: true - name: "docker_default" services: etherpad-app: image: registry.picasoft.net/pica-etherpad:1.8.4 build: . container_name: etherpad-app - depends_on: - - etherpad-db - security_opt: - - no-new-privileges - mem_limit: "2048m" - cpus: 0.6 - pids_limit: 1024 env_file: ./secrets/etherpad-app.secrets volumes: - ./settings.json:/opt/etherpad-lite/settings.json - deleted-pads-standard:/opt/etherpad-lite/deleted_pads labels: + traefik.http.routers.etherpad-app.entrypoints: websecure + traefik.http.routers.etherpad-app.rule: Host(`pad.picasoft.net`) + traefik.http.services.etherpad-app.loadbalancer.server.port: 8080 traefik.enable: true - traefik.frontend.rule: "Host:pad.picasoft.net" - traefik.port: 8080 environment: DB_HOST: "etherpad-db" LOGLEVEL: "INFO" @@ -47,45 +40,35 @@ services: THEME: "colibris" TITLE: "Picapad" TRUST_PROXY: "true" - restart: unless-stopped networks: - - docker_default + - proxy - standard + depends_on: + - etherpad-db + restart: unless-stopped etherpad-db: image: postgres:12 container_name: etherpad-db - security_opt: - - no-new-privileges - mem_limit: "2048m" - cpus: "0.40" - pids_limit: 1024 volumes: - etherpad-db:/var/lib/postgresql/data env_file: ./secrets/etherpad-db.secrets - restart: unless-stopped networks: - standard + restart: unless-stopped etherpad-week-app: image: registry.picasoft.net/pica-etherpad:1.8.4 container_name: etherpad-week-app build: . - depends_on: - - etherpad-week-db - security_opt: - - no-new-privileges - mem_limit: "2048m" - cpus: 0.6 - pids_limit: 1024 env_file: ./secrets/etherpad-week-app.secrets volumes: - ./settings_week.json:/opt/etherpad-lite/settings.json - deleted-pads-week:/opt/etherpad-lite/deleted_pads labels: - traefik.enable: true - traefik.frontend.rule: "Host:week.pad.picasoft.net" - traefik.port: 8080 + traefik.http.routers.etherpad-week-app.entrypoints: websecure + traefik.http.routers.etherpad-week-app.rule: Host(`week.pad.picasoft.net`) + traefik.http.services.etherpad-week-app.loadbalancer.server.port: 8080 environment: DB_HOST: "etherpad-week-db" LOGLEVEL: "INFO" @@ -94,19 +77,16 @@ services: THEME: "colibris" TITLE: "Picapad Hebdo" TRUST_PROXY: "true" - restart: unless-stopped + depends_on: + - etherpad-week-db networks: - - docker_default + - proxy - week + restart: unless-stopped etherpad-week-db: image: postgres:12 container_name: etherpad-week-db - security_opt: - - no-new-privileges - mem_limit: "2048m" - cpus: "0.40" - pids_limit: 1024 volumes: - weekpad-db:/var/lib/postgresql/data env_file: ./secrets/etherpad-week-db.secrets diff --git a/pica-grafana-prom/docker-compose.yml b/pica-grafana-prom/docker-compose.yml index 02baa356..08c98392 100644 --- a/pica-grafana-prom/docker-compose.yml +++ b/pica-grafana-prom/docker-compose.yml @@ -2,8 +2,8 @@ version: '3.7' networks: metrics: - docker_default: - name: docker_default + proxy: + external: true volumes: grafana: @@ -27,11 +27,12 @@ services: - GF_AUTH_LDAP_ALLOW_SIGN_UP=false env_file: ./secrets/grafana.secrets labels: - - "traefik.frontend.rule=Host:grafana.picasoft.net" - - "traefik.port=3000" - - "traefik.enable=true" + traefik.http.routers.grafana.entrypoints: websecure + traefik.http.routers.grafana.rule: Host(`grafana.picasoft.net`) + traefik.http.services.grafana.loadbalancer.server.port: 3000 + traefik.enable: true networks: - - docker_default + - proxy - metrics restart: unless-stopped diff --git a/pica-graphbot/config.json b/pica-graphbot/config.json index b45218ae..e984a254 100644 --- a/pica-graphbot/config.json +++ b/pica-graphbot/config.json @@ -7,7 +7,7 @@ "url": "pica01.picasoft.net", "port": 2376, "exclude": [], - "default_network": "docker_default", + "default_network": "proxy", "tls_config": { "ca_cert": "auth/pica01/ca.pem", @@ -20,7 +20,7 @@ "url": "pica02.picasoft.net", "port": 2376, "exclude": [], - "default_network": "docker_default", + "default_network": "proxy", "tls_config": { "ca_cert": "auth/pica02/ca.pem", @@ -33,7 +33,7 @@ "url": "pica01-test.picasoft.net", "port": 2376, "exclude": [], - "default_network": "docker_default", + "default_network": "proxy", "tls_config": { "ca_cert": "auth/pica01-test/ca.pem", @@ -44,7 +44,7 @@ { "name": "monitoring", "url": "localhost", - "default_network": "docker_default" + "default_network": "proxy" } ], "color_scheme": { diff --git a/pica-lufi/docker-compose.yml b/pica-lufi/docker-compose.yml index 6f50d31c..9cfd2878 100644 --- a/pica-lufi/docker-compose.yml +++ b/pica-lufi/docker-compose.yml @@ -6,7 +6,7 @@ volumes: lufi-files: networks: - docker_default: + proxy: external: true lufi: @@ -22,11 +22,12 @@ services: - lufi-files:/lufi/files - ./lufi.conf:/lufi/lufi.conf networks: - - docker_default + - proxy - lufi labels: - traefik.frontend.rule: Host:drop.picasoft.net - traefik.port: 8081 + traefik.http.routers.lufi.entrypoints: websecure + traefik.http.routers.lufi.rule: Host(`drop.picasoft.net`) + traefik.http.services.lufi.loadbalancer.server.port: 8081 traefik.enable: true env_file: - ./secrets/lufi.secrets diff --git a/pica-mail/docker-compose.yml b/pica-mail/docker-compose.yml index 6aed5888..9949f622 100644 --- a/pica-mail/docker-compose.yml +++ b/pica-mail/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" networks: mail: name: pica-mail - docker_default: + proxy: external: true volumes: @@ -44,7 +44,7 @@ services: - "587:587" networks: - mail - - docker_default + - proxy volumes: - mail-mta-log:/var/log #doit contenir selecteur.domaine.rsa @@ -85,8 +85,7 @@ services: #prefixe DKIM, utilise pour identifier la clef DKIM_SELECTOR: janv2019 labels: - traefik.frontend.rule: Host:mail.picasoft.net - traefik.port: 80 + traefik.http.routers.pica-mail-mta.rule: Host(`mail.picasoft.net`) traefik.enable: true tls-certs-monitor.enable: true tls-certs-monitor.action: restart diff --git a/pica-mattermost/docker-compose.yml b/pica-mattermost/docker-compose.yml index 5f66f8f3..58d07ec5 100644 --- a/pica-mattermost/docker-compose.yml +++ b/pica-mattermost/docker-compose.yml @@ -1,8 +1,8 @@ -version : "2.4" +version : "3.7" networks: - docker_default: + proxy: external: true - name: "docker_default" + mattermost: volumes: mattermost-config: @@ -30,12 +30,13 @@ services: - MM_SITEURL=https://team.picasoft.net env_file: ./secrets/mattermost-db.secrets labels: - - "traefik.frontend.rule=Host:team.picasoft.net" - - "traefik.port=8000" - - "traefik.frontend.passHostHeader=true" - - "traefik.enable=true" + traefik.http.routers.mattermost-app.entrypoints: websecure + traefik.http.routers.mattermost-app.rule: Host(`team.picasoft.net`) + traefik.http.services.mattermost-app.loadbalancer.server.port: 8000 + traefik.enable: true networks: - - docker_default + - proxy + - mattermost depends_on: - mattermost-db restart: unless-stopped @@ -48,5 +49,5 @@ services: - /etc/localtime:/etc/localtime:ro env_file: ./secrets/mattermost-db.secrets networks: - - docker_default + - mattermost restart: unless-stopped diff --git a/pica-metrics-bot/docker-compose.yml b/pica-metrics-bot/docker-compose.yml index 9755a65c..1475f906 100644 --- a/pica-metrics-bot/docker-compose.yml +++ b/pica-metrics-bot/docker-compose.yml @@ -5,7 +5,7 @@ volumes: name: influxdb-services networks: - docker_default: + proxy: external: true metrics: @@ -36,10 +36,11 @@ services: - INFLUXDB_REPORTING_DISABLED=true env_file: ./secrets/influxdb.secrets labels: - traefik.frontend.rule: "Host:influxdb.picasoft.net" - traefik.port: 8086 - traefik.enable: true + traefik.http.routers.influxdb-services.entrypoints: websecure + traefik.http.routers.influxdb-services.rule: Host(`influxdb.picasoft.net`) + traefik.http.services.influxdb-services.loadbalancer.server.port: 8086 + traefik.enable: true networks: - metrics - - docker_default + - proxy restart: always diff --git a/pica-mumble-web/docker-compose.yml b/pica-mumble-web/docker-compose.yml index 47e266a7..f035b822 100644 --- a/pica-mumble-web/docker-compose.yml +++ b/pica-mumble-web/docker-compose.yml @@ -1,8 +1,7 @@ -version: "2.4" +version: "3.7" networks: - docker_default: + proxy: external: true - name: "docker_default" services: mumble-web: @@ -12,12 +11,12 @@ services: environment: MUMBLE_SERVER: "voice.picasoft.net:64738" networks: - - docker_default + - proxy volumes: - ./config.json:/home/node/dist/config.local.js labels: - - "traefik.frontend.rule=Host:voice.picasoft.net" - - "traefik.port=8080" - - "traefik.frontend.passHostHeader=true" - - "traefik.enable=true" + traefik.http.routers.mumble-web.entrypoints: websecure + traefik.http.routers.mumble-web.rule: Host(`voice.picasoft.net`) + traefik.http.services.mumble-web.loadbalancer.server.port: 8080 + traefik.enable: true restart: unless-stopped diff --git a/pica-murmur/docker-compose.yml b/pica-murmur/docker-compose.yml index d42e2cf8..832e8658 100644 --- a/pica-murmur/docker-compose.yml +++ b/pica-murmur/docker-compose.yml @@ -1,8 +1,7 @@ -version: "2.4" +version: "3.7" networks: - docker_default: + proxy: external: true - name: "docker_default" volumes: murmur-data: @@ -23,12 +22,13 @@ services: - murmur-data:/data - /DATA/docker/certs/voice.picasoft.net/:/certs networks: - - docker_default + - proxy labels: - - "traefik.enable=true" - - "traefik.port=8000" - - "traefik.frontend.rule=Host:voice.picasoft.net;Path:/metrics" - - "tls-certs-monitor.enable=true" - - "tls-certs-monitor.action=kill:SIGUSR1" - - "tls-certs-monitor.owner=103" + traefik.http.routers.murmur.entrypoints: websecure + traefik.http.routers.murmur.rule: Host(`voice.picasoft.net`) && Path('/metrics') + traefik.http.services.murmur.loadbalancer.server.port: 8000 + traefik.enable: true + tls-certs-monitor.enable: true + tls-certs-monitor.action: kill:SIGUSR1 + tls-certs-monitor.owner: 103 restart: unless-stopped diff --git a/pica-nextcloud/cet/docker-compose.yml b/pica-nextcloud/cet/docker-compose.yml index 12185327..8ed5502a 100644 --- a/pica-nextcloud/cet/docker-compose.yml +++ b/pica-nextcloud/cet/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' networks: nextcloud_cet: name: nextcloud_cet - docker_default: + proxy: external: true volumes: @@ -34,11 +34,17 @@ services: - ./nginx.conf:/etc/nginx/nginx.conf:ro env_file: ./secrets/cloudcet.secrets labels: - - "traefik.frontend.rule=Host:cloudcet.picasoft.net" - - "traefik.port=80" - - "traefik.enable=true" + traefik.http.routers.cloudcet.entrypoints: websecure + traefik.http.routers.cloudcet.rule: Host(`cloudcet.picasoft.net`) + traefik.http.services.cloudcet.loadbalancer.server.port: 80 + traefik.enable: true + # https://docs.nextcloud.com/server/16/admin_manual/configuration_server/reverse_proxy_configuration.html + traefik.http.routers.cloudcet.middlewares: cloudcet@docker + traefik.http.middlewares.cloudcet.redirectregex.permanent: true + traefik.http.middlewares.cloudcet.redirectregex.regex: ^/.well-known/(card|cal)dav + traefik.http.middlewares.cloudcet.redirectregex.replacement: /remote.php/dav/ networks: - - docker_default + - proxy - nextcloud_cet depends_on: - cloudcet diff --git a/pica-nextcloud/pica/docker-compose.yml b/pica-nextcloud/pica/docker-compose.yml index 858886b4..1ed1cc29 100644 --- a/pica-nextcloud/pica/docker-compose.yml +++ b/pica-nextcloud/pica/docker-compose.yml @@ -8,8 +8,8 @@ volumes: networks: nextcloud: - docker_default: - name: docker_default + proxy: + external: true services: nextcloud-app: @@ -38,15 +38,17 @@ services: - nextcloud-app networks: - nextcloud - - docker_default + - proxy labels: - - "traefik.frontend.rule=Host:cloud.picasoft.net" - - "traefik.port=80" - - "traefik.enable=true" + traefik.http.routers.nextcloud-web.entrypoints: websecure + traefik.http.routers.nextcloud-web.rule: Host(`cloud.picasoft.net`) + traefik.http.services.nextcloud-web.loadbalancer.server.port: 80 + traefik.enable: true # https://docs.nextcloud.com/server/16/admin_manual/configuration_server/reverse_proxy_configuration.html - - "traefik.frontend.redirect.permanent=true" - - "traefik.frontend.redirect.regex=https://(.*)/.well-known/(card|cal)dav" - - "traefik.frontend.redirect.replacement=https://$$1/remote.php/dav/" + traefik.http.routers.nextcloud-web.middlewares: nextcloud-web@docker + traefik.http.middlewares.nextcloud-web.redirectregex.permanent: true + traefik.http.middlewares.nextcloud-web.redirectregex.regex: ^/.well-known/(card|cal)dav + traefik.http.middlewares.nextcloud-web.redirectregex.replacement: /remote.php/dav/ restart: unless-stopped nextcloud-db: diff --git a/pica-nginx/README.md b/pica-nginx/README.md index 361ccca7..c2b93dd6 100644 --- a/pica-nginx/README.md +++ b/pica-nginx/README.md @@ -33,13 +33,14 @@ mon_site: volumes: - mon_site:/var/www/html labels: - traefik.frontend.rule: Host:mon_site.picasoft.net - traefik.port: 80 + traefik.http.routers.mon_site.entrypoints: websecure + traefik.http.routers.mon_site.rule: Host(`mon_site.picasoft.net`) + traefik.http.services.mon_site.loadbalancer.server.port: 80 traefik.enable: true environment: AUTOINDEX: true networks: - - docker_default + - proxy restart: unless-stopped ``` diff --git a/pica-nginx/docker-compose.yml b/pica-nginx/docker-compose.yml index da771c66..fe610d07 100644 --- a/pica-nginx/docker-compose.yml +++ b/pica-nginx/docker-compose.yml @@ -15,7 +15,7 @@ volumes: name: stiegler networks: - docker_default: + proxy: external: true x-image-name: &NGINX_IMAGE @@ -29,11 +29,12 @@ services: volumes: - website:/var/www/html labels: - traefik.frontend.rule: Host:www.picasoft.net,picasoft.net - traefik.port: 80 + traefik.http.routers.website.entrypoints: websecure + traefik.http.routers.website.rule: Host(`www.picasoft.net`, 'picasoft.net') + traefik.http.services.website.loadbalancer.server.port: 80 traefik.enable: true networks: - - docker_default + - proxy restart: unless-stopped doc: @@ -43,11 +44,12 @@ services: volumes: - doc:/var/www/html labels: - traefik.frontend.rule: Host:doc.picasoft.net - traefik.port: 80 + traefik.http.routers.doc.entrypoints: websecure + traefik.http.routers.doc.rule: Host(`doc.picasoft.net`) + traefik.http.services.doc.loadbalancer.server.port: 80 traefik.enable: true networks: - - docker_default + - proxy restart: unless-stopped school: @@ -57,11 +59,12 @@ services: volumes: - school:/var/www/html labels: - traefik.frontend.rule: Host:school.picasoft.net - traefik.port: 80 + traefik.http.routers.school.entrypoints: websecure + traefik.http.routers.school.rule: Host(`school.picasoft.net`) + traefik.http.services.school.loadbalancer.server.port: 80 traefik.enable: true networks: - - docker_default + - proxy restart: unless-stopped radio: @@ -71,13 +74,14 @@ services: volumes: - radio:/var/www/html labels: - traefik.frontend.rule: Host:radio.picasoft.net - traefik.port: 80 + traefik.http.routers.radio.entrypoints: websecure + traefik.http.routers.radio.rule: Host(`radio.picasoft.net`) + traefik.http.services.radio.loadbalancer.server.port: 80 traefik.enable: true networks: - - docker_default + - proxy restart: unless-stopped - + culture: container_name: culture image: *NGINX_IMAGE @@ -85,13 +89,14 @@ services: volumes: - culture:/var/www/html labels: - traefik.frontend.rule: Host:culture.picasoft.net - traefik.port: 80 + traefik.http.routers.culture.entrypoints: websecure + traefik.http.routers.culture.rule: Host(`culture.picasoft.net`) + traefik.http.services.culture.loadbalancer.server.port: 80 traefik.enable: true environment: AUTOINDEX: "true" networks: - - docker_default + - proxy restart: unless-stopped stiegler: @@ -101,9 +106,10 @@ services: volumes: - stiegler:/var/www/html labels: - traefik.frontend.rule: Host:stiegler.picasoft.net - traefik.port: 80 + traefik.http.routers.stiegler.entrypoints: websecure + traefik.http.routers.stiegler.rule: Host(`stiegler.picasoft.net`) + traefik.http.services.stiegler.loadbalancer.server.port: 80 traefik.enable: true networks: - - docker_default + - proxy restart: unless-stopped diff --git a/pica-openldap/docker-compose.yml b/pica-openldap/docker-compose.yml index 1882ea54..ce93ea0a 100644 --- a/pica-openldap/docker-compose.yml +++ b/pica-openldap/docker-compose.yml @@ -16,7 +16,7 @@ services: env_file: - ./secrets/pica-openldap.secrets labels: - traefik.frontend.rule: "Host:ldap.picasoft.net" + traefik.http.routers.ldap.rule: Host(`ldap.picasoft.net`) traefik.enable: true tls-certs-monitor.enable: true tls-certs-monitor.action: "restart" diff --git a/pica-plume/docker-compose.yml b/pica-plume/docker-compose.yml index cce72fbf..4f8acc35 100644 --- a/pica-plume/docker-compose.yml +++ b/pica-plume/docker-compose.yml @@ -11,7 +11,7 @@ volumes: name: plume_first_launch networks: - docker_default: + proxy: external: true plume: name: plume @@ -34,12 +34,13 @@ services: - searchidx:/app/search_index - first-launch:/firstlaunch labels: - traefik.frontend.rule: "Host:blog.picasoft.net" + traefik.http.routers.blog.entrypoints: websecure + traefik.http.routers.blog.rule: Host(`blog.picasoft.net`) + traefik.http.services.blog.loadbalancer.server.port: 7878 traefik.enable: true - traefik.port: 7878 networks: - plume - - docker_default + - proxy depends_on: - blog-db restart: unless-stopped diff --git a/pica-registry/docker-compose.yml b/pica-registry/docker-compose.yml index 6ba2be28..9609cd9a 100644 --- a/pica-registry/docker-compose.yml +++ b/pica-registry/docker-compose.yml @@ -1,8 +1,8 @@ version: '3.7' networks: - docker_default: - name: docker_default + proxy: + external: true volumes: registry: @@ -18,12 +18,13 @@ services: REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry networks: - - docker_default + - proxy volumes: - registry:/var/lib/registry - ./auth.secrets:/auth/htpasswd labels: - traefik.frontend.rule: Host:registry.picasoft.net - traefik.port: 5000 + traefik.http.routers.registry.entrypoints: websecure + traefik.http.routers.registry.rule: Host(`registry.picasoft.net`) + traefik.http.services.registry.loadbalancer.server.port: 5000 traefik.enable: true restart: unless-stopped diff --git a/pica-traefik/README.md b/pica-traefik/README.md index 0544aa4a..d3c67df3 100644 --- a/pica-traefik/README.md +++ b/pica-traefik/README.md @@ -7,36 +7,28 @@ Ce service doit être lancé sur l'ensemble des machines de l'infrastructure. ### Configuration -La configuration a lieu dans le fichier [traefik.toml](./traefik.toml). +La configuration a lieu dans les fichiers [traefik.toml](./traefik.toml) et [traefik_dynamic.toml](./traefik_dynamic.toml). Notez que toute modification dans ce fichier impactera l'ensemble des machines, puisque le même fichier est utilisé pour l'ensemble des machines. À des fins de tests, il peut être modifié localement sur les machines, mais doit toujours rester synchronisé avec ce dépôt à long terme. Pour la génération des certificats, Traefik utilise Let's Encrypt. Il n'y a aucune configuration à faire de ce côté. Attention, le nombre de certificats générables est limité à 50 par semaine. -Si on lance plein de conteneurs de tests, on utilisera temporairement [l'environnement de qualification](https://letsencrypt.org/fr/docs/staging-environment/) de Let's Encrypt, en ajoutant la directive `caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"` sous la section `[acme]`. +Si on lance plein de conteneurs de tests, on utilisera temporairement [l'environnement de qualification](https://letsencrypt.org/fr/docs/staging-environment/) de Let's Encrypt, en ajoutant la directive `caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"` sous la section `[certificatesResolvers.letsencrypt.acme]`. ### Lancement -Assurez-vous que le dossier `/DATA/docker/traefik/certs` existe. -C'est dans ce dossier que seront conservés tous les certificats générés par Traefik. +Au premier lancement, assurez-vous que : +* Le dossier `/DATA/docker/traefik/certs` existe +* Créez un fichier `acme.json` à l'intérieur +* Changez son propriétaire à `root` +* Changez ses permissions à `600` + +C'est dans ce fichier que seront conservés tous les certificats générés par Traefik. ### Mise à jour Il suffit de mettre à jour le tag de l'image dans Compose. -Attention, Traefik v2 introduit énormément de changements et [nous ne sommes pas certains](https://wiki.picasoft.net/doku.php?id=technique:adminsys:migration-traefik-v2) de la manière d'effectuer la migration. - -Aussi, Traefik v1.6 est utilisé pour tenterd d'éviter un bug introduit dans la 1.7, qui rend certains services redémarrés inaccessibles (voir [cette discussion](https://team.picasoft.net/picasoft/pl/66aorsxhtffrjytyhnecn436wa)). - -Avant toute mise à jour, il faudra discuter avec l'équipe technique et modifier ce README le cas échéant. - -### Todo - -*Voir si on peut passer Traefik en "host" au niveau du réseau pour qu'il ait accès à tous les réseaux* : -https://kanban.picasoft.net/b/7fCn765LCNGraBhxA/team-technique-picasoft/kjvc3iw2pFvszCTcR - -Actuellement, Traefik est dans le réseau `docker_default` sur toutes les machines, et les conteneurs souhaitant être accessibles via Traefik doivent être explicitement dans ce réseau. - -Ceci induit une complexité supplémentaire au niveau des fichiers Compose. +Lire la documentation [sur les mises à jour mineures](https://docs.traefik.io/v2.2/migration/v2/) pour voir s'il y a des opérations à effectuer ou des options dépréciées. -Il serait peut être bon de permettre à Traefik d'accéder à tous les réseaux et de supprimer énormément de directives "inutiles" dans les Compose. +La mise à jour vers Traefik v2 a été effectuée ; quelques détails sont à consulter [sur le wiki](https://wiki.picasoft.net/doku.php?id=technique:adminsys:migration-traefik-v2). diff --git a/pica-uploads/docker-compose.yml b/pica-uploads/docker-compose.yml index ea307aa8..b88b6c85 100644 --- a/pica-uploads/docker-compose.yml +++ b/pica-uploads/docker-compose.yml @@ -2,11 +2,11 @@ version: "3.7" volumes: uploads: - external: true + name: uploads networks: sftp: - docker_default: + proxy: external: true services: @@ -17,7 +17,7 @@ services: - uploads:/home/pica/uploads - ./secrets/sftp.secrets:/etc/sftp/users.conf:ro ports: - - "2222:22" + - 2222:22 networks: - sftp restart: unless-stopped @@ -28,9 +28,10 @@ services: volumes: - uploads:/var/www/html labels: - - "traefik.frontend.rule=Host:uploads.picasoft.net" - - "traefik.port=80" - - "traefik.enable=true" - restart: unless-stopped + traefik.http.routers.uploads.entrypoints: websecure + traefik.http.routers.uploads.rule: Host(`uploads.picasoft.net`) + traefik.http.services.uploads.loadbalancer.server.port: 80 + traefik.enable: true networks: - - docker_default + - proxy + restart: unless-stopped diff --git a/pica-wekan/docker-compose.yml b/pica-wekan/docker-compose.yml index 561b5201..ba783ce7 100644 --- a/pica-wekan/docker-compose.yml +++ b/pica-wekan/docker-compose.yml @@ -4,10 +4,10 @@ volumes: wekan: networks: - docker_default: + proxy: external: true wekan: - name: "wekan" + name: wekan services: wekan-db: @@ -40,11 +40,12 @@ services: depends_on: - wekan-db labels: - traefik.frontend.rule: Host:kanban.picasoft.net - traefik.port: 8080 + traefik.http.routers.wekan-app.entrypoints: websecure + traefik.http.routers.wekan-app.rule: Host(`kanban.picasoft.net`) + traefik.http.services.wekan-app.loadbalancer.server.port: 8080 traefik.enable: true networks: - - docker_default + - proxy - wekan restart: unless-stopped @@ -55,9 +56,10 @@ services: environment: - KANBAN_URL=https://kanban.picasoft.net networks: - - docker_default + - proxy labels: + traefik.http.routers.wekan-filter-hooks.entrypoints: websecure + traefik.http.routers.wekan-filter-hooks.rule: Host(`kanban.picasoft.net`) && Path('/forward_hooks') + traefik.http.services.wekan-filter-hooks.loadbalancer.server.port: 5000 traefik.enable: true - traefik.port: 5000 - traefik.frontend.rule: Host:kanban.picasoft.net;Path:/forward_hooks restart: unless-stopped diff --git a/template/docker-compose.yml b/template/docker-compose.yml index c4fbd859..a9a1d4b7 100644 --- a/template/docker-compose.yml +++ b/template/docker-compose.yml @@ -23,7 +23,7 @@ networks: app: # This is the reverse-proxy default network : put all services # that need to be served via Traefik in this network - docker_default: + proxy: external: true services: @@ -48,10 +48,10 @@ services: # entrypoint, for exemple. init: true # If the container has to be reached from - # the Internet, put in docker_default + # the Internet, put in proxy # Otherwise, just in its own network networks: - - docker_default + - proxy - app volumes: # Mount the Docker Volume in the container @@ -72,10 +72,12 @@ services: # redirected to this container. # Change the port to the exposed port of the # container. + # Replace ".app" by the container name. labels: traefik.enable: true - traefik.frontend.rule: "Host:app.picasoft.net" - traefik.port: 80 + traefik.http.routers.app.entrypoints: websecure + traefik.http.routers.app.rule: Host(`app.picasoft.net`) + traefik.http.services.app.loadbalancer.server.port: 80 # If the service has a database, # tell Compose that it depends on it (i.e.) # should be launched if the service is launched -- GitLab