Traefik 2.0 configurazione per Unifi controller e Grafana
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