Gelöst: Diskussion hinter Traefik

Ich weiß, dass dies schon einmal besprochen wurde, aber die meisten älteren Diskussionen bezogen sich auf ältere Versionen von Discourse und Traefik – daher stehe ich hier und brauche Hilfe :smiley:

Was funktioniert?
Discourse war von außen erreichbar und funktionierte einwandfrei, bis ich jeden Port auskommentierte.

Traefik ist auch von außen erreichbar.

Was funktioniert nicht?
Der Versuch, auf Discourse zuzugreifen, gibt mir einen Fehler “Bad Gateway”, aber als ich verschiedene Dinge ausprobierte, die ich gelesen habe, erhielt ich auch eine 404.

Mein Traefik-Setup:

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

Ich benutze

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

zum Starten. Ich habe data/traefik.yml von hier und data/dynamic_conf.yml vom selben Typ verwendet.

Das funktioniert.

Innerhalb meines Discourse (/var/discourse/containers/app.yml) habe ich Folgendes:

## Dies ist die All-in-One-Standalone-Discourse-Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu erstellen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE SEHR VORSICHTIG BEIM BEARBEITEN!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGENÜBER FEHLERN BEI LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei nach Bedarf zu validieren.

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Kommentieren Sie diese beiden Zeilen aus, wenn Sie Lets Encrypt (https) hinzufügen möchten
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container verfügbar machen?
## Wenn Sie möchten, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
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(`***`)      ## Hier eure Domain eintragen
  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(`***`)      ## Hier eure Domain eintragen
  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"

  ## Setzen Sie db_shared_buffers auf maximal 25% des Gesamtspeichers.
  ## wird automatisch von bootstrap basierend auf erkanntem RAM gesetzt, oder Sie können überschreiben
  #db_shared_buffers: "256MB"

  ## kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
  #db_work_mem: "40MB"

  ## Welche Git-Revision soll dieser Container verwenden? (Standard: 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

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
  ## wird automatisch von bootstrap basierend auf erkannten CPUs gesetzt, oder Sie können überschreiben
  #UNICORN_WORKERS: 3

  ## TODO: Der Domainname, unter dem diese Discourse-Instanz erreichbar sein wird
  ## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
  DISCOURSE_HOSTNAME: ***

  ## Kommentieren Sie dies aus, wenn der Container mit demselben
  ## Hostnamen (-h Option) wie oben angegeben gestartet werden soll (Standard "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Komma-getrennte Liste von E-Mails, die beim ersten Anmelden zu Administratoren und Entwicklern gemacht werden
  ## Beispiel 'user1@example.com,user2@example.com'

///E-Mail-Konfiguration aus Datenschutzgründen weggelassen – das funktionierte, als es direkt verfügbar war

  ## Die HTTP- oder HTTPS-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## Der Maxmind Geolocation IP-Adressschlüssel für die IP-Adressen-Suche
  ## siehe https://meta.discourse.org/t/-/137387/23 für Details
  DISCOURSE_MAXMIND_LICENSE_KEY: ***

## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins kommen hierher
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Alle benutzerdefinierten Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"
  ## Wenn Sie die E-Mail-Adresse 'Von' für Ihre erste Registrierung festlegen möchten, kommentieren Sie die Zeile aus und ändern Sie sie:
  ## Nachdem Sie die erste Anmelde-E-Mail erhalten haben, kommentieren Sie die Zeile wieder aus. Sie muss nur einmal ausgeführt werden.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Ende der benutzerdefinierten Befehle"

Also… bitte!

Was habe ich falsch gemacht?

Das deutet darauf hin, dass Ihr Container irgendwie defekt ist, aber dass Sie Traefik erfolgreich so konfiguriert haben, dass es sich damit verbindet. Wahrscheinlich möchten Sie also dorthin zurückkehren. Möglicherweise haben Sie nicht lange genug gewartet, bis der Webserver und Rails gestartet sind. Ich sehe keine offensichtlichen Probleme mit der app.yml.

Danke, @pfaffman!

Ich habe eine Weile gewartet (11 Stunden, und dieser Computer ist nicht SO langsam) – und das löst es nicht.

Ich frage mich, ob es mir gelungen ist, Discourse zu zwingen, sich mit meinem Netzwerk namens „proxy“ zu verbinden. Gibt es eine Möglichkeit, das zu überprüfen?

docker ps sagt mir, dass Discourse keine Ports mehr verwendet, was ich wollte. Aber ich kann nicht sagen, ob Discourse eine Verbindung zu irgendetwas herstellt.

./launcher enter app
wget www.google.de

zeigt mir, dass Discourse mit dem Internet verbunden ist. Aber ich kann es von außen nicht erreichen…

Versuche Port 80, nicht 3000

1 „Gefällt mir“

ES FUNKTIONIERT!!! Vielen, vielen Dank. Das hat mich eine Woche lang beschäftigt.

1 „Gefällt mir“

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