can you share screenshots?
Attached are two screenshots from the traefik dashboard. They show that discourse is showing up (twice) in the service, but nothing in the routers. I don’t necessarily know that means TBH but I noticed it.
Edit: I am a new discourse user so I am not trusted to put two images in one post, so I will reply with another.
Need to bring up my dockers tonight to compare, let you know than or maybe some others here can share their dashboard and compare
you don’t need that, better switch to the API and use traefik v2.1, so:
- "traefik.http.routers.traefik_dashboard-router.service=api@internal"
See Endless 502 / forwarding when calling dashboard via subdomain #6123 - #5 by ldez - Traefik v2 - Traefik Labs Community Forum
can you remove your comments
it make it easier to read for us.
No worries I was told the same once :).
I write my comments in extra line, so I can create a clean print easily using cat traefikV2.yaml | grep -v "#"
Okay, es hat mich ein paar Tage gekostet, bis ich dazu kam. Ich habe meine Traefik-Konfiguration überarbeitet, um eine YAML-Datei zu verwenden, anstatt alles in docker-compose unterzubringen. Nachdem ich jedoch alles wieder verkabelt habe, scheint sich das gleiche oder ein ähnliche Verhalten einzustellen – ich erhalte einen 404-Fehler auf meiner Domain, und im Traefik-Dashboard sehe ich Einträge unter Services und Routers für Discourse, aber nichts unter Routers.
Traefik docker-compose
version: '3'
services:
traefik:
image: traefik:v2.0
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
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http"
- "traefik.http.routers.traefik.rule=Host(`monitor.example.com`)"
- "traefik.http.middlewares.traefik-auth.basicauth.users=user: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(`monitor.example.com`)"
- "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
- "traefik.http.routers.traefik-secure.tls=true"
- "traefik.http.routers.traefik-secure.tls.certresolver=http"
- "traefik.http.routers.traefik-secure.service=api@internal"
networks:
proxy:
external: true
Traefik data/traefik.yml
api:
dashboard: true
entryPoints:
http:
address: ":80"
https:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
certificatesResolvers:
http:
acme:
email: nick@innomadic.com
storage: acme.json
httpChallenge:
entryPoint: http
containers/app.yml
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
expose:
params:
db_default_text_search_config: "pg_catalog.english"
db_shared_buffers: "128MB"
env:
LANG: en_US.UTF-8
UNICORN_WORKERS: 2
DISCOURSE_HOSTNAME: forum.example.com
DISCOURSE_DEVELOPER_EMAILS: 'info@example.com'
DISCOURSE_SMTP_ADDRESS: redacted.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: "redacted"
LETSENCRYPT_ACCOUNT_EMAIL: info@example.com
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
run:
- exec: echo "Beginning of custom commands"
- exec: echo "End of custom commands"
labels:
app_name: discourse
traefik.enable: true
traefik.docker.network: proxy
traefik.http.routers.discourse.rule: Host(`forum.example.com`)
traefik.http.routers.discourse.entrypoints: http
traefik.http.routers.discourse.middlewares: discourse_redirect2https
traefik.http.services.discourse.loadbalancer.server.port: 80
traefik.http.routers.discourse_secure.rule: Host(`forum.example.com`)
traefik.http.routers.discourse_secure.entrypoints: https
traefik.http.services.discourse_secure.loadbalancer.server.port: 80
traefik.http.routers.discourse_secure.tls.certresolver: tlsChallenge_letsencrypt
traefik.http.middlewares.discourse_redirect2https.redirectscheme.scheme: https
docker_args:
- "--network=proxy"
- "--expose=80"
Ich glaube, ich habe auch den Befehl docker network connect proxy ausgeführt, um dies mit dem Traefik-Netzwerk zu verbinden.
Ich schätze jede Hilfe, um zu sehen, was ich hier übersehe, und ich würde mich auch freuen zu hören, ob meine Sicherheitsvorkehrungen in Ordnung sind.
Ich weiß nicht, was dir fehlt. Hier ist, was ich in Ansible mache, um Sites mit Traefik hochzufahren:
--docker-args "-l traefik.frontend.rule=Host:{{discourse_hostname}} \
-l traefik.frontend.entryPoints=https \
-l traefik.backend={{discourse_shortname}} \
-l traefik.port=80"
Und dann:
./launcher start {{ discourse_yml }} {{ docker_args }}
Die Traefik-Regeln in docker_args statt in der yml-Datei anzugeben, hat den zusätzlichen Vorteil, dass Traefik den Container, der initialisiert wird, nicht überwacht.
Ich glaube, das ist Traefik v1, oder?
Oh, sorry. Ja, ich bin mir ziemlich sicher, dass es sich um Traefik 1 handelt, daher kann ich bei den Details nicht weiterhelfen.
Es sieht nicht so aus, als würdest du in app.yml Werte für diese Labels setzen? Ich denke, du musst eine Regel und vielleicht ein Middleware definieren.
Wenn du während des Bootstraps keine Ausfallzeit haben möchtest, solltest du sie mit ./launcher start setzen, wie in meinem Beispiel.
Vielleicht ist „Middleware
Sie werden gesetzt, aber du musst etwas nach rechts scrollen, um sie zu sehen. Das ist nur eine Formatierungsfrage.
Danke
LOL. Entschuldigung dafür.
Nun, ich habe keine Ahnung, wovon ich spreche, aber es ergibt für mich keinen Sinn, dass du dein discourse@docker als Load Balancer konfigurierst.
Hey, ich glaube, ich habe es hinbekommen.
Ich habe die Zeile entfernt:
# traefik.http.services.discourse_secure.loadbalancer.server.port: 80
aber diese hier belassen:
traefik.http.services.discourse.loadbalancer.server.port: 80
labels:
app_name: discourse
#----Traefik labels------------------------
traefik.enable: true
traefik.docker.network: proxy
#---HTTP ROUTER SECTION-------------------
traefik.http.routers.discourse.rule: Host(`forum.example.com`)
#--HTTP SECTION--------------------------
traefik.http.routers.discourse.entrypoints: http
traefik.http.routers.discourse.middlewares: discourse_redirect2https
traefik.http.services.discourse.loadbalancer.server.port: 80
#---HTTPS ROUTER SECTION
traefik.http.routers.discourse_secure.rule: Host(`forum.example.com`)
#--HTTPS SECTION
traefik.http.routers.discourse_secure.entrypoints: https
# traefik.http.services.discourse_secure.loadbalancer.server.port: 80
#--TLS SECTION
traefik.http.routers.discourse_secure.tls.certresolver: tlsChallenge_letsencrypt
#---MIDDLEWARE SECTION redirect http to https
traefik.http.middlewares.discourse_redirect2https.redirectscheme.scheme: https
Ich bin mir nicht sicher, wie ich darauf gekommen bin oder warum es so ist, aber es funktioniert. Also nutze ich die gesamte Konfiguration, die ich oben im Thread gepostet habe, mache aber diese eine Änderung – und bei mir funktioniert es jetzt.
Danke an alle!
Das ist korrekt.
Ich habe das in meiner Konfiguration so stehen:
#—SERVICE SECTION sagt Traefik, wohin die Anfrage gesendet werden soll
traefik.http.services.discourse.loadbalancer.server.port: 80
kommt dir das bekannt vor?
Was du hier machst, ist anzugeben, an wen (welchen Service) die Anfrage gesendet wird und an welchem Port.
Du könntest das Problem auch lösen, indem du expose verwendest, aber aus Sicherheitsgründen möchtest du so wenig wie möglich von deinen Containern exponieren. Außerdem wählt Traefik den ersten Port aus, wenn du mehrere Ports exponierst, daher ist die Verwendung von loadbalancer sauberer.
Traefik data/traefik.yml
Ich mache das nicht, da dieser Pfad der Standardpfad ist.
Hier arbeitest du nicht mit dem vollständigen Pfad, sondern verwendest einen Standardpfad. Das mag ich nicht, weil du den Pfad im Kopf behalten musst. Ich verwende storage: /etc/ssl/certs/letsencrypt/acme.json.
Ich definiere das Netzwerk; ich mag keine Standardeinstellungen.
providers: docker: exposedByDefault: false network: bridge_proxy_traefikv2
containers/app.yml
Das musst du nicht tun, das wird durch loadbalancer erledigt.
Traefik docker-compose
Du solltest diesem Netzwerk möglicherweise einen Namen geben, in meinem Fall:
networks: traefik: external: name: bridge_proxy_traefikv2
Ich habe mich hier durch Ihre Vorschläge gearbeitet. Vielen Dank für Ihre Antwort.
Ich möchte darauf hinweisen, dass Sie beim Endpunkt empfehlen, dem Standard zu vertrauen, während Sie beim Speicherort angeben, dass Sie dem Standard nicht gerne vertrauen. ![]()
Ich habe versucht, die von Ihnen erwähnte Änderung für acme.json vorzunehmen:
Allerdings hat mein Traefik-Container die Datei danach nicht gefunden. Im Log wurde dies als Fehler angezeigt. Daher habe ich es vorerst bei acme.json belassen.
Ich wollte jedoch noch etwas anderes fragen:
Benennen Sie das Netzwerk hier nicht einfach um oder geben ihm einen lokalisierten Namen? Ich habe es in der anderen Konfiguration und hier lokal einfach als „proxy
Nun, für einen Moment dachte ich, Discourse sei sentient geworden, weil ich diese Benachrichtigung in meiner Admin-Ansicht erhalten habe:
Ich habe diese Änderung jedoch vorgenommen und habe trotzdem den Mixed-Content-Fehler erhalten. Ich habe mich auch ausgeloggt, den Cache gelöscht und mich erneut angemeldet. Das gleiche Ergebnis.
Es sieht so aus, als wären meine Anmeldeanfragen immer noch verschlüsselt, was gut ist, denke ich, aber ich muss diesen Mixed-Content-Fehler loswerden. Die Konfiguration steht oben im vorherigen Beitrag.
Ein weiteres Update: Die Warnung vor gemischten Inhalten ist jetzt verschwunden. Mir ist nicht ganz klar, warum. Ich vermute, dass dies mit der Einstellung force_https zusammenhängt, aber ich habe trotz des Löschen meines Caches und eines Ab- und Wiederanmelde-Vorgangs, wie oben erwähnt, für vielleicht 30 Minuten nach der Änderung der Einstellung keine saubere Seitenladung erhalten.
Die gute Nachricht ist, dass ich anscheinend eine funktionierende Discourse-Installation hinter einem Traefic-Reverse-Proxy habe.
Es sind die Bilder, die über HTTP-Verbindungen geladen werden. Ich hatte das gleiche Problem, siehe:
- Cool features of Firefox Developer Tools - #16 by da4nic - Developer Tools - Mozilla Discourse
- "security" tab in developer tools - Developer Tools - Mozilla Discourse
Und das sollte auch helfen: - Mixed content problem
- Got mix-content error and confused - #12 by mr8
- Mixed content due to hotlinked images - #13 by nbianca
Hast du das Volume korrekt eingebunden? Bei den Pfaden kann Traefik ziemlich verwirrend sein.
Ich mache zum Beispiel:
volumes: - /etc/ssl/certs/traefik/letsencrypt:/etc/ssl/certs/letsencrypt - /opt/traefik/traefik-config.yaml:/etc/traefik/traefik.yaml - /etc/passwd.traefik.dashboard:/etc/passwd.BasicAuth.dashboard - /etc/passwd.traefik.whoami:/etc/passwd.BasicAuth.whoami
[quote=“pc1oad1etter, Beitrag: 35, Thema: 130357”]
Änderst du hier nicht nur den Netzwerknamen oder gibst ihm einen lokalisierten Namen? Ich habe es in der anderen Konfiguration und hier lokal einfach als „proxy
Nein, ich habe es nicht so eingebunden. Hier ist mein volumes-Abschnitt aus der Docker Compose-Datei für Traefik:
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
Mir fällt auf, dass bei mir Let’s Encrypt gar nicht erwähnt wird, während bei dir schon. Ich vermute, du hast diesen tief verschachtelten Ordner in deinem Docker Compose-Verzeichnis erstellt und dort deine acme.json abgelegt?
Das andere, was mir auffällt, ist, dass ich docker.sock und localtime habe. Ich bin mir nicht sicher, wofür das localtime-Element ist, und vielleicht stellt die docker.sock-Angabe ein Sicherheitsproblem dar. Das muss ich mir noch genauer ansehen.
Mir ist aufgefallen, dass bei meiner Einrichtung Let’s Encrypt gar nicht erwähnt wird, während das bei deiner der Fall ist. Ich vermute, du hast diesen tief verschachtelten Ordner in deinem docker-compose-Verzeichnis erstellt und deine acme.json dort abgelegt?
Die Erstellung von Let’s Encrypt-Zertifikaten übernimmt Traefik. Durch das Mounten eines Volumes kann ich die Daten auf dem Host speichern, anstatt im Docker-Container.
Ich erinnere mich, dass das Einrichten aller Mounts eine echte Herausforderung war. Ich habe dabei ständige Checks mit docker exec -it durchgeführt:
lsdirvi






