Raspberry Pi 4 + Traefik + Gladys4

Hallo,

Ich wollte Gladys auf meinem PI 4 installieren, aber ich habe ein Problem, weil ich nicht auf das Dashboard zugreifen kann.

Ich verwende Traefik 2.10.5 als Reverse-Proxy auf einer frisch installierten 32-Bit-Version von Pi OS 12 (Bookworm) und hier ist die Konfiguration:

compose.yml

services:
  traefik:
    image: traefik:2.10.5
    container_name: traefik
    ports:
      - "80:80"
      - "443:443"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`montraefik.dns.net`)"
      - "traefik.http.routers.traefik.entrypoints=webSecure"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.tls=true"
      - "traefik.http.routers.traefik.tls.certResolver=letsencrypt"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./config/traefik.yml:/etc/traefik/traefik.yml
      - ./config/acme.json:/acme.json
      - ./config/dynamic-conf.yml:/etc/traefik/dynamic-conf.yml
    restart: always
    networks:
      - traefik

networks:
  traefik:
    external: true

config/traefik.yml

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: webSecure
          scheme: https
          permanent: true
  webSecure:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    network: traefik_network
    exposedbydefault: false

log:
  level: INFO

api:
  dashboard: true
  debug: true

certificatesResolvers:
  letsencrypt:
    acme:
      email: monemail@dns.net
      storage: acme.json
      tlsChallenge: {}
      httpChallenge:
        entryPoint: web

conf/dynamic-conf.yml

tls:
  options:
    default:
      minVersion: VersionTLS12
      sniStrict: true

    mintls13:
      minVersion: VersionTLS13

conf/acme.json

{}

Ein kleines chmod 600 auf die Datei acme.json wie von Traefik vor dem Start verlangt…

Bisher funktioniert alles, ich kann auf mein Traefik-Dashboard zugreifen usw. Dann möchte ich Gladys mit meinem Reverse-Proxy starten, hier ist mein compose.yml:

services:
  gladys:
    image: gladysassistant/gladys:v4
    container_name: gladys
    restart: always
    privileged: true
    network_mode: host
    cgroup: host
    logging:
      driver: "json-file"
      options:
        max-size: 10m
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.gladys.rule=Host(`mongladys.dns.net`)"
      - "traefik.http.routers.gladys.entrypoints=webSecure"
      - "traefik.http.routers.gladys.tls=true"
      - "traefik.http.routers.gladys.tls.certResolver=letsencrypt"
      - "traefik.http.services.gladys.loadbalancer.server.port=8078"
    environment:
      NODE_ENV: production
      SQLITE_FILE_PATH: /var/lib/gladysassistant/gladys-production.db
      SERVER_PORT: 8078
      TZ: Europe/Paris
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data/gladysassistant:/var/lib/gladysassistant
      - /dev:/dev
      - /run/udev:/run/udev:ro
  watchtower:
    image: containrrr/watchtower
    restart: always
    container_name: watchtower
    command: --cleanup --include-restarting
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  traefik:
    external: true

Erstellung der Let’s-Encrypt-Zertifikate OK, aber ich erhalte einen Bad Gateway von Traefik und kann den Fehler nicht debuggen, da es keine Logs dazu in Traefik oder Gladys gibt…
Ich habe verschiedene Dinge versucht, aber Traefik kann den richtigen Dienst nicht starten.

Vielleicht hatte jemand das gleiche Problem?

Vielen Dank.

Wenn du auf Port 8078 deines Rechners zugreifst, siehst du dann Gladys?

Wenn ich auf http://pi.local:8078 gehe, dann wird Gladys tatsächlich angezeigt. Das ist ja sehr seltsam.

Ich kenne Traefik nicht so gut (ich bin eher Team Caddy https://caddyserver.com/), aber ich sehe nichts in deiner Traefik-Konfiguration, das den Host/IP von Gladys spezifiziert?

Mein Hostname: mongladys.dns.net ist ein DynDNS, der korrekt zu meinem Pi-Server weiterleitet. Ich habe diesen Hostnamen in einer Web-App meines Pi ausprobiert und er funktioniert auf meinem Pi einwandfrei.

Ich suche weiter, aber wenn jemand dieses Problem hatte, bin ich für Tipps dankbar.

Davon habe ich nicht gesprochen, in deiner Konfiguration steht nichts darüber, wie dein Traefik deinen lokalen Gladys-Container kontaktiert

Großartig, ich nehme an, du möchtest:

Benutzer ↔ Traefik ↔ Gladys

Wo ist das letzte Glied in deiner Konfiguration?

Das ist mein Traefik-Label, das den Dienst auf Port 8078 verlinkt

In meinem Traefik-Dashboard habe ich meinen Host:
Capture d'écran 2023-11-17 101737

Das zeigt auf einen Dienst, der auf Port 8078 läuft

Eigentlich ist es komplizierter. Es gibt zwei Möglichkeiten:

  • dass Gladys nicht im network_mode: host läuft (aber das ist eine Voraussetzung)
  • oder dass du Traefik so konfigurierst, dass es auf Port 8078 deines Rechners zugreift (hier stellt 127.0.0.1 die IP-Adresse des Traefik-Containers dar, nicht deines Rechners)

Dafür würde ich die folgende Zeile zu den Labels von Gladys hinzufügen

- "traefik.http.services.gladys.loadbalancer.server.url=<IP deines Rechners>"

Ich präzisiere, dass dies nur eine Voraussetzung ist, wenn er Integrationen verwenden möchte, die Geräte in seinem Netzwerk nutzen. Beispiel: LAN Manager, Xiami-Integration, Philips Hue, usw…

Wenn du den network_mode=host entfernst, wird es funktionieren (Gladys wird angezeigt), aber die Integrationen, die das Netzwerk nutzen, werden nicht funktionieren (normal, sie sehen nur ihr isoliertes Netzwerk, das nicht dein Wi-Fi-Netzwerk ist).

Tatsächlich habe ich vergessen, das Netzwerk zum Gladys-Dienst hinzuzufügen (was für ein Idiot…)

Ich erhalte folgenden Fehler:

service gladys declares mutually exclusive network_mode and networks: invalid compose project

Also habe ich mein Netzwerk aus dem Dienst entfernt und das gemacht, was du mir gesagt hast:

- "traefik.http.services.gladys.loadbalancer.server.url=mongladys.dns.net"

Ich habe immer noch Bad Gateway :frowning:

daher muss ich meinen Host wohl behalten :=) denn ich muss ihn nutzen können

Hast du es wie @cicoub13 gesagt ausprobiert?

- "traefik.http.services.gladys.loadbalancer.server.url=<IP deiner Maschine>"

Ja, ich habe Folgendes eingestellt:

- "traefik.http.services.gladys.loadbalancer.server.url=mongladys.dns.net"

mongladys.dns.net ist ein DynDNS, der auf meine öffentliche IP umleitet.

Das ist nicht dasselbe, hast du versucht, die private IP deiner Maschine einzugeben? (in deinem lokalen Netzwerk)

- "traefik.http.services.gladys.loadbalancer.server.url=192.168.86.20"

Immer noch das gleiche Problem: Bad Gateway

Aber in meinem Traefik-Dashboard ändert sich die Server-IP nicht, ich habe immer noch 127.0.0.1:8078… komisch

Und keine signifikanten Traefik-Logs?

Laut der Dokumentation wäre es eher:

- "traefik.http.services.gladys.loadbalancer.server.url=http://192.168.86.20:8078"

Ich habe es ausprobiert, indem ich den network_mod-Host entfernt und den network traefik hinzugefügt habe – es funktioniert, ich kann darauf zugreifen. Auf dem Traefik-Dashboard sehe ich meine interne Docker-URL, die auf meinem Dienst aktualisiert wurde (http://172.19.0.3:8089), und ich kann die Seite aufrufen.

Ich werde versuchen, was du mir gesagt hast, @cicoub13.

Also habe ich das Netzwerk Traefik entfernt, den Host-Modus wiederhergestellt und mein Label wie folgt geändert:

- "traefik.http.services.gladys.loadbalancer.server.url=http://192.168.86.20:8078"

In meinem Traefik habe ich die Server-URL: http://127.0.0.1:8078, aber sie wurde immer noch nicht aktualisiert und ich habe weiterhin einen Bad Gateway.

Tatsächlich existiert diese Option traefik.http.services.service01.loadbalancer.server.url in der Konfiguration per TOML-Datei, aber nicht in der Konfiguration über Docker-Labels :thinking: