PI 4 + Traefik + Gladys4

Bonjour,

J’ai voulu essayer d’installer Gladys sur mon PI 4, cependant j’ai un soucis car je n’arrive pas a accéder à au Dashboard.

J’utilise Traefik 2.10.5 en reverse proxy, sur une version 32Bit de Pi OS 12 (bookworm) fraichement installée et voici la configuration :

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

{}

Un petit chmod 600 sur le fichier acme.json comme demandé à par Traefik avant le lancement…

Jusque là tout fonctionne, j’accède bien à mon dashboard Traefik etc… ensuite, je veux monter Gladys avec mon reverse proxy, voici mon 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

Génération des certificats letsencrypt OK, par contre j’obtiens un Bad Gateway de traefik, et j’arrive pas a le debug j’ai pas de logs sur cette erreur dans traefik ni dans Gladys…
J’ai essayé pas mal de chose mais impossible à traefik de lancer le bon service.

Peut-être que quelqu’un à eu le même soucis ?

Je vous remercie

Quand tu accès au port 8078 de ta machine, tu vois bien Gladys ?

Si je vais sur http://pi.local:8078 oui j’ai bien Gladys qui s’affiche c’est ça qui est très bizare.

Je connais pas bien Traefik (je suis plus team Caddy https://caddyserver.com/ ), mais je vois rien qui spécifie le host/IP de Gladys dans ta config Traefik ?

mon hostname: mongladys.dns.net est un DynDNS qui redirige bien vers mon serveur pi, j’ai essayé ce hostname sur une appli web de mon pi et ça fonctionne bien sur mon pi.

Je continue de chercher, mais si quelqu’un à eu ce soucis là je suis preneur.

Je parlais pas de ça, il n’y a rien dans ta config qui dit comment ton Traefik contacte ton container Gladys local

En gros j’imagine que tu veux faire:

Utilisateur ↔ Traefik ↔ Gladys

Le dernier maillon il est où dans ta config ?

C’est mon label de traefik qui dit link le service sur le port 8078

Dans mon Dashboard Traefik, j’ai bien mon Host :

Qui pointe vers un service qui est bien sur le port 8078

En fait, c’est plus compliqué. Il faut soit:

  • que gladys ne soit pas en mode network_mode: host (mais c’est un prérequis)
  • soit que tu configures traefik pour taper sur le port 8078 de ta machine (ici, 127.0.0.1 représentre l’adresse IP du container traefik, et pas de ta machine)

Pour cela, je rajouterais la ligne suivante dans les labels de gladys

- "traefik.http.services.gladys.loadbalancer.server.url=<ip de ta machine>"

Je précise que c’est uniquement un pré-requis si il souhaite utiliser des intégrations qui vont utiliser des appareils sur son réseau. Exemple: LAN Manager, Intégration Xiami, Philips Hue, etc…

Si tu retire le network_mode=host, ça marchera (Gladys s’affichera), mais les intégrations qui utilisent le réseau ne marcheront pas (normal, elles ne verront que leur réseau isolé qui n’est pas ton réseau wi-fi)

Effectivement, j’ai omis d’ajouter le network au service gladys (quel abrutis…)

J’obtiens l’erreur suivante :

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

Du coup, j’ai retiré mon network du service et j’ai mis ce que tu m’a dit :

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

J’ai toujours mon Bad Gateway :frowning:

donc je dois bien garder mon host :=) car je dois pouvoir l’utiliser

Tu as testé comme disait @cicoub13 ?

- "traefik.http.services.gladys.loadbalancer.server.url=<ip de ta machine>"

Oui j’ai mis :

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

monglaydys.dns.net est un DynDNS qui redirige vers mon IP public

C’est pas la même chose, tu as essayé de mettre l’IP privée de ta machine ? (sur ton réseau local)

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

Toujours même soucis: Bad Gateway

Par contre dans mon dashboard Traefik, l’ip serveur ne change pas, j’ai toujours 127.0.0.1:8078… bizarre

Et pas de logs traefik significatifs ?

En regardant la doc, ce serait plutôt :

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

J’ai testé en retirant le network_mod host et ajoutant le network traefik c’est OK j’accède bien, sur la dashboard Traefik j’ai bien mon url interne docket qui est mis à jour sur mon service (http://172.19.0.3:8089) et j’accède bien à la page.

Je vais essayer ce que tu m’a dit @cicoub13

Du coup, j’ai retiré le network traefik, j’ai remis le mode host, j’ai modifié mon label avec :

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

Sur mon traefik j’ai l’url serveur: http://127.0.0.1:8078 il a toujours pas été mis à jour et j’ai encore mon Bad Gateway

En fait, cette option traefik.http.services.service01.loadbalancer.server.url existe dans la configuration par fichier toml, mais pas dans la configuration via label docker :thinking:

1 « J'aime »