My boring Blog

Home page di Mauro Frigerio

Traefik 2.0 configurazione per Unifi controller e Grafana

18-10-2019 Tempo di lettura 2 minuti Article

Non sono un informatico di formazione però mi piace fare qualche struso nel tempo libero e per necessità di casa. La struttura della rete di casa mia non è super complessa però mi servono alcuni access point e switch per la casa. Da un paio di anni ho alcuni componenti Unifi di Ubiquiti che necessitano di un controller software per la gestione della rete.

Il primo controller Unifi l’ho installato su una macchina virtuale basata su Ubuntu, ma oltre ad aggiornare il controller dovevo anche aggiornare l’OS. Poi ho scoperto Docker e i suoi molteplici vantaggi.

Non ho tantissimi container su Docker ma con il tempo sono cresciuti e si sono presentati alcune difficoltà di gestione. In particolare la gestione dei certificati SSL e gli indirizzi (con le relative porte) per accedere ai vari servizi. Così ho trovato la soluzione in Traefik un reverse proxy che permette di creare dei link facili camuffando i servizi e le relative porte e non è tutto perché si occupa lui di richiedere e aggiornare i certificati SSL di Let’s Encrypt.

Nella versione 1.x di Traefik la configurazione non era molto semplice e ci ho messo un bel po’ prima di capire come far funzionare tutto. Non proprio tutto, perché ho avuto parecchi problemi con Grafana e Unifi controller. Poi il tempo libero è mancato per un lungo periodo e nel frattempo è uscita la versione 2.0 di Traefik.

Ho fatto varie prove e finalmente sono riuscito a risolvere i problemi di configurazione per far funzionare il controller Unifi e Grafana, ecco come:

version: '3'

services:

 unifi:  
    image: jacobalberty/unifi
    container_name: unifi
    volumes:
      - /docker/unifi/data:/unifi/data
    ports:
      - 10001:10001/udp  
      - 3478:3478/udp
      - 8080:8080  
    labels:  
      # HTTPS traffic
      - "traefik.http.routers.unifiS.rule=Host(`controller.domain.com`)"
      - "traefik.http.routers.unifiS.entrypoints=web-secure"  
      - "traefik.http.routers.unifiS.tls=true"  
      - "traefik.http.routers.unifiS.tls.certresolver=certificato"
      - "traefik.http.routers.unifiS.service=UnifiService"  
      - "traefik.http.services.UnifiService.loadBalancer.server.port=8443"  
      - "traefik.http.services.UnifiService.loadbalancer.server.scheme=https"  

      # HTTP traffic - redirect to httpS
      - "traefik.http.routers.unifi.entryPoints=web"
      - "traefik.http.routers.unifi.rule=host(`controller.domain.com`)"
      - "traefik.http.middlewares.unifiMdl.redirectScheme.scheme=https"  
      - "traefik.http.middlewares.unifiMdl.redirectScheme.permanent=true"  
      - "traefik.http.routers.unifi.middlewares=unifiMdl"  
      - "traefik.http.routers.unifi.service=UnifiService2"
      - "traefik.http.services.UnifiService2.loadBalancer.server.port=8443"  
      - "traefik.http.services.UnifiService2.loadbalancer.server.scheme=https"  

  grafana:
    image: grafana/grafana  
    container_name: grafana  
    volumes:
      - grafana-storage:/var/lib/grafana  
    labels:  
      # HTTPS traffic
      - "traefik.http.routers.grafanaS.rule=Host(`grafana.domain.com`)"  
      - "traefik.http.routers.grafanaS.entrypoints=web-secure"  
      - "traefik.http.routers.grafanaS.tls=true"  
      - "traefik.http.routers.grafanaS.tls.certresolver=certificato"
      - "traefik.http.routers.grafanaS.service=grafanaService"
      - "traefik.http.services.grafanaService.loadBalancer.server.port=3000"  

      # HTTP traffic - redirect to httpS  
      - "traefik.http.routers.grafana.entryPoints=web"  
      - "traefik.http.routers.grafana.rule=host(`grafana.domain.com`)"  
      - "traefik.http.middlewares.grafanaMdl.redirectScheme.scheme=https"
      - "traefik.http.middlewares.grafanaMdl.redirectScheme.permanent=true"
      - "traefik.http.routers.grafana.middlewares=grafanaMdl"  

    environment:  
      - GF_SERVER_ROOT_URL=https://grafana.domain.com  
      - GF_SERVER_DOMAIN=domain.com  

volumes:  

  grafana-storage:

Aggiornamento (25.10.2019):

Nella configurazione di Traefik ho aggiunto questa opzione al Entrypoint per l’https.

[serversTransport]
insecureSkipVerify = true