Ma nouvelle installation en conteneur
Domoticz Transfert facile vers Docker ou nouvelle installation sur Docker
un lien pour comprendre "Docker": https://guillaumebriday.fr/comprendre-et-mettre-en-place-dockerJ'utilise Proxmox pour installer mes serveurs sur des machines virtuelles mais l'installation de Docker sur Debian 11 est la même que pour une machine réelle. J'ai créer une nouvelle VM pour Domoticz-Docker , il suffira ensuite de transférer facilement la VM Domoticz vers cette nouvelle VM. Créer une nouvelle VM ou installer un nouveau système impose parfois de réinstaller des logiciels ou des modules necessaires pour les scripts perso utilisés par Domoticz dans ce cas il faut reconstruire l'image, voir cette page .; j'ai essayé d'installer des modules python sur python 3.9 du système mais je n'ai pas réussi à appelé les scripts utilisant ces modules depuis lua de Domoticz ; Les différentes étapes: - Pré-requis : une installation minimum de Debian bullseye - installation de Docker Engine- installation de Docker-Compose - facultatif : installation de PORTAINER- téléchargement de l'image de Domoticz et affichage- Migration: transfert entre machines Domoticz
Installation de Docker Engine Installer SUDO
pour les droits grand sudo :
Ou :
Configurer le référentiel
Télécharger la clé GPG officielle de Docker :
- Le canal Stable vous fournit les dernières versions pour une disponibilité générale.- Le canal Test fournit des versions préliminaires prêtes à être testées avant la disponibilité générale.- La chaîne Nightly vous donne les dernières versions du travail en cours pour la prochaine version majeure.Utiliser cette commande pour configurer le référentiel stable :
Installer la dernière version de Docker Engine
Vérifiez que Docker Engine est installé correctement :
Mettre à niveau le moteur Docker et installer des dépendances
Pour désinstaller Docker Engine
Pour supprimer toutes les images, conteneurs et volumes :
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
Installation de docker compose- Avec curl ou avec pip3Vérifier la dernière version disponible : https://docs.docker.com/compose/install/ remplacer la version dans la commande curl.
avec curl
avec pip3
vérifier que l’installation de docker compose a bien fonctionné ,afficher le numéro de version :
Installation de PORTAINERNon Indispensable Portainer est une interface Web open source qui permet de créer, modifier, surveiller des conteneurs Docker.Installer l'interface graphique
Avec le navigateur : http://IP du SERVEUR avec DOCKER:9000
Créer l’utilisateur
Récupérer l’image de Domoticz et la lancer Récupérer l'image sur Docker Hubhttps://hub.docker.com/r/domoticz/domoticzhttps://www.domoticz.com/wiki/Docker
afficher la liste des images Docker sur le système
informations détaillées sur l’image domoticz
Lancer Domoticz :En mode interactif ( pour faire un essai); pour continuer d’utiliser le shell mieux vaut lancer Domoticz avec docker-compose (voir ci-après)- pour le port 8082 : -p 8082 :8080
Lancement avec docker-compose:
Configuration de docker-composele fichier : /opt/domoticz/docker-compose.yml
version: '3.3' services: domoticz: image: domoticz/domoticz container_name: domoticz restart: unless-stopped # Pass devices to container # devices: # clé zwave # - "/dev/serial/by-id/usb-0658_0200-if00:/dev/ttyACM0" ports: - "8080:8080" volumes: - ./config:/opt/domoticz/userdata environment: - TZ=Europe/Paris #- LOG_PATH=/opt/domoticz/userdata/domoticz.log
Démarrer Domoticz:
L'option -d lance en daemon, le unless-stopped (Restart dans la configuration) qui rend le programme permanent même au reboot machine.
Stopper DomoticzPar défaut, sont supprimées : https://docs.docker.com/compose/reference/down/ - Conteneurs pour les services définis dans le fichier Compose - Réseaux définis dans la section du fichier Composenetworks - Le réseau par défaut, s’il est utilisé
Accès au fichier log
Quelques commandes DockerSupprimer une imagesudo docker rmi ID_IMAGE si l’image est utilisée : -f=force sudo docker rmi -f ID_IMAGEStopper containersudo docker stop <ID>Liste des conteneur: sudo docker -ps -astopper ou supprimer tous les conteneurs: docker stop $(docker ps -a -q) docker rm $(docker ps -a -q) href="https://geekflare.com/fr/docker-commands/" target="_blank">https://geekflare.com/fr/docker-commands/
Au premier lancement de domoticz , les répertoires et fichiers persistants:
Pour pouvoir transférer la BD avec Filezilla, modifier les droits avant de relancer Domoticz; il est aussi possible le faire une restauration depuis Domoticz : ->Paramètres-->Sauvegarde/Restauration.
Migration de DomoticzC’est l’occasion de faire le ménage dans les scripts par exemple :
La Base de donnéesDès le transfert de la BD , seul le réseau ZWave n’est pas transférer car la clé n’est pour l’instant pas ajouter sur la machine dockerSi vous avez un réseau Zigbee2mqtt , il en sera de même.Affichage avec Filezilla:
La BD se trouve dans le répertoire "/opt/domoticz/config", pour la transférer : - soit faire une restauration à partir du logiciel ->paramètres->Sauvegarde/Restauration - soit copier la sauvegarde de la BD avec Filezilla (avant de lancer Domoticz)La page matériel de Domoticz:
Le contenu du dossier "plugins" est à transférer dans le dossier /opt/domoticz/config/ crée lors de l'installation. les dossiers exemples et AwoxSMP ne sont pas à transférer , ils existent déjà dans :
Les EvènementsLes modifications pour les différents tyopes de scripts , Lua, DzVents, Python, ....
les script LUA
Ils sont enregistés dans la base de données , ils sont donc fonctionnels après transfert de la BD mais ,Si les variables sont stockées dans un fichier comme par exemple:
..... il faut: - soit indiquer le bon chemin dans docker-compose :sudo nano /opt/domoticz/docker-compose.yml
- soit indiquer le chemin réel dans le script Lua :
Autre solution , si les fichiers lua doivent être appelé depuis un site distant , voir le paragraphe concernant le serveur web www
les scrips dzventsles scripts de la version normale sont stockés dans : ~domoticz/scripts/dzVents/generated_scripts
Il doivent être ajoutés dans "config/scripts/generated_scripts" dans la version docker ; modifier les droits si necessaire. ces scripts peuvent s'ajouter automotiquement si ce dossier existe au reboot ou lors d"une mise à jour d'un script évènement
Les scripts utilisant json en lua :Il suffit de modifier le lien de JSON.lua dans les scripts
Le lien devient pour domoticz-docker:
On peut utiliser le lien relatif :
Si dans la version classique le lien relatif était utilisé , il n'y a pas de modification à faireà la condition de ne pas créer un volume scripts:/opt/domoticz/scripts" le répertoire "scripts" crée précédemment pour dzVents devra contenir les sous répertoires pour les scripts perso si un volume était crée il effacerait le volume "scripts" existant;il faudrait dans ce cas copier JSON.lua dans un répertoire /opt/config/scripts/lua - sur cet copie d'écran le chemin de JSON.lua
Remarque: docker exec -it NOM CONTENEUR bash est la commande utilisé pour accéder au shell docker
les scripts python perso : Créer un dossier - soit :/opt/domoticz/scripts/python (dans ce cas on écrase le fichier "scripts" de Domoticz (si on n'utilise aucun de ces scripts ça n'a pas d'importance, c'est beaucoup d'exemples) - soit :/opt/domoticz/config/scripts/python (il n'y a pas de volume à créer)des explications sur le choix du Volume dans cette page
Ajouter dans docker-compose.yml pour créer un Volume ./script: (décommenter la ligne)
exemples:
Ne pas oublier les scripts dans les dispositifs:
mon script "mqtt.py" utilise le module python paho-mqtt
il faut ajouter l'installation de ce module dans Dockerfile
modifier les droits des fichiers si necessaireRemarque Comme indiqué , au début de cet tuto, si des modules python sont nécessaires,par exemple pour mes besoins: - fabric pour l'envoi des données sur un site distant - periphery pour la liaison série avec un Raspberry. Il faudra reconstruire l'image , voir cette page .
Après reconstruction :des scriprts python peuvent être appelés depuis un script bash, dans ce cas il faut vérifier les liens , exemple pour ce fichier .sh :
Des problèmes peuvent survenir , comme avec fabric2,j'ai du , sous shell docker désinstaller et réinstaller Fabric NE PAS UTILISER "install FABRIC2"cette situation peut peut-être se produire avec d'autres modules
pour éviter de reinstaller Fabric dans le conteneur, ajouter l'install de Fabric dans Dockerfile
les scripts bash : Comme pour python ,créer un dossier /opt/domoticz/scripts/bash ou /opt/domoticz/config/scripts/bash Dans la version linux , je plaçais les scripts bash dans ~domoticz/scripts, pour faire plus propre j'ai crée un dossier spécifique La procédure est la même que pour python : on crée un répertoire bash dand "scripts" docker-compose.yml:
l'interpréteur bash, dans le conteneur, se trouve dans /bin/bash comme pour les autres script , on peut utiliser le lien relatif:
On peut aussi utliser un autre interpréteur , celui du système en créant un Volume ./bash:/usr/bin/bash
Si l'image doit être reconstruite, on peut créer un lien symbolique : ln -s /source /destination
les script node.js : Pour les scrips externes la procédure est toujours la même mais pour node.js , à la condition qu'il soit installé. Ce n'est pas le cas dans l'image docker officielle ....il faut construire l'image en intégrant Node à partir de cette nouvelle image, comme pour python et bash :- créer un dossier /op/domoticz/config/scripts/js - la config docker-compose ne change pas car le volume scripts prendra en charge le repertoire js
On vérifie que les modules sont installés: sudo exec -it <ID CONTERNEUR> bash
Pour afficher les notifications sur le téléviseur , j'ai du modifier le fichier index.js du module lgtv(ce fichier n'existe plus sur l'App "Danovadia/lgtv-http-server" , qui n'ést plus maintenue ,elle est disponible sur mon référentiel: https://github.com/mgrafr/lgtv_notifications), il faut donc l'installer dans l'image :pour cela , comme on est tojours sous docker shell: - copier index.js dans /opt/domoticz/config avec Filezilla; plus d'infos sur la page consacrée à la notification TV on peut aussi ajouter ce fichier lors de la construction de l'image docker avec COPY , c'est la meilleure solution.(il faut placer ce script dans le répertoire de Dockerfile)Dans le Dockerfile- copier depuis le shell index.js vers LGTVcp userdata/index.js node_modules/lgtv/Pour faire un essai en shell:- copier le fichier new1.js dans /opt/domoticz/config- lancer la commande: node new1.js
exit , on quite docker shellun nouvel essai dans Domoticz et le script LUA: node new1.js ....
Le fichier définitif notification_tv.js remplacera new1.js
les appels Curl :Pas de modification à apporter, fonctionne correctement
Les fichiers externes au conteneur communiquant avec Domoticzc'est le cas de ma liaison série entre le Raspberry et le mini PC - Python est installé dans le conteneur mais il faut installé également une version sur le serveur - j'ai mis ces scripts (en python) dans le dossier config/scripts/python de Domoticz
- modifier l'adresse 127.0.0.1 (appel de l'API Domoticz) par localhost ( j’ignore pourquoi , peut-être parce que l'IP de Domoticz-docker est 172.20.0.2 et non 127.0.0.1 et localhost utilise la bonne IP ? )
- modifier le lien pour le démarrage auto de systemd:
- modifier dans les scripts les chemins si ils ont changé
L'accès distantNe pas oublier de modifier l'IP dans la configuration de NGINX ou APACHE
Eviter les erreurs:Des erreurs dues aux scripts externes peuvent survenir;si des liens existent dans ces fichiers, il faut également les modifierexemples:
Sous Debian 11 c'est Python 3.9 , sous Domoticz-docker c'est python 3.7 qui est installé:
Vérifier le Sheband:
Le serveur WEB :www
Le lien pour docker-compose :
Essai avec une page nommée essai.html, Le lien est donc : ./www/essai.html:/opt/domoticz/www/essai.html
Le dossier modules_lua (contenant des fichiers pouvant être appelés en http(s) distant)
Dans domoticz docker :
La config docker-compose dans ce cas :
Affichage d’un fichier :
Dans le script lua :
Les fichiers log :J’enregistre dans la version normale tous les fichiers log dans mon répertoire perso /home/michel
Pour ne rien changer ajouter dans la config docker-compose :./log:/home/michelet creer le répertoire log
Pour choisir un autre répertoire, exemple
Le Reseau ZWave :Dans le container docker Domoticz c'est la version OZW (OpenZWave) qui est installé.Pour faire un essai , au lieu d'utiliser la passerelle du Domoticz-linux, j'ai utilisé un clone de la clé USB , ce qui m'a permis de constater le bon fonctionnement des copies de clé ZWave. Tous les appareils existent dans la BD de Domoticz , il suffit de connecter la passerelle, la clé USB.Pour trouver le port de la passerelle :
Config docker-compose :
On relance Domoticz
J'ai 2 installations de Domoticz qui tournent, avec les mêmes dispositifs ,et cela sans problèmes majeurs (la 2eme clé est un clone de la 1ère ce qui peut l'expliquer); ce qui ne fonctionnait pas au début , ceux sont les scripts qui utilisent des modules Python ou Node, mais c'était normal car ces modules ne sont pas installés dans le container domoticz. Sur Domoticz-docker, seuls les dispositifs sur secteur sont mis à jour , les dispositifs sur piles doivent être réveillés J'étudie un transfert vers Zwavejs2mqtt et non OZW de Domoticz, Domoticz recevant les données par mon serveur MQTT . Si j'avais utilisé ZWaveJS2Mqtt , comme je l'ai fait avec Zigbee2mqtt ,le transfert aurait été plus simple et donc les mises à jour à venir également plus faciles
CONCLUSION:A part quelques autorisations que j'ai du modifier , pour les répertoires et fichiers persistants (copiés avec Filezilla), la migration a été facile; le fonctionnement est rapide, sans problème , similaire à l'installation d'origine Pour les scripts qui ne fonctionnent pas à cause des modules, je j'ai construis une nouvelle image à partir de l'image officielle en intégrant ces modules; c'est l'objet du tuto sur cette page. Le seul problème , toujours le même, quelque soit l'installation , les nœuds endormis qu'il faut réveiller ; en cas de coupure sur Domoticz classique, ça m'est souvent arrivé de devoir le faire , c'est pourquoi j'ai utilisé un clone de la clé USB (j'ai éviter l'arrêt de la VM).
crée le 16/02/2022maj 26/02/2022 ajout remarque concernant les scripts python et compléments pour node maj 05/03/2022 ajout explicationsmaj 31/03/2022 scripts externes au conteneur (localhost) et accès distant