Aller au contenu

Configuration serveur

ordinateur ancien

Machine utilisée

Mon installation est faite sur un NAS que j'utilise aussi comme système de sauvegarde pour les ordinateurs de la maison.

Le serveur ayant déjà un système d'exploitation et d'autres applications installées, j'ai opté pour une installation dans des containers docker afin de la rendre independante du reste du système.

Hébergement local de Home Assistant

La publication de l'application nécessite les éléments suivant :

  • un nom de domaine,
  • un proxy pour lier le nom de domaine à l'application locale,
  • un certificat pour publier le site en https

Gestion du nom de domaine

Au lieu d'acheter un nom de domaine, j'utilise un sous domaine gratuit proposé par le site duckdns.org. Cela donne une adresse du type ma-maison.duckdns.org.

Une fois le sous domaine déclaré, il faut lui associer l'adresse ip, visible depuis internet, du serveur hébergeant Home Assistant, ou dans mon cas l'adresse de ma box internet (une règle de routage au niveau de la box fait alors la rediction vers le serveur nas).

Cette association est faite par un autre container docker linuxserver/duckdns, qui va périodiquement récupérer l'adresse externe de la box et l'associer au nom de domaine duckdns. Cela est utile quand l'adresse ip externe fournie par son fournisseur d'accès à internet n'est pas fixe.

Voici un exemple de configuration :

duckdns:
    image: lscr.io/linuxserver/duckdns
    container_name: duckdns
    environment:
      - TZ=Europe/Paris
      - SUBDOMAINS=ma-maison.duckdns.org
      - TOKEN=xxx-xxx-xxx # (1)
    restart: unless-stopped
  1. Token fournis lors de la création du compte duckdns.

Tip

Ce container peut être remplacé par une intégration Home Assistant duckdns.

Application proxy et certificat SSL

J'ai choisi Traefik car il permet :

  • la création et le renouvellement d'un certificat Let's encrypt.
  • d'exposer d'autres containers docker grace à des annotations posées sur ceux ci.

Le container est déclaré de la façon suivante :

traefik:
    hostname: traefik
    image: traefik:v2.9
    container_name: traefik
    restart: always
    domainname: ma-maison.duckdns.org # (1)
    network_mode: host
    command:
      - --providers.docker=true # (2)
      - --providers.docker.exposedbydefault=false # (3)
      - --entrypoints.web.address=:80 # (4)
      - --entrypoints.websecure.address=:443 # (5)
      - --entryPoints.web.forwardedHeaders.trustedIPs=127.0.0.1/32,192.168.1.69 # (6)
      - --entrypoints.websecure.http.tls.certresolver=myresolver
      - --certificatesresolvers.myresolver.acme.email=xxxx.xxxx@gmail.com
      - --certificatesresolvers.myresolver.acme.dnschallenge.provider=duckdns # (7)
      - --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json 
    environment:
      - DUCKDNS_TOKEN=xxx-xxx-xxx # (8)
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/data/docker/traefik:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
  1. Nom du sous domaine duckdns
  2. Utilise les labels associés aux containers docker pour les exposer ou non
  3. N'expose que les containers avec le label traefik.enable=true
  4. Port pour le trafique http
  5. Port pour le trafique https
  6. Liste des IP autorisées
  7. Configuration let's encrypt pour un challenge de type DNS
  8. Token duckdns : permet à traefik d'écrire un enregistrement texte au niveau du DNS afin de prouver que le domaine nous appartient avant de nous delivrer un certificat.

Outils complémentaires

Interface d'administration

Portainer est une interface d'administration qui permet d'ajouter ou de mettre à jour des containers, mais aussi de le démarrer ou de les arrêter.