Hallo,
ich habe diesen Beitrag als Anleitung verwendet, um Discourse so einzurichten, dass es mit Traefik funktioniert. Ich habe Traefik bereits mit einer anderen Webanwendung in Betrieb.
Wenn ich die Seite forum.private.com aufrufe, erhalte ich einen Fehler „404 page not found“.
Etwas scheint zu funktionieren, denn im Traefik-Dashboard unter dem Reiter „Services“ kann ich discourse@docker und discourse_secure@docker sehen.
Allerdings gibt es im Reiter „Router“ nichts für Discourse.
Die Änderungen, die ich an der app.yml vorgenommen habe, sind hier aufgeführt und basieren größtenteils auf dem oben verlinkten Beitrag. Ich habe am Ende der Docker-Argumente einen exponierten Port hinzugefügt, was anscheinend die oben genannten Dienste freigegeben hat. Ich wäre für jede Hilfe dankbar!
Traefik docker-compose
version: "3.3"
services:
################################################
#### Traefik Proxy Setup #####
###############################################
traefik:
image: traefik:v2.0
restart: always
container_name: traefik
ports:
- "80:80" # <== http
- "8080:8080" # <== :8080 ist der Port, auf dem das Dashboard läuft
- "443:443" # <== https
command:
#### Dies sind die CLI-Befehle, die Traefik konfigurieren und ihm mitteilen, wie es arbeiten soll! ####
- --api.insecure=true # <== Insecure-API aktivieren, NICHT FÜR PRODUKTIONSEINSATZ EMPFOHLEN
- --api.dashboard=true # <== Dashboard aktivieren, um Dienste, Middleware, Router usw. anzuzeigen
- --api.debug=true # <== Zusätzliche Endpunkte für Debugging und Profiling aktivieren
## Log-Einstellungen (Optionen: ERROR, DEBUG, PANIC, FATAL, WARN, INFO) - https://docs.traefik.io/observability/logs/ ##
- --log.level=DEBUG # <== Log-Level von Traefik festlegen
## Provider-Einstellungen - https://docs.traefik.io/providers/docker/#provider-configuration ##
- --providers.docker=true # <== Docker als Provider für Traefik aktivieren
- --providers.docker.exposedbydefault=false # <== Nicht jeden Container standardmäßig für Traefik exponieren, nur die aktivierten
- --providers.file.filename=/dynamic.yaml # <== Auf eine dynamische Konfigurationsdatei verweisen
- --providers.docker.network=web # <== Auf dem Docker-Netzwerk namens web operieren
## Entry-Point-Einstellungen - https://docs.traefik.io/routing/entrypoints/#configuration ##
- --entrypoints.web.address=:80 # <== Einen Entry-Point für Port :80 namens web definieren
- --entrypoints.web-secured.address=:443 # <== Einen Entry-Point für HTTPS auf Port :443 namens web-secured definieren
## Zertifikat-Einstellungen (Let's Encrypt) - https://docs.traefik.io/https/acme/#configuration-examples ##
- --certificatesresolvers.mytlschallenge.acme.tlschallenge=true # <== TLS-ALPN-01 aktivieren, um ACME-Zertifikate zu generieren und zu erneuern
- --certificatesresolvers.mytlschallenge.acme.email=private@private.com # <== E-Mail für Zertifikate festlegen
- --certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json # <== ACME-Datei zum Speichern von Zertifikatsinformationen definieren
volumes:
- ./letsencrypt:/letsencrypt # <== Volume für Zertifikate (TLS)
- /var/run/docker.sock:/var/run/docker.sock # <== Volume für Docker-Admin
- ./dynamic.yaml:/dynamic.yaml # <== Volume für dynamische Konfigurationsdatei, **Referenz: Zeile 27
networks:
- web # <== Traefik auf dem Netzwerk namens web platzieren, um Container auf diesem Netzwerk zu erreichen
labels:
#### Labels definieren das Verhalten und die Regeln des Traefik-Proxys für diesen Container ####
- "traefik.enable=true" # <== Traefik auf sich selbst aktivieren, um das Dashboard anzuzeigen und eine Subdomain zuzuweisen
- "traefik.http.routers.api.rule=Host(`monitor.private.com`)" # <== Domain für das Dashboard festlegen
- "traefik.http.routers.api.service=api@internal" # <== API als Dienst zum Zugriff aktivieren
networks:
web:
external: true
backend:
external: false
volumes:
db_data: {}
wordpress:
external: true
db:
external: true
Discourse app.yml
## Dies ist die All-in-One, eigenständige Discourse Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MUSS neu aufgebaut werden
## /var/discourse/launcher rebuild app
##
## SEI *SEHR* VORSICHTIG BEI DER BEARBEITUNG!
## YAML-DATEIEN SIND EXTREM EMPFINDLICH GEGENÜBER FEHLERN IN LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei bei 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 sollen von diesem Container exponiert werden?
## Wenn Sie Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilen möchten,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
#- "80:80" # http
#- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Setzen Sie db_shared_buffers auf maximal 25 % des gesamten Arbeitsspeichers.
## Wird automatisch vom Bootstrap basierend auf dem erkannten RAM festgelegt, oder Sie können es überschreiben
db_shared_buffers: "128MB"
## 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:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
## Wird automatisch vom Bootstrap basierend auf den erkannten CPUs festgelegt, oder Sie können es überschreiben
UNICORN_WORKERS: 2
## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
DISCOURSE_HOSTNAME: forum.private.com
## Kommentieren Sie dies aus, wenn Sie möchten, dass der Container mit demselben
## Hostnamen (-h-Option) wie oben angegeben gestartet wird (Standard "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Liste der durch Komma getrennten E-Mails, die bei der ersten Anmeldung als Admin und Entwickler hinzugefügt werden
## Beispiel: 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'private@private.com'
## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
## SMTP-Adresse, Benutzername und Passwort sind erforderlich
# WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
DISCOURSE_SMTP_ADDRESS: in-v3.mailjet.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: "redacted"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, Standard true)
## Wenn Sie die Lets-Encrypt-Vorlage hinzugefügt haben, kommentieren Sie unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
LETSENCRYPT_ACCOUNT_EMAIL: private@private.com
## 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 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 gehen hier
## 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
## Beliebige benutzerdefinierte Befehle, die nach dem Build ausgeführt werden sollen
run:
- exec: echo "Beginn der benutzerdefinierten Befehle"
## Wenn Sie die 'Von'-E-Mail-Adresse für Ihre erste Registrierung festlegen möchten, kommentieren Sie dies aus und ändern Sie:
## Nach Erhalt der ersten Anmelde-E-Mail kommentieren Sie die Zeile erneut aus. Sie muss nur einmal ausgeführt werden.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Ende der benutzerdefinierten Befehle"
labels:
app_name: discourse
#----Traefik-Labels------------------------
traefik.enable: true
traefik.docker.network: web
#---HTTP-ROUTER-ABSCHNITT-------------------
traefik.http.routers.discourse.rule: Host(`forum.private.com`)
#--HTTP-ABSCHNITT--------------------------
traefik.http.routers.discourse.entrypoints: web
traefik.http.routers.discourse.middlewares: discourse_redirect2https
traefik.http.services.discourse.loadbalancer.server.port: 80
#---HTTPS-ROUTER-ABSCHNITT
traefik.http.routers.discourse_secure.rule: Host(`forum.private.com`)
#--HTTPS-ABSCHNITT
traefik.http.routers.discourse_secure.entrypoints: web-secured
traefik.http.services.discourse_secure.loadbalancer.server.port: 80
#--TLS-ABSCHNITT
traefik.http.routers.discourse_secure.tls.certresolver: tlsChallenge_letsencrypt
#---MIDDLEWARE-ABSCHNITT: HTTP zu HTTPS umleiten
traefik.http.middlewares.discourse_redirect2https.redirectscheme.scheme: https
docker_args:
- "--network=web"
- "--expose=80"
Vielen Dank