HASS: Déploiement et mise à jour de Home Assistant dans un container depuis Docker Hub

Déploiement et mise à jour de Home Assistant dans un container Docker

Introduction

J’utilise maintenant Home Assistant, un serveur domotique Open Source, depuis quelques semaines. Et pour rester dans la simplicité, j’ai décidé de le déployer depuis Docker Hub, dans un container. C’est plutôt nouveau pour moi, et j’aime beaucoup. Ca facilite beaucoup les choses.

Si vous souhaitez essayer Home Assistant dans un container, vous pouvez trouver les instructions d’installation sur le site de Home Assistant. C’est assez facile une fois docker installé. Le plus important est de maîtriser la gestion des volumes pour s’assurer que les données stockées sur votre système de fichier, et non dans le container. Le container est un environnement éphémère. Si vous donnes y sont stockées, elles seront perdu à chaque arrêt du container.

Une fois qu’on a compris le concept du container, il est facile de comprendre que sa mise à jour est d’une simplicité enfantine. On télécharge la nouvelle image, on se débarasse du container existant, et on en crée un nouveau.

Déployer et gérer un container Home Assistant

Déployer le container

Donc, une fois docker installé, il suffit de démarrer un container en spécifiant la destination des données, et l’image à utiliser pour le container. Celle-ci sera automatiquement téléchargée depuis Docker Hub si elle n’est pas présente sur le serveur. Dans cet exemple, j’ai d’abord créé un dossier /home/autoadmin/hass qui sera monté dans le container dans le dossier /config. C’est là que Home Assistant stocke ses données. J’ai également ajouté le paramètre –restart unless-stopped qui permet au container de redémarrer automatiquement si le serveur est redémarré pour une raison quelconque.

docker run -d --restart unless-stopped --name="hass" -v /home/autoadmin/hass:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant

Accéder au log du container

Pour vérifier le contenu du log, vous pouvez utiliser la commande ci-dessous. Le paramètre –since permet de ne voir que la fin du log (en secondes, minutes, heurs…) Dans cet exemple, 5m me permet de voir les 5 dernières minutes d’activité dans le log. -f correspond à tail -f et permet de voir en temps réel ce qu’il se passe dans le log.

docker logs hass --since 5m -f

Il est toutefois impossible de faire un grep sur cette commande car le log est traité par un parser et n’est pas présenté directement à la console. Pour faire un grep, il est possible d’utiliser l’alternative suivante:

docker logs hass --since 2m |  2>/dev/null | grep keyword

Limiter la taille du log

Reste que consulter le log de cette façon peut vite devenir pénible dépendamment de sa taille. Le log est stocké par défaut dans un fichier JSON. La commande va parser le fichier entier pour l’afficher, et ça prend du temps. Même avec le paramètre since, le fichier est parsé séquentiellement. Suivant le nombre d’entrées dans le log, ça peut être long… très long. En attendant que je trouve un outil qui centralise les logs et les parses pour moi, j’ai cherché comment limiter sa taille. C’est faisable avec le paramètres –log-opt max-size.

En fonction de beaucoup de choses, le log peut vite prendre beaucoup de place… Je l’estime de 1MB si on traque uniquement les “WARNING”, à plusieurs MB par jour si on fait du debug. J’ai décidé de le limiter pour l’instant à 10MB et j’aviserai à l’usage.

docker run -d --restart unless-stopped --name="hass" --log-opt max-size=10m -v /home/autoadmin/hass:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant

Mettre à jour Home Assistant depuis Docker Hub

Aujourd’hui, en accédant à mon interface Web Home Assistant, j’avais une notification de nouvelle version, la 0.60.1, la mienne étant la 0.60.0. Si vous avez suivi les instructions d’installation, démarrer avec Home Assistant est très rapide et simple. Mais quand vient le temps de faire une mise à jour, la page d’instructions de mise à jour n’est pas très loquace. Elle ne parle pas de la mise à jour du container. Peut-être une preuve de plus que c’est simple ? Quoi qu’il en soit, c’est comme l’œuf de Colomb: rien est évident tant qu’on ne l’a pas montré.

Quand une nouvelle version est publiée, il suffit simplement télécharger la nouvelle image. Il y a une commande docker pour ça. On supprime ensuite le container existant et on en crée un nouveau. Il est possible, en cas d’intérêt, de faire une copie des données, et de lancer un nouveau container avec la nouvelle image afin de tester la nouvelle version. Je ne couvrirai pas ce point ici mais je ferai peut-être un article bientôt sur les bases de docker.

Donc, on commence par télécharger la nouvelle image:

docker pull homeassistant/home-assistant

Cette commande va chercher l’image sur Docker Hub. Pour faire la mise à jour, on commence par arrêter le container, puis on le supprime (Souvenez-vous que les données sont sur le système de fichier du serveur, et non dans le container. Donc on ne perd rien). Ensuite on crée et on exécute un nouveau container qui va utiliser la nouvelle image, pour autant qu’on ait bien téléchargé la bonne image. Pensez à faire une copie de sécurité des données (un réflexe à avoir en toutes circonstances quand on fait un changement).

# Stop existing container
docker stop hass

# Delete existing container
docker rm hass

# Run new container
docker run -d --restart unless-stopped --name="hass" --log-opt max-size=10m -v /home/autoadmin/hass:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant

Voilà. La mise à jour est terminée. On peut suivre la progression du démarrage en contrôlant le log:

docker logs hass --since 1m -f

Pour libérer de l’espace, et pour ne pas garder des cadavres sur le serveur, on pensera a effacé les images inutiles. Pour en voir la liste:

docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
homeassistant/home-assistant   latest              04d0d1debd6a        9 days ago          1.65GB
homeassistant/home-assistant   (none)              4f76b7e73b00        4 weeks ago         1.65GB

On trouve deux images home-assistant, dont l’une est taguée latest. Il s’agit de notre image. L’autre est donc devenue inutile. Pour l’effacer:

docker rmi 4f76b7e73b00

Ne reste plus qu’à aller dans l’interface de Home Assistant, sous Config, et constater la nouvelle version.

5 thoughts on “HASS: Déploiement et mise à jour de Home Assistant dans un container depuis Docker Hub

  1. Hello Akim,

    Comment peut-on accéder à l’interface web de hass puisque tu ne rediriges aucun port ?

    Merci,

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *