Résolu : Discussion autour de Traefik

Je sais que cela a déjà été discuté, mais la plupart des discussions plus anciennes concernaient d’anciennes versions de Discourse et de Traefik - je suis donc là et j’ai besoin d’aide :smiley:

Qu’est-ce qui fonctionne ?
Discourse était accessible de l’extérieur et fonctionnait bien jusqu’à ce que je commente tous les ports exposés.

Traefik est également accessible de l’extérieur.

Qu’est-ce qui ne fonctionne pas ?
Essayer d’accéder à Discourse me donne une erreur de passerelle incorrecte (bad gateway), mais en essayant différentes choses que j’ai lues, j’ai aussi obtenu un 404.

Ma configuration Traefik :

cat docker-compose.yml
version: '3'
services:
  traefik:
    image: traefik:latest
#    network_mode: "host"
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme.json:/acme.json
      - ./data/dynamic_conf.yml:/dynamic_conf.yml
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`mydyndns-url`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=redacted:***"
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`mydyndns-url`)"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=api@internal"
      - "providers.file.filename=/dynamic_conf.yml"
      - "traefik.http.routers.traefik-secure.middlewares=secHeaders@file,traefik-auth"
networks:
  proxy:
    external: true

J’utilise

docker network create proxy
docker-compose -f /opt/containers/traefik/docker-compose.yml up -d

pour démarrer les choses. J’ai utilisé data/traefik.yml de ici et data/dynamic_conf.yml du même gars

Cela fonctionne.

À l’intérieur de mon Discourse (/var/discourse/containers/app.yml), j’ai ceci :

## ceci est le modèle de conteneur Docker Discourse autonome tout-en-un
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ TRÈS PRUDENT LORS DE L'ÉDITION !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire


templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## voir https://meta.discourse.org/t/17247 pour les détails
expose:
#  - "7890:80"   # http
#  - "7891:443" # https

labels:
  app_name: discourse
  traefik.enable: true
  traefik.http.routers.discourse.entrypoints: http
  traefik.http.routers.discourse.rule: Host(`***`)      ## Entrez votre domaine ici
  traefik.http.middlewares.discourse-https-redirect.redirectscheme.scheme: https
  traefik.http.routers.discourse.middlewares: discourse-https-redirect
  traefik.http.routers.discourse-secure.entrypoints: https
  traefik.http.routers.discourse-secure.rule: Host(`***`)      ## Entrez votre domaine ici
  traefik.http.routers.discourse-secure.tls: true
  traefik.http.routers.discourse-secure.tls.certresolver: http
  traefik.http.routers.discourse-secure.service: discourse
  traefik.http.services.discourse.loadbalancer.server.port: 3000
  traefik.docker.network: proxy

docker_args:
  - "--network=proxy"

networks:
  - proxy
#  - default

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définir db_shared_buffers à un maximum de 25% de la mémoire totale.
  ## sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  #db_shared_buffers: "256MB"

  ## peut améliorer les performances de tri, mais ajoute de l'utilisation de la mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (défaut : tests-passed)
  #version: tests-passed

env:
  LC_ALL: de_DE.UTF-8
  LANG: de_DE.UTF-8
  LANGUAGE: dn_DE.UTF-8
  EMBER_CLI_PROD_ASSETS: 1
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  #UNICORN_WORKERS: 3

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Obligatoire. Discourse ne fonctionnera pas avec un simple numéro IP.
  DISCOURSE_HOSTNAME: ***

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (-h option) que celui spécifié ci-dessus (défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails séparés par des virgules qui seront rendus administrateurs et développeurs
  ## lors de la première inscription, par exemple 'user1@example.com,user2@example.com'

///la configuration des e-mails est omise pour des raisons de confidentialité - cela fonctionnait lorsqu'elle était directement exposée

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour tirer)
  ## voir https://meta.discourse.org/t/14857 pour les détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La clé d'API de géolocalisation MaxMind pour la recherche d'adresses IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour les détails
  DISCOURSE_MAXMIND_LICENSE_KEY: ***

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour les détails
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit s'exécuter qu'une seule fois.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin des commandes personnalisées"

Alors… s’il vous plaît !

Qu’ai-je fait de mal ?

Cela suggère que votre conteneur est cassé d’une manière ou d’une autre, mais que vous avez configuré Traefik avec succès pour vous y connecter, vous voudrez donc probablement y revenir. Peut-être n’avez-vous pas attendu assez longtemps que le serveur Web et Rails démarrent. Je ne vois aucun problème évident avec app.yml.

Merci, @pfaffman !

J’ai attendu un moment (11 heures, et cet ordinateur n’est pas SI lent) - et cela ne résout pas le problème.

Je me demande si j’ai réussi à forcer discourse à se connecter à mon réseau nommé « proxy ». Y a-t-il un moyen de vérifier cela ?

docker ps me dit que discourse n’utilise plus de ports, ce que je voulais. Mais je ne peux pas dire si discourse se connecte à quoi que ce soit.

./launcher enter app
wget www.google.de

me montre que Discourse est connecté à Internet. Mais je ne peux pas y accéder de l’extérieur…

Essayez le port 80, pas le 3000

1 « J'aime »

ÇA MARCHE !!! Merci BEAUCOUP BEAUCOUP. Ça me tracassait depuis une semaine.

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.