# Migration HAOS vers Home Assistant Docker

**URL:** <https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216>\
**Category:** Autres\
**Created:** [Décembre 16, 2025, 7:32 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216 "2025-12-16T07:32:32Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 7:32 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/1 "2025-12-16T07:32:32Z")

</div>

J’ai débuté sur Home Assistant OS (HAOS) puis j’ai migré vers la solution Home Assistant Docker pour pouvoir exploiter la pleine puissance de mon raspberry Pi 5.  
Ayant atteint un niveau de complétude satisfaisant, je souhaite partager avec vous le fruit de mon travail. L’objectif n’est pas de débattre sur ce qui est bien ou pas bien, seulement de regrouper en un seul endroit une solution compléte.

Pour installer Home Assistant disons qu’il y a 3 types d’installation :

1. **Home Assistant vers HAOS**  
Home Assistant installé via son propre système d’exploitation  
Avantage : Solution all-inclusive, facile a déployer, compléte, ergonomique, bref du bon boulot de la part de Nabu Casa.  
Inconvénient : Le système est un peu fermé et on ne peut pas faire plusieurs choses en meme temps avec son Raspberry comme l’utiliser en tant qu’ordinateur de bureau.

2. **Home Assistant version HAOS installé sur machine virtuelle**  
Une machine virtuelle type Proxmox permet de faire croire à HAOS et tout seul.  
[[Article] Installer Home Assistant OS avec Proxmox (VM)](https://forum.hacf.fr/t/article-installer-home-assistant-os-avec-proxmox-vm/22940)  
Avantage : On profite de toute la puissance de HAOS tout en pouvant faire autre chose de son Raspberry en même temps comme un ordinateur de bureau.  
Inconvénient : Je ne sais pas, je l’ai pas fait 😛

3. **Home Assistant version Docker**  
Home Assistant core tourne dans un conteneur type docker (un peu comme fait HAOS) sauf qu’on garde la main sur le système d’exploitation.  
Avantage : On fait faire a peu prés tout se que l’on veut avec son Raspberry  
Inconvénient : Rien n’est intégré, il faut tout gérer soit même. Pour ceux qui veulent découvrir linux c’est un bon exercice ^^

Donc vous l’aurez compris, je m’interesse à la migraration de 1 vers 3 en conservant l’intégralité de mes automatisations et fonctionnalités initiales mais je ne vais pas forcément faire la publicité pour ce choix.

Situation de départ :  
Raspberry Pi 5 avec Dongle Zigbee Sononf 3.0+ et carte SSD.  
Installation de Home Assistant OS (aujourd’hui 2025.12.3) avec les add-ons suivants :  
MQTT Mosquitto, Zigbee2MQTT, Let’sEncrypt, DuckDNS, FileEditor et [Backup to Google Drive](https://www.domo-blog.fr/comment-sauvegarder-home-assistant-sur-google-drive/)

Situation d’arrivée :  
Raspberry Pi 5 avec Carte d’extension bottom M2 Seeed Studio + Disque NVMe + ventilateur Ice Tower cooler+ et dongle Zigbee Sononf 3.0+  
Systeme d’exploitation : Debian bookworm 12.12 + docker (1.52)  
Logiciels : Portainer, DuckDns, LetEncrypt, Mosquitto MQTT, Zigbee2MQTT, Watchtower, MQTT Explorer (falcutatif)  
Avec pas mal de sueur, patience et huile de coude, on arrive a obtenir un environnement équivalent (sauf qu’on ne peut pas rebooter le raspberry depuis Home Assistant ^^)

J’ai découpé mon tuto en différents sujets:

- [Etape 1 : Réaliser ses backup sous Home Asisstant](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/2)
- [Etape 2: Configurer sa box Router](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/3)
- [Etape 3 : Installation de Duckdns](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/5)
- [Etape 4 : Installer Let’s Encrypt](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/5)
- [Etape 5 : Installation de Docker](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/6)
- [Etape 6: Installation de Portainer](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/8)
- [Etape 7: Installation de Mosquitto MQTT](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/9)
- [Etape 8: Installation de Zigbee2MQTT](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/10)
- [Etape 9: Installation de File Editor aussi appelé HAAS configurator](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/11)
- [Etape 10: Installation de HomeAssistant](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/12)
- [Etape 11: Installation de MQTT Explorer _falcutatif_](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/13)
- [Etape 12: Installation du conteneur DuckDNS](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/14)
- [Etape 13: Installation de Watchtower](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/15)
- [Etape 14: Installation de Rclone](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/16)
- [QQ scripts (email et backup quotidien)](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/17)
- [Scripts pour déclencher un backup de HomeAssistant avant une mise à jour via Watchtower](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/18)

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 7:33 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/2 "2025-12-16T07:33:27Z")

</div>

**Etape 1 : Réaliser ses backup sous Home Asisstant**

Je vous recommande vivement d’installer l’add-on **Backup Google Drive** pour enregistrer votre backup sur le cloud, surtout si votre HAOS tourne sur SSD. Les cartes SSD ne sont pas réputées pour leur fiabilité.  
Suivez ce tuto très bien fait :

> **[Comment sauvegarder Home Assistant sur Google Drive en 2024 ?](https://www.domo-blog.fr/comment-sauvegarder-home-assistant-sur-google-drive/)**
>
> La sauvegarde d'un système domotique est primordiale. Cette dernière si elle est correctement exécutée, permet de remonter le système rapidement en case

Lancer un Full Backup en incluant les adds-ons puis garder sur le cloud dans un endroit precis cette sauvegarde + Télécharger le kit de secours!  
NB: Si vous utilisez Zigbee2Mqtt, les identifiants des appareils linkés seront enregistrés dans le Full Backup.

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 7:33 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/3 "2025-12-16T07:33:58Z")

</div>

**Etape 2: Configurer sa box Router**

Commencez par configurer votre box/router pour ouvrir les ports et rediriger les requêtes vers le raspberry.  
Commencons pas fixer l'adresse IP du Raspberry sur le réseau local.  
  
  
Connectez vous sur votre box locale  
Généralement il faut se connecter sur l'adresse [http://192.168.1.1](http://192.168.1.1) depuis un navigateur.  
En cas de doute, vous pouvez vérifier l'adresse gateway avec cette commande dans un terminal (ou regarder les propriétés du réseau sur le desktop):

```auto
nmcli -p device show

```

Nb: Sur _Free_, tout se passe sur le site internet _Free_ de votre espace client.

Pour moi, j'ai le Raspberry en ETHernet sur l'IP 192.168.1.73 (et aussi en Wifi sur l'IP192.168.1.74 mais c'est redondant). Donc ajoutez le en statique. Menu **IPV4/DHCP**

 ![box_dhcp2](https://forum.hacf.fr/uploads/default/original/3X/d/5/d5067d1424d0dcdd876fb73c384ef65239752776.png)

Ensuite la redirection des ports : **Menu IPV4/NAT**

 ![box_nat_2](https://forum.hacf.fr/uploads/default/original/3X/9/c/9c303a29be5558766b1171b9e0722271fa50b6ce.png)  
Il faut ouvrir :

- 80 pour les réquetes HTTP (et la création des certificats TLS)
- 443 pour les réquetes HTTPS
- 22 pour les connections SSH (terminal à distance)
- 8123 pour se connecter à Home Assistant
- 9443 pour se connecter à Portainer
- 3218 si vous souhaitez utiliser FileEditor hors du réseau local (attention comporte qq risques, voir FileEditor)
- 8080 pour accéder au Frontend Zigbee2MQTT depuis l'extérieur
- 1883 si vous avez des périphériques MQTT dans votre maison de campagne ^^
- 5572 pour accéder au Frontend de Rclone (up to you)

_Nb: Moi j'ai qq redirections supplémentaires pour accéder aux fonctions importantes via Wifi lorsque mon cable Ethernet est débranché, mais à priori vous en aurez pas l'utilité._

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 9:56 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/5 "2025-12-16T09:56:41Z")

</div>

**Etape 3 : Installation de Duckdns**

Allez sur le site [https://www.duckdns.org/](https://www.duckdns.org/)

Se creer un compte.  
Creer un domain puis enregistrer son adresse IP.

Pour la suite mon domain sera `toto.duckdns.org` à remplacer par votre nom de domain.

Notez qq part le n° de token généré.

  

**Etape 4 : Installer Let’s Encrypt**

On démarre dans le dur, pour moi c’est l’étape la plus compliquée.

Lets Encrypt permet d’obtenir des certificats SSL/TLS afin d’utiliser Home Assistant en _https_.

A savoir: si Home Assistant est configuré en Https, toutes les integrations dans l’interface graphique via des Iframes doivent être en https également.

Lets Encrypt s’installe a travers **Certbot**

Mais avant cela, il faut installer un petit serveur web : **NGinx**  
Tuto très facile à suivre :

> **[Debian – comment installer Nginx en tant que serveur Web ? | IT-Connect](https://www.it-connect.fr/debian-comment-installer-nginx-en-tant-que-serveur-web/)**
>
> Comment installer et configurer Nginx sous Debian pour héberger son site Internet ? Comment installer PHP pour l\\\\\\'utiliser avec Nginx ? Réponse dans ce tutoriel.

Dans une console taper les instructions suivantes :

> sudo apt update -y  
> sudo apt install nginx -y  
> sudo systemctl enable nginx

  

Ensuite, pour installer Certbot, je propose de suivre les instructions pour Nginx et Linux PIP.  
Sources :

> **[Certbot Instructions](https://certbot.eff.org/instructions?ws=nginx&os=pip)**
>
> Certbot Instructions

Installer python :

```auto
sudo apt install python3 python3-dev python3-venv libaugeas-dev gcc

```

Creer un environnement python

```auto
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip

```

Installer Certbot

```auto
sudo /opt/certbot/bin/pip install certbot certbot-nginx

```

Creer un lien symbolique pour garantir que Certbot sera accessible partout

```auto
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot

```

  

Laisser Certbot configurer NGinx pour activer le https:

```auto
sudo certbot --nginx

```

Suivez ce petit guide pour la configuration de Certbot:

> **[Certbot sur Nginx ou Apache. Installation de Let's Encrypt SSL.](https://profitserver.net/fr/knowledge-base/installation_certbot/#Installing_the_Certificate_for_Nginx_or_Apache)**
>
> Installation et configuration de Certbot sur Nginx ou Apache. Installation du certificat SSL Let's Encrypt. Configuration des mises à jour automatiques de Let's Encrypt.

Il va demander qq info dont le nom du domain créé précédement avec Duckdns.

  

Ajouter une plannification de tache pour vérifier les certificats (tous le 1er du mois à minuit):

```auto
echo "0 0 1 * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

```

Commande à lancer tous les mois pour verifier que certbot est à jour (ou ajouter une ligne dans votre crontab comme au dessus : `sudo nano /etc/crontab`) :

```auto
sudo /opt/certbot/bin/python3 -m pip install --upgrade pip

```

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 9:57 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/6 "2025-12-16T09:57:31Z")

</div>

**Etape 5 : Installation de Docker**

Source:

> **[Installer Docker sur Debian 12 étape par étape](https://www.ionos.fr/digitalguide/serveur/configuration/installer-docker-sur-debian-12/)**
>
> Docker est l’un des outils les plus importants pour DevOps et les développeurs. Voici comment installer Docker sur Debian 12.

ou

> **[Installation de la plateforme Docker](https://technologie-geek.fr/installation-de-la-plateforme-docker/)**
>
> Tutoriels d'installation de la plateforme Docker sur Debian. Docker est une plateforme légère de virtualisation de conteneur open-source.

  
Prérequis (mise à jour et qq fonctions indispensables):

```auto
cd /
apt update && apt upgrade
apt install curl gpg

```

  
Récupérez la clée GPG officielle pour garantir la provenance de l'appli:

```auto
mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

```

  
Ajouter Docker aux sources-list du gestionnaire de packet APT

```auto
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null

```

Ca revient à écrire `deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable` dans le fichier `/etc/apt/sources.list.d/docker.list`

  
Mise à jour de APT et installation:

```auto
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

```

  

QQ manip pour assurer que Docker soit lancé et activer le redémarrage automatique de Docker à l’allumage

```auto
sudo systemctl start docker
sudo systemctl enable docker

```

  
Vérifiez que Docker fonctionne :

```auto
docker run hello-world

```

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 9:57 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/7 "2025-12-16T09:57:46Z")

</div>

_message déplacé plus haut_

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 9:58 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/8 "2025-12-16T09:58:59Z")

</div>

**Etape 6: Installation de Portainer**

Source :

> **[Installation de Portainer sur Docker](https://technologie-geek.fr/installation-de-portainer-sur-docker/)**
>
> Tutoriels d'installation de Portainer sur Docker. Portainer est une plate-forme open source de gestion de conteneurs pour Docker.

  

Je vous propose de créer un répertoire `scripts` dans votre _Home_ puis un répertoire `portainer` dans celui ci. Donc avec un terminal ou sous le Desktop :

```auto
cd ~/
mkdir scripts
cd scripts/
mkdir portainer
cd portainer/

```

Puis dans `~/scripts/portainer` créer un fichier `portainer-compose.yaml`

```auto
nano portainer-compose.yaml

```

Et coller cette description :

```auto
services:
  portainer:
    container_name: portainer
    image: portainer/portainer-ce:lts
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
      - /etc/localtime:/etc/localtime:ro # pour synchroniser l'heure avec l'hôte
      - /etc/letsencrypt:/etc/letsencrypt:ro
    ports:
      - 9443:9443
      #- 8000:8000 # Remove if you do not intend to use Edge Agents
    environment:
      - CSP=false #pour autoriser l'affichage dans un iframe dans HA
    command:
       --tlscert /etc/letsencrypt/live/toto.duckdns.org/fullchain.pem
       --tlskey /etc/letsencrypt/live/toto.duckdns.org/privkey.pem

volumes:
  portainer_data:
    name: portainer_data
    external: true

networks:
  default:
    name: portainer_network

```

  

Maintenant nous allons faire un petit script pour installer (ou mettre à jour) Portainer.  
Le script s’appelera `install_portainer.sh`

```auto
touch install_portainer.sh # cree le fichier
chmod +x install_portainer.sh # le rend executable
nano install_portainer.sh # ouvre l'editeur

```

et coller ce petit script :

```auto
#!/bin/bash
echo "Mon installateur portainer"
docker pull portainer/portainer-ce:lts

docker stop portainer
docker rm portainer
docker compose -f portainer-compose.yaml up -d
sleep 2s
docker logs portainer
echo "Portainer mis a jour!"

```

Plus qu’à l’executer :

```auto
./install_portainer.sh

```

Si les certificats sont OK, Portainer écoutera l’adresse en HTTPS, sinon il sera acessbile en HTTP.

  

Connectez vous avec un navigateur à Portainer en allant sur `https://172.18.0.2:9443` pour un acces local ou `https://toto.duckdns.org:9443` pour un acces depuis Internet.

Il faut se créer un compte (login+mdp) et créer un nouvel environnement local.  
Pour la suite on va ajouter des **stacks** qui vont permettre de créer des **conteners**

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 9:59 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/9 "2025-12-16T09:59:45Z")

</div>

**Etape 7: Installation de Mosquitto MQTT**

Source:

> **[Comment déployer mosquitto mqtt facilement avec docker en 2026 – Technologie...](https://technologie-geek.fr/installation-broker-mosquitto-docker/)**

  

Dans Portainer, créer un nouveau _stack_, donner lui le nom de _mqtt_ par exemple et dans l'éditeur coller ce compose.yaml :

```auto
services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mqtt
    restart: always
    volumes:
      - config:/mosquitto/config
      - data:/mosquitto/data
      - log:/mosquitto/log
    ports:
      - 1883:1883 # adresse pour les requetes MQTT
      - 9001:9001 # adresse pour les requêtes socket
    networks:
      mon_reseau:
        ipv4_address: 172.20.0.10
      
volumes:
  config:
  data:
  log:

networks:
  mon_reseau:
    name: reseau_mqtt
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/24
          gateway: 172.20.0.254

```

Finir par l'action _deployer_

  
Passons à la configuration.

Rentrer en mode SSH dans le container pour creer un compte toto/mdp

```auto
docker exec -it mqtt sh

```

 ![image](https://forum.hacf.fr/uploads/default/original/3X/3/d/3d8cc0b4c88aadd342c5b44c0aedb60e27ab3938.png)  
Puis creer le compte :

```auto
mosquitto_passwd -c mosquitto/config/mqtt_passwd TOTO

exit #pour sortir une fois le compte cree

```

Ensuite editez le fichier **mosquitto.conf** dans le répertoire _mqtt\_config_, pour connaitre le chemin exacte tapez (vous pouvez aussi passer par **FileEditor** , voir plus bas) :

```auto
docker volume inspect mqtt_config
sudo ls /var/lib/docker/volumes/mqtt_config/_data -lh
sudo nano /var/lib/docker/volumes/mqtt_config/_data/mosquitto.conf 

```

 ![20251220_09h48m23s_grim](https://forum.hacf.fr/uploads/default/original/3X/2/6/262382ea8981d71e35b613ab7b7cdf30d653282f.png)  
et ajouter les lignes suivantes au fichier :

> listener 1883  
> listener 9001  
> protocol websockets  
> persistence true  
> persistence\_location /mosquitto/data  
> allow\_anonymous false  
> password\_file mosquitto/config/mqtt\_passwd

Relancer le container

```auto
docker restart mqtt

```

Et voila, votre Broker MQTT est normalement opérationnel. Vous pouvez le tester avec **MQTT Explorer** , voir ci dessous.

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 10:00 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/10 "2025-12-16T10:00:50Z")

</div>

**Etape 8: Installation de Zigbee2MQTT**

Source:

> **[Redéployer zigbee2mqtt avec docker stack : guide pratique et astuces –...](https://technologie-geek.fr/comment-installer-zigbee2mqtt-sur-docker/)**

Pour utilisation avec un Dongle Zigbee sur port USB :

```auto
sudo ls -l /dev/serial/by-id

```

![20251220_13h10m04s_grim](https://forum.hacf.fr/uploads/default/optimized/3X/c/e/ce9f663cc2177dd88798142f76f232687badbccb_2_690x43.png)

Il faut recopier la partie _usb-Itead…-if00-port0_ dans la pile ci-dessous.

Creer un nouveau stack **zigbee2mqtt** ainsi :

```auto
services:
  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: ghcr.io/koenkk/zigbee2mqtt
    restart: always
    volumes:
      - /opt/docker/zigbee2mqtt:/app/data
      - /run/udev:/run/udev:ro # donne accès en lecture au gestionnaire de périphériques
      - /etc/letsencrypt:/etc/letsencrypt:ro
    ports:
      - 8080:8080 # Port pour le frontend
    environment:
      - TZ=Europe/Paris
    devices:
      - /dev/serial/by-id/usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-if00-port0:/dev/ttyUSB0
    networks:
      reseau_mqtt:
        ipv4_address: 172.20.0.2

networks:
  reseau_mqtt:
    external: true

```

Maintenant cliquer sur **« Deploy the stack »** pour installer Zigbee2mqtt sur docker.

A ce stade il faut arreter le conteneur Zigbee2MQTT et passer à l’installation de **Home Assistant** (étape 10) avant de poursuivre.

Une fois HomeAssistant installé, reprenons la configuration de Zigbee2MQTT.

  

Configuration de **Zigbee2mqtt** sur docker :

Connectez vous à nouveau en SSH sur votre serveur puis aller dans votre dossier Zigbee2mqtt `/opt/docker/zigbee2mqtt` et éditer le fichier `configuration.yaml`  
Si vous avez configurer **FileEditor** (étape 9), ça peut être fait depuis ce dernier.

```auto
cd /opt/docker/zigbee2mqtt
sudo nano configuration.yaml

```

et recopier ces lignes au debut du fichier :

```auto
homeassistant:
  enabled: true
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://172.20.0.10:1883
  user: login_de_MQTT
  password: mdp_de_MQTT
serial:
  port: /dev/ttyUSB0
  adapter: ember
frontend:
  enabled: true
  package: zigbee2mqtt-frontend
  port: 8080
  host: 172.20.0.2
  auth_token: '!secret.yaml auth_token'
  url: 'https://toto.duckdns.org:8080'
  ssl_cert: /etc/letsencrypt/live/toto.duckdns.org/fullchain.pem
  ssl_key: /etc/letsencrypt/live/toto.duckdns.org/privkey.pem
  base_url: /
  notification_filter:
    - 'z2m: Failed to ping.*'
  disable_ui_serving: false

```

Pensez à corriger avec vos identififants du broker Mosquitto MQTT et mettre votre nom de DNS.

La ligne `auth_token: '!secret.yaml auth_token'` fait référence à un mot de passe enregistré dans un fichier `secret.yaml` dans le meme répertoire que `configuration.yaml`.  
Dans ce fichier, il y a une ligne par paramètre secret. Dans le mien j'ai mis simplement :

```auto
auth_token: mot_de_passe_admin_de_Zigbee

```

Ce mot de passe est demandé à l'ouverture du frontend de Zigbee2MQTT.

  
C'est terminé pour Zigbee2MQTT. Si le conteneur était arrété, pensez à le relancer. Vous pouvez vous connecter au Frontend à cette adresse : `https://172.20.0.2:8080`  
  

**Bonus**  
Personnelement j'ai un bug sur mon dongle: quand je le touche, il se déconnecte et arrête Zigbee2Mqtt avec le message _exit code 2_ et Docker ne le relance pas malgrès la politique _restart: always_  
Mon contournement : créer un script qui vérifie toute les minutes si Zigbee2Mqtt est toujours actif, sinon le rédemarre.  
Pour cela je créé un script `relunch_zigbee.sh` dans mon répertoire `scripts`

```auto
touch relunch_zigbee.sh # cree le fichier
chmod +x relunch_zigbee.sh # le rend executable
nano relunch_zigbee.sh # ouvre l'editeur

```

Voici le script :

```auto
#!/bin/bash

MY_DOCK=zigbee2mqtt

if [$(docker ps 2>&1 | grep -c "${MY_DOCK}") -eq 1]
then 
	echo "Docker ${MY_DOCK} is running"
	exit 0
fi

echo "Docker ${MY_DOCK} is stopped..."

#relance le docker
docker start ${MY_DOCK}
#docker logs ${MY_DOCK} --follow --tail 5

#envoi une notification par email
docker run --rm nickfedor/shoutrrr:latest send --message "Docker ${MY_DOCK} has been relunched!" --url "smtp://login:mdp@smtp.free.fr:587/?fromaddress=email@free.fr&toaddresses=email@gmail.com&encryption=ExplicitTLS&usestarttls=yes&timeout=30s"

exit 0

```

Penser à remplacer _login_/_mdp_ et _email_ pour vos identifiants free par exemple.

Pour que ce script soit executé toutes les minutes, il faut l'ajouter au planificateur de tache cron:

```auto
crontab -e

```

et ajouter cette ligne au cron :

```auto
* * * * * /home/user/scripts/relunch_zigbee.sh >/dev/null

```

_user_ à remplacer par votre nom d'utilisateur sur le raspberry.

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 10:01 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/11 "2025-12-16T10:01:24Z")

</div>

**Etape 9: Installation de File Editor** aussi appelé **HAAS configurator**

FileEditor est un éditeur de text/script particuliere agréable a utiliser pour Home Assistant.  
On peut ajouter des montages sous Docker pour accéder à la majorité de notre fichier de configuration.

Créer un nouveau stack _fileeditor_ ainsi:

```auto
services:
  fileeditor:
    container_name: file_editor
    image: "causticlab/hass-configurator-docker:latest"
    restart: unless-stopped
    ports:
      - "3218:3218/tcp"
    volumes:
      - /opt/docker/hass-configurator/config:/config # fichier de configuration de FileEdit
      - /opt/docker/ha/config:/hass-config # pour accéder à HA
      - /opt/docker/zigbee2mqtt:/hass-config/zigbee2mqtt # pour acceder à Zigbee2MQTT
      - /home/USER/scripts:/hass-config/scripts # pour acceder aux scripts dans Home
      - /var/lib/docker/volumes/mqtt_config/_data:/hass-config/mqtt # pour acceder à MQTT
      - /etc/letsencrypt:/etc/letsencrypt:ro
    environment:
      - HC_BASEPATH=/hass-config
      - HC_ENFORCE_BASEPATH=true
      - HC_DIRSFIRST=true
      - HC_SSL_CERTIFICATE=/etc/letsencrypt/live/toto.duckdns.org/fullchain.pem
      - HC_SSL_KEY=/etc/letsencrypt/live/toto.duckdns.org/privkey.pem
      - HC_HASS_API=https://172.20.0.1:8123/api/
      - HC_HASS_API_PASSWORD=token_from_HA
      - HC_USERNAME=Login_de_file_editor
      - HC_PASSWORD=Un_mot_de_passe
    networks:
      reseau_mqtt:
        ipv4_address: 172.20.0.12

networks:
  reseau_mqtt:
    external: true

```

Alors il faut remplacer _USER_ par votre nom d'utilisateur sur Raspberry, remplacer _toto_ par votre DNS et choisir un couple _login_/_mdp_ pour l'auhentification HTTP.

Attention à bien mettre un nom d'utilisateur/mot de passe suffisament fort, surtout si vous ouvrez le port 3218 de votre router car toute votre configuration HomeAssistant sera accessible depuis Internet!

  

Le _HASS\_API\_PASSWORD_ s'obtient dans HomeAssistant en créant un token dans son profil/sécurité :

 ![20251220_16h10m02s_grim](https://forum.hacf.fr/uploads/default/original/3X/e/0/e0b58719c90a2f2ad5ed620d3eda86449f119688.png)

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 10:02 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/12 "2025-12-16T10:02:16Z")

</div>

**Etape 10: Installation de HomeAssistant**

Enfin, on arrive au moment tant attendu.  
Voici le stack tant attendu 🙂 donc nouveau stack _homeassistant_ :

```auto
services:
  homeassistant:
    image: homeassistant/home-assistant:stable
    container_name: homeassistant
    restart: always
    environment:
      - TZ=Europe/Paris
    ports:
      - 8123:8123
    volumes:
      - /opt/docker/ha/config:/config
      - /etc/localtime:/etc/localtime:ro
      - /opt/docker/zigbee2mqtt:/config/zigbee2mqtt # pour ajouter Zigbee2mqtt aux backup
      - /etc/letsencrypt:/etc/letsencrypt:ro
      - /etc/letsencrypt/live/toto.duckdns.org/:/ssl:ro # pas sur de l'utilite...
    labels:
      com.centurylinklabs.watchtower.lifecycle.pre-update: sh /config/generate_backup.sh >>/config/watchtower.log
      com.centurylinklabs.watchtower.lifecycle.pre-update-timeout: 100
    networks:
      reseau_mqtt:
        ipv4_address: 172.20.0.1

networks:
  reseau_mqtt:
    external: true

```

La partie _labels_ est liée à Watchtower pour les mises à jour automatiques. Voir plus loin.  
Remplacer _toto_ par votre DNS comme d'hab.

  

**Configuration de HomeAssistant**  
Ouvrir le fichier `/opt/docker/ha/config/configuration.yaml`  
Soit avec FileEditor, soit dans un terminal :

```auto
cd /opt/docker/ha/config
sudo nano configuration.yaml

```

et renseigner le fichier ansi :

```auto
# Loads default set of integrations. Do not remove.
default_config:

http:
  server_port: 8123
  ssl_certificate: /etc/letsencrypt/live/toto.duckdns.org/fullchain.pem
  ssl_key: /etc/letsencrypt/live/toto.duckdns.org/privkey.pem
  use_x_forwarded_for: true
  trusted_proxies:
    - 192.168.1.1
  ip_ban_enabled: True
  login_attempts_threshold: 10

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

```

Remplacer _toto_ par votre DNS.

  

**Restauration de votre sauvegarde Home Assistant.**  
Si vous avez déjà installé Zigbee2MQTT, pensez à l'arréter avant de restaurer la sauvegarde car il va écraser votre base de donnée pour rétablir les link déjà créé.

Allez dans Home Assistant à l'adresse [https://172.20.0.1:8123](https://172.20.0.1:8123) (ou depuis Internet `https://toto.duckdns.org:8123`)  
Puis dans HomeAssistant/Paramètre/Système/Sauvegarde restaurez la sauvegarde que vous avez mis au chaud sur votre Cloud tout au début du tuto.  
Lien vers un pas à pas : [Guide de restauration à partir d'une sauvegarde dans Home Assistant - Domotique Technoseb27](https://domotiquetechnoseb27.com/2024/06/14/guide-de-restauration-a-partir-dune-sauvegarde-dans-home-assistant/)

 ![20251220_16h51m31s_grim](https://forum.hacf.fr/uploads/default/original/3X/1/b/1bde8d7e59686a091c4ed19606d6b7948d24781b.png)  
 ![20251220_16h51m55s_grim](https://forum.hacf.fr/uploads/default/original/3X/1/3/133f735fc2c1bd8fbc20e7b5e386082ea334b96a.png)

Attention, la restauration de la sauvegarde va également ré-écrire le fichier `configuration.yaml` avec des réglagles non adapté... Il faut donc recommencer l'étape **Configuration de HomeAssistant**.  
Une fois fait, relancer le conteneur _Home Assistant_.

  

**Configuration de MQTT**  
Il faut corriger l'adresse de l'intégration MQTT pour qu'il pointe bien vers notre broker sous Docker.  
Allez dans HomeAssistant/Paramètres/Appareils et services/MQTT  
Sélectionner les 3 points verticaux puis Reconfigurer

 ![20251222_07h51m05s_grim](https://forum.hacf.fr/uploads/default/original/3X/e/0/e0983d11bb918db34948eb9459ece4e0ab2fd759.png)  
 ![20251222_07h52m12s_grim](https://forum.hacf.fr/uploads/default/original/3X/d/7/d73a4d5ea036617b940d72ea99886718a057c227.png)  
Entrer l'adresse IP locale du serveur 172.20.0.10 + identifiant/mdp de Mosquitto MQTT :  
 ![20251222_07h52m22s_grim](https://forum.hacf.fr/uploads/default/original/3X/9/c/9c9979d965263c80858b5afd01d1517b0acc4bd2.png)

  

**Ajouter des Intégration dans l'interface de Home Assistant**  
Pour ajouter des raccourcis depuis Home Assistant vers vos différentes intégrations Docker (Portainer, Zigbee2MQTT, FileEditor, etc) il faut aller dans HomeAssistant/Paramètre/Tableaux de bord =\> Ajouter un tableau de bord (icon en bas à droite) \>\> Page Web

 ![20251222_08h01m12s_grim](https://forum.hacf.fr/uploads/default/original/3X/7/e/7e89943f2bd9c9b233082c231fe77b18bf5dad0b.png)  
Entrez les URL Internet de vos intégrations.  
Par exmple : `https://toto.duckdns.org:8080` pour Zigbee2MQTT

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 10:03 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/13 "2025-12-16T10:03:34Z")

</div>

**Etape 11: Installation de MQTT Explorer** [falcutatif]

Source:

> **[MQTT Explorer](https://mqtt-explorer.com/)**
>
> An all-round MQTT client that provides a structured topic overview

Mon stack :

```auto
services:
 mqtt-explorer:
    container_name: mqtt-explorer
    image: smeagolworms4/mqtt-explorer
    hostname: mqtt-explorer
    ports:
        - 9002:9002
    environment:
        - HTTP_PORT=9002
        - CONFIG_PATH=/mqtt-explorer/config
        - TZ=Europe/Paris
        #- SSL_KEY_PATH=/etc/letsencrypt/live/TOTO.duckdns.org/privkey.pem  
        #- SSL_CERT_PATH=/etc/letsencrypt/live/TOTO.duckdns.org/fullchain.pem 
    volumes:
        - config:/mqtt-explorer/config
        - /etc/timezone:/etc/timezone:ro
        - /etc/letsencrypt:/etc/letsencrypt:ro

    networks:
      reseau_mqtt:
        ipv4_address: 172.20.0.11
volumes:
  config:
networks:
  reseau_mqtt:
    external: true

```

Nb: Si j'active la connection en TLS à MQTT-Explorer, il n'arrive pas à se connecter au broker MQTT...

Allez à l'adresse [http://172.20.0.11:9002](http://172.20.0.11:9002)  
Puis connectez vous avec vos identifiants MQTT (étape 7)

 ![20251220_10h17m12s_grim](https://forum.hacf.fr/uploads/default/original/3X/3/8/38ba7516460178e252d87413e3829b6e215df578.png)

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 16, 2025, 10:07 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/14 "2025-12-16T10:07:00Z")

</div>

**Etape 12: Installation du conteneur DuckDNS**  
Le conteneur DuckDNS sert à maintenir à jour votre nom de domain pour qu’il pointe vers la bonne adresse IP. Etant donné que votre adresse IP peut changer selon le bon vouloir de votre opérateur, il faut le checker régulièrement.

Nouveau stack _duckdns_ :

```auto
services:
  duckdns:
    image: lscr.io/linuxserver/duckdns
    container_name: duckdns
    environment:
      - TZ=Europe/Paris
      - SUBDOMAINS=toto
      - TOKEN=token #insérez votre token
      - LOG_FILE=false #optional
    volumes:
      - /opt/docker/duckdns/config:/config #optional
    restart: unless-stopped

```

`SUBDOMAINS=` : Si votre domain est [toto.duckdns.org](http://toto.duckdns.org), rentrer just `toto`  
`TOKEN=` : Numéro de token généré sur le site Duckdns.

  
Une fois déployé, regardez les \*logs\* pour vérifier qu'il est bien configuré.

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 22, 2025, 9:56 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/15 "2025-12-22T09:56:09Z")

</div>

**Etape 13: Installation de Watchtower**

Source:

> **[Watchtower](https://containrrr.dev/watchtower/)**

Watchtower sert à mettre à jour automatiquement les images de Docker dés qu’il trouve une nouvelle version disponible.

Créer un nouveau stack _watchtower_

```auto
services:
  watchtower:
    container_name: watchtower
    image: nickfedor/watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # acces à Docker
      - /etc/timezone:/etc/timezone:ro
    environment:
      TZ: Europe/Paris
      WATCHTOWER_CLEANUP: true #supprime automatiquement les vieilles images
      WATCHTOWER_SCHEDULE: "0 0 4 * * *" # check tous les jours à 4h du mat
      WATCHTOWER_LIFECYCLE_HOOKS: true
      WATCHTOWER_UPDATE_ON_START: true
      WATCHTOWER_NOTIFICATIONS: email
      WATCHTOWER_NOTIFICATION_EMAIL_FROM: toto@free.fr
      WATCHTOWER_NOTIFICATION_EMAIL_TO: toto@gmail.com
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER: smtp.free.fr
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT: 587
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER: toto
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD: xxxx
      WATCHTOWER_NOTIFICATION_EMAIL_DELAY: 10

```

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 22, 2025, 9:57 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/16 "2025-12-22T09:57:01Z")

</div>

**Etape 14: Installation de Rclone**

Source:

> **[GitHub - coanghel/rclone-docker-automount: Simple Python script in a Docker container to...](https://github.com/coanghel/rclone-docker-automount)**
>
> Simple Python script in a Docker container to auto-mount rclone remote storage.

RClone est un utilitaire pour copier/synchroniser des répertoires avec des disques Cloud.  
On va utiliser la version serveur RC pour être accessible via commandes HTTP/API

Créez ce stack _Rclone_ :

```auto
services:
  rclone:
    image: rclone/rclone:latest
    container_name: rclone
    volumes:
      - /opt/docker/rclone:/config/rclone
      - /opt/docker/rclone/logs:/logs
      - /opt/docker/rclone/cache:/root/.cache/rclone # This is for the WebUI, not VFS
      - /home/user:/hostfs:rshared
      - /var/cache/rclone:/vfsCache
      - /etc/passwd:/etc/passwd:ro
      - /etc/group:/etc/group:ro
      - /etc/fuse.conf:/etc/fuse.conf:ro
      - /etc/letsencrypt:/etc/letsencrypt:ro
      - /opt/docker/ha/config:/opt/docker/ha/config # rend nos répertoire HA accessibles depuis Rclone RC
    devices:
      - /dev/fuse:/dev/fuse:rwm
    cap_add:
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    command:
      - rcd
      - --rc-web-gui
      - --rc-web-gui-no-open-browser
      - --rc-addr=:5572
      - --rc-user=rclone_user
      - --rc-pass=rclone_pw
      - --rc-cert=/etc/letsencrypt/live/toto.duckdns.org/fullchain.pem
      - --rc-key=/etc/letsencrypt/live/toto.duckdns.org/privkey.pem
      - --log-level=NOTICE
      - --cache-dir=/vfsCache
    network_mode: host
# networks:
# reseau_mqtt:
# ipv4_address: 172.20.0.4
    ports:
      - 5572:5572
    environment:
      - TZ=Europe/Paris
    restart: unless-stopped
  rclone_initializer:
    #image: ghcr.io/coanghel/rclone-docker-automount/rclone-init:latest
    image: ghcr.io/Gandalf77bo/rclone-docker-automount/rclone-init:latest
    container_name: rclone_initializer
    environment:
      - RCLONE_USERNAME=rclone_user
      - RCLONE_PASSWORD=rclone_pw
      - RCLONE_PORT=5572
      - RCLONE_CERT=/etc/letsencrypt/live/toto.duckdns.org/fullchain.pem
      - RCLONE_KEY=/etc/letsencrypt/live/toto.duckdns.org/privkey.pem
    volumes:
      - /opt/docker/rclone/initializer:/app/
      - /etc/letsencrypt:/etc/letsencrypt:ro
    restart: unless-stopped
    depends_on:
      - rclone
    networks:
      reseau_mqtt:
        ipv4_address: 172.20.0.14

networks:
  reseau_mqtt:
    external: true

```

Ce stack va déployer Rclone ainsi qu'un script qui permet de monter automatiquement le répertoire distant au démarrage.  
Je du faire un branch du projet GitHub Coanghel afin d'ajouter le support du HTTPS.  
Choisissez un couple identifiant /mdp pour Rclone qu'il faut renseigner à la fois à Rclone et au script.  
Corriger également l'endroit de montage du répertoire Gdrive : `/home/user:/hostfs:rshared`, moi je le monte dans mon home.

On va lancer Rclone en 2 fois. 1er fois pour configurer les access puis une 2nd fois avec les réglages normaux.

  

**Création des identifiants Google pour utilisation de Gdrive avec Rclone**

Allez dans [https://console.cloud.google.com](https://console.cloud.google.com)  
Allez dans `API et Services` et activer `Google Drive API`

 ![20251229_10h14m25s_grim](https://forum.hacf.fr/uploads/default/original/3X/c/5/c54eea496ff739ae95f56b1ee4c4576955885bc3.png)  
Puis dans `Identifiants` faire Créer des identifiants Oauth :  
 ![image](https://forum.hacf.fr/uploads/default/original/3X/0/5/051928d1c90dee8e3298ca1ced1f8562ddffd81b.jpeg)  
Type d'application : Application de Bureau  
Nom: Rclone ou autre  
Normalement vos codes s'affichent. Conservez les précieusement! Vous pouvez les téléchager au format JSON depuis l'écran Oauth/Client pendant qq mois seulement.  
 ![20251229_10h22m03s_grim](https://forum.hacf.fr/uploads/default/original/3X/e/4/e431e940070e3de524cd814b7b76e7fe1ac9a328.png)

Edit:  
L'ajout de son compte comme utilisateur de test permet de tester l'API pendant pour pouvoir semaine, apres quoi le token est à regénérer. Ce n'est pas pérenne donc je déconseil cette méthode.  
l'utiliser. Pour cela, allez dans `Audience` et ajoutez votre adresse email tout en bas :

 ![20251229_10h28m34s_grim](https://forum.hacf.fr/uploads/default/original/3X/8/6/867b5ed6472952a13f13e397364f1ed14de5203e.png)

Méthode pérenne :

> **[GDrive expiring after a week?](https://forum.rclone.org/t/gdrive-expiring-after-a-week/39017)**
>
> rclone version rclone v1.62.2 - os/version: raspbian 11.7 - os/kernel: 6.1.21-v7+ (armv7l) - os/type: linux - os/arch: arm (ARMv7 compatible) - go/version: go1.20.2 - go/linking: static - go/tags: none I have activated GDrive share with...

Dans `Acces aux Données` faites `Ajouter ou Supprimer des niveaux d'accés` et cochez ces 3 services :

- [https://www.googleapis.com/auth/docs](https://www.googleapis.com/auth/docs)
- [https://www.googleapis.com/auth/drive](https://www.googleapis.com/auth/drive)
- [https://www.googleapis.com/auth/drive.metadata.readonly](https://www.googleapis.com/auth/drive.metadata.readonly)

Puis dans `Audience` faites `Publier l'application`  
Etant donné que l'on a pas renseigner tout les champs pour publier l'application, elle va rester indéfiniement au status de `Vérification`.

 ![image](https://forum.hacf.fr/uploads/default/original/3X/7/d/7d084b54081761df7bb71b59ff3e9703138b671e.png)

Fermez l'onglet.  
Voila, normalement vos identifiants Google Auth sont OK.

  

**Installation et configuration de Rclone :**  
Donc pour configurer Rclone, il faut le lancer une 1ere fois avec dans le stack le `network_mode: host`. Désactiver les 3 autres lignes networks.  
Lancer le déploiement pout ouvrir un terminal et taper :

```auto
docker exec -it rclone rclone config

```

Cela va créer un fichier de configuration /opt/docker/rclone/rclone.conf  
Taper **n** pour créer un nouveau _remote_ et donnez lui un petit nom.  
Storage: pour moi Gdrive = **22**  
Client\_id: _l'identifiant Oauth généré par google du style `1820098191102-135xxxx.apps.googleusercontent.com`_  
Client\_secret: _le mot de passa associé genre `GOCSPX-rxxxxxdpPM`_  
Scope: 1  
Service\_account\_file: _rien_  
Edit Advance conf: **n**  
Use Web browser: **y**

 ![20251229_08h39m55s_grim](https://forum.hacf.fr/uploads/default/original/3X/0/3/03dd3b8c5042a40a3e80c0512c2d5c44204cda6d.png)  
Faites un copier/coller du lien afficher dans une fenetre de votre navigateur.  
Cela va ouvrir une fenetre de sélection de compte Google. Autorisez l'accés.  
Si votre compte Google Auth est à l'état publier/vérification, dans la fenetre d'autorisation des accés il faut forcer la main en cliquant en bas l'option `"Go to Rclone (unsafe)"`  
 ![image](https://forum.hacf.fr/uploads/default/original/3X/9/9/99e0730bd9ee873aec4235fbf14251d2098b1e0a.png)

Si tout se passe bien, le terminal affichera "toker captured" ou qq chose comme ça.  
Si qq tourne mal, faite Ctrl+c pour arreter et recommencez.

  

**Lancement de Rclone en mode normal**  
Modifier le stack pour ajouter un # devant la ligne `network_mode: host`  
et enlever les commentaire devant

```auto
    networks:
      reseau_mqtt:
        ipv4_address: 172.20.0.4

```

Re-déployer le stack.

  

**Utiliser rclone-docker-automount**  
Source:

> **[GitHub - Gandalf77bo/rclone-docker-automount: Simple Python script in a Docker container to...](https://github.com/Gandalf77bo/rclone-docker-automount)**
>
> Simple Python script in a Docker container to auto-mount rclone remote storage.

Pour l'utiliser il faut créer le répertoire ou le point de montage doit se faire.  
Ici ce sera `/home/user/Gdrive/mount`  
Puis créer un répertoire initializer dans Rclone.

```auto
cd /opt/docker/rclone
sudo mkdir initializer
cd initializer
sudo wget https://raw.githubusercontent.com/gandalf77bo/rclone-docker-automount/master/mounts.json # pour telecharger le fichier mounts.json
sudo wget https://raw.githubusercontent.com/gandalf77bo/rclone-docker-automount/master/rclone_initializer.py # pour télécharger le script qui pour une raison inconnue ne se télécharge pas tout seul!

```

Editez le fichier mounts.json pour peaufiner les réglages (`sudo nano mounts.json`)  
Le mien est ainsi :

```auto
[
 {
    "fs": "Gdrive:",
    "mountPoint": "/hostfs/Gdrive/mount",
    "mountOpt": {
	"AllowOther": true,
	"AllowNonEmpty": true
    },
    "vfsOpt": {
	"CacheMode": "full",
	"GID": 1000,
	"UID": 1000
    }
  }
]

```

nb: `/hostfs` est un volume docker defini dans le stack. Pour moi il pointe vers `/home/user`. Donc le point de montage final est `/home/user/Gdrive/mount`

J'ai déjà rencontré l'erreur _failed to mount FUSE fs: fusermount: exit status 1_  
Sur Internet ils recommandent de vérifier si fude3 est bien installé : `sudo apt install fuse3`  
Dans mon cas, le répertoire mount était verrouillé mais sans lien vers Gdrive, j'ai du le supprimer en faisant : `sudo umount /home/user/Gdrive/mount`

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 22, 2025, 9:57 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/17 "2025-12-22T09:57:09Z")

</div>

Je partage ici qq scripts sympas 🙂

Dans mon répertoire `/home/USER/scripts/`

**Envoi d’email avec Curl**  
Fichier `email.sh`

```auto
#!/bin/bash

if [[($# == 0) || ($# -gt 2)]]; then
	echo 'Syntaxe: email.sh [titre] contenu'
	exit 1
fi
if [[$# == 1]]; then
	sub="Notification"
	body="$1"
fi
if [[$# == 2]]; then
	sub="$1"
	body="$2"
fi

declare -A email;
email['user']="xxx@free.fr"
email['pass']="xxxxxxx"
email['smtp']="smtp.free.fr"
email['port']='587'
email['rcpt']='xxx@gmail.com' # adresse destinataire

email_content='From: Raspberry <'"${email['user']}"'>
To: "Gmail" <'"${email['rcpt']}"'>
Subject: '"$sub"'
Date: '"$(date)"'

'"$body"'
';

echo "$email_content" | curl -s \
    --url "smtp://${email['smtp']}:${email['port']}" \
    --user "${email['user']}:${email['pass']}" \
    --mail-from "${email['user']}" \
    --mail-rcpt "${email['rcpt']}" \
    --upload-file - # email_content

if [[$? == 0]]; then
    echo "Email sent to ${email['rcpt']}!"
else
    echo "curl error code $?"
    man curl | grep "^ \+$? \+"
fi

exit 0

```

  

**Synchronisation de fichier avec mon Gdrive tous les jours à 5h avec Rclone**  
Fichier `sync_gdrive_rc.sh`

```auto
#!/bin/bash

DOMAIN=mondomain.duckdns.org
RCLONE_USER=G
RCLONE_MDP=xxxxx
FOLDER=/opt/docker/ha/config/backups
REMOTE_FOLDER="Gdrive:/Home_Assistant/backups"
JSON='{
"srcFs":"'"${FOLDER}"'",
"dstFs":"'"${REMOTE_FOLDER}"'"
}'

#doc : https://git.frostfs.info/KurlesHS/rclone/src/branch/graceful-cancel/docs/content/rc.md
curl -vvv \
        --cert "/etc/letsencrypt/live/${DOMAIN}/fullchain.pem" \
        --key "/etc/letsencrypt/live/${DOMAIN}/privkey.pem" \
        --insecure \
	-H "Content-Type: application/json" \
	-d "${JSON}" \
        "https://${RCLONE_USER}:${RCLONE_MDP}@127.0.0.1:5572/sync/sync"
$RETOUR=$?

if [[$RETOUR == 0]]; then
    echo 'Rclone RC sync okay!';
else
    echo "curl error code $RETOUR";
    man curl | grep "^ \+$RETOUR \+"
fi

echo "$(date) Rclone sync ${FOLDER} to ${BACKUP_FOLDER}!" | tee sync_gdrive.log
exit 0

```

et on ajoute une planification journaliere avec `crontab -e`

```auto
0 5 * * * /home/USER/scripts/sync_gdrive_rc.sh >/home/USER/scripts/sync_gdrive_rc.cron.log

```

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 29, 2025, 11:11 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/18 "2025-12-29T11:11:30Z")

</div>

**Scripts pour déclencher un backup de HomeAssistant avant une mise à jour via Watchtower**

Tout d’abord dans le stack de Home assistant, vous aurez besoin des lignes suivantes pour déclencher le script avant la mise à jour par WatchTower

```auto
    labels:
      - com.centurylinklabs.watchtower.lifecycle.pre-update="/config/generate_backup.sh"
      - com.centurylinklabs.watchtower.lifecycle.pre-update-timeout=180

```

Le script en question `/config/generate_backup.sh` doit être dans `/opt/docker/ha/config/generate_backup.sh`

```auto
#!/bin/bash

#source : nck974 @ https://community.home-assistant.io/t/what-backup-strategy-when-running-home-assistant-in-docker/262539/27

##########
# CONFIG

# This has to be configured in an automation
HA_WEBHOOK=https://127.0.0.1:8123/api/webhook/backup-create-backup-123

# Configure the backups folder inside your config
LOCAL_PATH=/config # dans le référentiel du conteneur HA
HA_BACKUP_FOLDER=$LOCAL_PATH/backups
if [! -d $HA_BACKUP_FOLDER]
then
	LOCAL_PATH=/opt/docker/ha/config
	HA_BACKUP_FOLDER="$LOCAL_PATH/backups"
fi

# Configuration of rclone
# rclone path where the backups will be sent
BACKUP_FOLDER=/opt/docker/ha/config/backups 
REMOTE_BACKUP_FOLDER="Gdrive:/Home_Assistant/backups"
# RClone Auth id
RCLONE_USER=G
RCLONE_PW=xxxxxxxx

# Configure the maximum time the script waits for the backup to complete
WAITING_TIME=20

# my log file
LOGFILE=$LOCAL_PATH/generate_backup.log

touch $LOGFILE
echo "${DATE_STRING} Demarrage du script" >$LOGFILE
echo "LOCAL_PATH=${LOCAL_PATH}" >>$LOGFILE
echo "HA_BACKUP_FOLDER=${HA_BACKUP_FOLDER}" >>$LOGFILE

##########
# START HA BACKUP
#DATE_STRING=$(date +%Y-%m-%d)
DATE_STRING=$(date +"%F_%T")

//echo "$(date) Script generate_back.sh Starting."
echo "Verification du repertoire Backup..." >>$LOGFILE
if [! -d ${HA_BACKUP_FOLDER}]; then echo "HA_BACKUP_FOLDER is not set" >>$LOGFILE && exit 75; fi

echo "Sending generate backup to backup hook..." >>$LOGFILE
curl -v \
	--cert /etc/letsencrypt/live/rosine33.duckdns.org/fullchain.pem \
	--key /etc/letsencrypt/live/rosine33.duckdns.org/privkey.pem \
	--insecure \
	-d '{"data":"'${DATE_STRING}'"}' \
	-H "Content-Type: application/json" \
	${HA_WEBHOOK} \
	>> $LOGFILE

echo "Waiting for the backup to be generated... for ${DATE_STRING}" >>$LOGFILE
attempt=1
until cat "${LOCAL_PATH}/home-assistant.log" | tail -n 10 | grep -q "Backup created for date: ${DATE_STRING}"; do
    if ["$attempt" -ge "$WAITING_TIME"]; then
        echo "Timeout reached after $WAITING_TIME attempts. Abort!" >>$LOGFILE
	echo "Contenu de ${LOCAL_PATH}/home-assistant.log" >>$LOGFILE
	cat "${LOCAL_PATH}/home-assistant.log" >>$LOGFILE
        exit 75
    fi
    let attempt++
    sleep 1
done

echo "Nettoyage des vieux Custom Backup..." >>$LOGFILE
declare -a LIST_FILES
LIST_FILES=(`ls -t1 ${HA_BACKUP_FOLDER}/Custom_backup_*.tar`) #creer un tableau
rm -f ${LIST_FILES[@]:3} &>>$LOGFILE

echo "Config backup done for ${DATE_STRING}" >$HA_BACKUP_FOLDER/backup.log

echo "Sending backup to backup server with Rclone RC..." >>$LOGFILE
JSON='{
"srcFs":"'"${BACKUP_FOLDER}"'",
"dstFs":"'"${REMOTE_BACKUP_FOLDER}"'"
}'

curl -v \
        --cert /etc/letsencrypt/live/rosine33.duckdns.org/fullchain.pem \
        --key /etc/letsencrypt/live/rosine33.duckdns.org/privkey.pem \
        --insecure \
        -H "Content-Type: application/json" \
        -d "${JSON}" \
	--user "${RCLONE_USER}:${RCLONE_PW}" \
        'https://rclone:5572/sync/sync' \
        >> $LOGFILE 2>&1
RETOUR=$?

if [$RETOUR != 0]
then
	echo "curl error code '$RETOUR'" >>$LOGFILE
	man curl | grep "^ \+$RETOUR \+" >>$LOGFILE
	exit 75
fi

echo "Config backup done for ${DATE_STRING}" >>$LOGFILE
/home/Gilles/scripts/email.sh 'Generate_backup.sh' 'Success!' >>$LOGFILE

echo "$(date) Script generate_back.sh successfully executed."
exit 0

```

Ce script fait appel a mon script `email.sh` dans mon répertoire home. Pensez à corriger le chemin 🙂  
Pensez a faire `sudo chmod +x generate_backup.sh` pour le rendre executable.  
Pour tester le script dans les condition de Watchtower il faut rentrer dans la conteneur HomeAsistant ainsi :

```auto
docker exec -it homeassistant sh
./generate_backup.sh
exit # pour sortir du conteneur

```

Tous les log sont stockés dans `/opt/docker/ha/config/generate_backup.log`

Ce script envoit une demande à HomeAssistant via la plateforme _webhook_. Il faut donc créer le script correspondant dans HomeAssisant :

```auto
alias: "Backup: Create backup hook"
description: ""
triggers:
  - allowed_methods:
      - POST
    local_only: true
    webhook_id: backup-create-backup-123
    trigger: webhook
conditions: []
actions:
  - action: system_log.write
    metadata: {}
    data:
      level: warning
      message: "Creating backup... "
  - action: backup.create
    data: {}
  - action: system_log.write
    metadata: {}
    data:
      level: warning
      message: |
        Backup created for date: {{ trigger.json.data }}
mode: single

```

---

<div class="post-metadata">

**Author:** ![Gandalf77bo](https://forum.hacf.fr/user_avatar/forum.hacf.fr/gandalf77bo/32/119391_2.png) [@Gandalf77bo](https://forum.hacf.fr/u/Gandalf77bo)\
**Post date:** [Décembre 29, 2025, 11:20 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/19 "2025-12-29T11:20:15Z")

</div>

**Mettre un reverse Proxy ??**

A voir dans le futur :^^

---

<div class="post-metadata">

**Author:** ![pctetra](https://forum.hacf.fr/user_avatar/forum.hacf.fr/pctetra/32/78077_2.png) [@pctetra](https://forum.hacf.fr/u/pctetra)\
**Post date:** [Décembre 29, 2025, 12:31 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/20 "2025-12-29T12:31:12Z")

</div>

Bonjour  
sans minimiser ton travail et merci pour le partage, Home Assistant sous docker intégrant nativement les sauvegardes locales ou/et vers un NAS ou/et Google Drive, c’est beaucoup de surcouches qui peuvent être source de problèmes, J’ai fait récemment une migration HAOS vers docker et un retour vers HAOS il y a mois, ça se passe bien avec le système de sauvegarde native

---

<div class="post-metadata">

**Author:** ![bastgau](https://forum.hacf.fr/user_avatar/forum.hacf.fr/bastgau/32/46175_2.png) [@bastgau](https://forum.hacf.fr/u/bastgau)\
**Post date:** [Décembre 29, 2025, 9:22 UTC](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216/21 "2025-12-29T21:22:00Z")

</div>

Gérer les sauvegardes ainsi que pour HA, il y a peu d’intérêts effectivement, par contre en considérant qu’il y a d’autres données à sauvegarder concernant d’autres containers, cela permet d’avoir un seul et unique système de backup.

Par contre toute la difficulté est de sauvegarder proprement tout cela (portainer par exemple qui lock sa base de données durant son exécution).

[Page suivante](https://forum.hacf.fr/t/migration-haos-vers-home-assistant-docker/72216.md?page=2)
