jeedom / core

Software for home automation
https://www.jeedom.com
GNU General Public License v2.0
386 stars 314 forks source link

Docker image #2630

Open fred-gb opened 3 months ago

fred-gb commented 3 months ago

Bonjour đŸ‘‹đŸ»

Suite Ă  message sur le forum: https://community.jeedom.com/t/jeedom-avec-nomad/125913/4?u=fredgb

Votre demande de fonctionnalité est-elle liée à un problÚme ? Veuillez le décrire. Non

DĂ©crivez la solution que vous souhaitez Serait-ce possible de modifier l'image docker de jeedom avec:

Décrivez les alternatives que vous avez envisagées Pour le port Apache à exposer, j'ai surchargé le fichier /etc/apache2/ports.conf et /etc/apache2/sites-enabled/000-default.conf avec des ports différents puis j'ai exposé dans le port correspondant dans mon processus de déploiement. Ou encore utiliser des bridges différents pour le déploiement.

Pour le mot de passe admin. J'utilise une tasks ansible aprÚs déploiement qui consiste à changer le mot de passe, comme sur la documentation, comme cela:

  - name: "Configure admin"
    community.docker.docker_container_exec:
      container: "jeedom"
      command: su -s /bin/sh www-data -c 'php /var/www/html/core/php/jeecli.php user password admin NOUVEAU_MDP'

Contexte supplémentaire Pas vraiment de contexte supplémentaire.

Juste pour expliquer le pourquoi cette demande. Quand je dĂ©ploie avec Docker, obliger le port 80 sur un host oĂč il y a dĂ©jĂ  un reverse proxy qui tourne, cela peut-ĂȘtre bloquant. Et pour le mot de passe, pour Ă©viter des Ă©tapes manuelles.

Je crois qu'il s'agit de Monsieur @zoic21 aux commandes de la Dockerisation. Bon courage pour la nouvelle version en 2 services que j'attends avec impatiente!

Merci!

pifou25 commented 3 months ago

Bonjour,

Docker te permet de lancer autant de containers que tu veux sur le port 80, tant qu'il n'est pas exposĂ© Ă  l'extĂ©rieur ce n'est pas gĂȘnant :) les container peuvent discuter entre eux en s'adressant par leur nom de service + port, donc pas de conflit. Ton reverse proxy utilise le port 80 pour l'exposer Ă  l'extĂ©rieur, pas Jeedom. C'est ce qu'on fait (j'utilise nginx-proxy-manager et Jeedom est bien sur le port 80) Et s'il est exposĂ© Ă  l'extĂ©rieur, alors tu peux le mapper sur un autre port: docker run -p 8080:80 jeedom/jeedom

La 2e option est intéressante ça serait pratique dans le process d'installation. Une autre option que j'ai déjà tenté c'est la restauration automatique d'un backup quand tu lance l'image, tous les secrets sont déjà dans le backup.

edgd1er commented 3 months ago

Depuis 5 ans, je maintiens un projet de jeedom sous docker qui contient peut ĂȘtre quelque piste pour l'image "officielle". https://hub.docker.com/r/edgd1er/jeedom-rpi le projet github rattachĂ©: https://github.com/edgd1er/jeedom-rpi/

les différences avec l'image officielle:

les mises a jours du conteneur peuvent se faire de deux maniĂšres.

fred-gb commented 3 months ago

Bonjour @edgd1er

Merci pour cette courte présentation, c'est fort intéressant. Effectivement, des éléments seraient bons à étudier!

Merci @pifou25 pour tes explications. Es-tu sûr que la redirection de port est valable en mode network host? Pas sûr, mais je peux me tromper. C'est pour cela que je demandais ce changement, car je pense que Jeedom doit pouvoir scanner le réseau pour découvrir. ConfÚre mon message sur le forum.

Bonne journée!

pifou25 commented 3 months ago

@fred-gb pas nĂ©cessaire le mode host, du moins pas pour le core; je fonctionne en mode normal pour docker (le bridge) mais c'est peut ĂȘtre requis pour certains plugins alors ? Dans ce cas en effet pas possible de mapper un port, ton container est directement et complĂštement exposĂ© sur le rĂ©seau, ce n'est pas utile d'avoir un proxy du coup. Mais vĂ©rifie que ce soit vraiment utile, sinon certains utilisent le mode macvlan voir tuto community

@edgd1er merci pour ton projet que je connais bien, il m'a été d'une grande aide et source d'inspiration quand j'ai commencé à passer sur Docker / rpi. Il est trop spécifique je trouve, avec des traitements spécifiques aux plugins que tu utilise. Mais tu devrais reporter certaines des fonctionnalités sur le core (healthcheck, redirection des logs, https, ...?)

fred-gb commented 3 months ago

@pifou25 Ça y est j'ai compris, tu veux me faire pleurer! 😱 Tu n'as toujours pas lu mon message sur le forum... Sinon tu n'aurais pas rĂ©pondu ce que tu as rĂ©pondu.

edgd1er commented 3 months ago

@edgd1er merci pour ton projet que je connais bien, il m'a été d'une grande aide et source d'inspiration quand j'ai commencé à passer sur Docker / rpi. Il est trop spécifique je trouve, avec des traitements spécifiques aux plugins que tu utilise. Mais tu devrais reporter certaines des fonctionnalités sur le core (healthcheck, redirection des logs, https, ...?)

@pifou25 , Je suis content que cela ai pu t'aider. j'ai beaucoup travailler pour reduire le nombre de couches et donc la taille, et avoir un paramétrage fait par les variables d'environnements. Les seules parties spécifiques sont dans extras.sh qui se déclenchent uniquement avec des variables d'environnements définies a 1 (d'ailleurs je me suis rendu compte d'un problÚme). extras.sh corrige les problÚmes du plugin pushbullet dont les demons ne démarrent plus, du plugin meross qui a des pb de dépendances et du plugin zwave auquel j'ajoute un fonctionnement sur un conteneur externe zwavejs. D'ailleurs ce serait bien si le plugin le proposait a l'image de ce qui est fait avec le plugin mttq manager (broker externe), mais ce n'est pas le lieu pour en parler.

# install dependancies
E_DEP=0
# fix meross installation
E_MEROSS=0
# fix pushbullet
E_PUSH=0
# force zwave-ui as external container + version
E_ZWAVE=0

Quand a faire des PR pour l'image "officielle" ça serait bien, mais j'ai malheureusement assez peu de temps en ce moment. rien ne t’empĂȘche de piocher des idĂ©es, la plus importante pour moi serait d’intĂ©grer un ordonnanceur (supervisorctl, tini, s6-overlay) pour pouvoir arrĂȘter proprement le conteneur ( gestion du pid 1) et gerer les process zombies: https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/ https://github.com/krallin/tini

J'ai commenté le init.sh en indiquant pourquoi je supprimais ou modifier certaines étapes du docker_install.sh :)

pifou25 commented 3 months ago

@pifou25 Ça y est j'ai compris, tu veux me faire pleurer! 😱 Tu n'as toujours pas lu mon message sur le forum... Sinon tu n'aurais pas rĂ©pondu ce que tu as rĂ©pondu.

@fred-gb Alors, oui j'ai lu, mais je n'ai rien compris, je ne suis pas DevOps et connais pas la plupart des logiciels que tu cite :D Mais pour moi, c'est lié à un plugin de Jeedom ou sinon je ne vois pas l'utilité du mode host ?

D'ailleurs ce serait bien si le plugin le proposait a l'image de ce qui est fait avec le plugin mttq manager @edgd1er il y a un sujet sur le community et une PR pour cela : https://community.jeedom.com/t/option-daemon-docker-distant/120417/23?u=pifou perso je n'utilise pas ce plugin, mais si toi oui, tu peux confirmer que ça fonctionne (sur le topic) D'ailleurs, pour les autres problĂšmes que tu corrige manuellement sur ton image, ça mĂ©riterait peut ĂȘtre une PR sur le plugin correspondant non ?

Hotfirenet commented 1 month ago

salut @fred-gb nous sommes ouvert a toute proposition, tu peux faire un PR lié a cette issue.

zoic21 commented 1 month ago

Bonjour, J'ai fait la partie mot de passe. La partie port apache est plus compliqué a faire surtout qu'il faut valider que c'est un port valide et tout ce qui n'est pas simple si quelqu'un veut s'y pencher c'est avec plaisir.

Pour info je suis loin d'ĂȘtre trĂšs bon dans docker (surtout sur la crĂ©ation des dockers) d'ou le faite que celui de Jeedom ne soit pas top, j'apprend petit a petit mais j'ai malheureusement pas le temps de m'y pencher pour de vrai et nous avons trĂšs peu de demande. En vrai je dĂ©conseille meme l'utilisation en mode docker (meme si c'est mon cas) car cela est compliquĂ© avec les Devices USB.

edgd1er commented 1 month ago

Bonjour

@fred-gb, l utilisation de ports autre que 80 et 443 avec un reverse proxy me parait bien particuliĂšre. Jvai une trentaine de conteneur sur mon rpi 4 dont jeedom et une petit dizaine avec une ui donc accessible via un reverse proxy. Vive le sni Si tu as besoin de changer le port c est que tu es en mode host ? Peux tu confirmer ? Aucuns des deux ajouts ne semble difficile a priori mais mon image docker est assez loin de celle de jeedom. Je vais voir ce que je peux faire.

fred-gb commented 1 month ago

Bonjour đŸ‘‹đŸ»

@zoic21 Merci pour la partie mot de passe, j'ai dĂ©jĂ  essayĂ© pour le port d'Apache il y a quelques semaines, mais dĂ©jĂ  la construction de l'image ne fonctionnait pas... Je pense que je n'ai pas tous les principes de base de l'image officielle Jeedom. J'avais mis en variable d’environnement pour le dĂ©marrage, je pensais ĂȘtre sur le bonne voie.

@edgd1er, je ne suis pas en mode host pour éviter de la collision de ports, j'utilise CNI pour pouvoir séparer l'IP: https://community.jeedom.com/t/jeedom-avec-nomad/125913?u=fredgb . Traefik en reverse proxy qui utilise Consul en provider. Merci

edgd1er commented 1 month ago

Bonjour @fred-gb ,

je suis allĂ© voir ton post, je connais vagrant dans les grandes lignes, mais pas du tout nomad. Quels sont pour toi les avantages de nomad par rapport au docker compose. j'imagine bien que nomad fait beaucoup plus que docker compose mais dans ce qui est utile ici, a savoir le lancement parametrĂ© de plusieurs conteneurs y a un intĂ©rĂȘt ? De mon cotĂ©, j('utilise jeedom sous docker depuis 5 ans avec un docker compose et traefik. il y a un provider docker pour traefik comme tu en as un avec consul. J'ai depuis longtemps sortie la bdd de l'image, mis un vrai gestionnaire de service pour gerer le pid 1. un init.sh est lancĂ© pour configurer les services selon les variables d'environnements. j'ai ajoutĂ© Ă©galement la clĂ© de chiffrement de la bdd, un restore n'est plus nĂ©cĂ©ssaire. il reste un aspect qui n'est pas completement gĂ©rer la rĂ©installation des plugins.

fred-gb commented 1 month ago

Bonjour đŸ‘‹đŸ»

A priori dans une installation de type "homelab", il n'y a pas d'avantages essentiels par rapport Ă  Docker compose. J'ai juste mes habitudes professionnelles avec cet outils, donc je l'utilise aussi chez moi. Nomad c'est un orchestrateur comme Kubernetes, donc plus avantageux avec un cluster.

Pour en revenir au sujet principal, j'imagine comme toi tu l'as fait, que ce soit du micro-service avec la base de donnĂ©e sĂ©parĂ©e. Voir mĂȘme php et apache. Et fournir Ă  la communautĂ© un docker-compose, bien "dĂ©composĂ©".

Bonne journée!

pifou25 commented 3 weeks ago

Bonjour @fred-gb nomad permet de mapper le port d'un container, comme tout bon orchestrateur qui se respecte: https://stackoverflow.com/questions/63601913/nomad-and-port-mapping on ne devrait donc pas surcharger le port par dĂ©faut du container, et, du reste personne ne fait ça (? en tout cas je n'ai pas vu d'image docker oĂč l'on pouvait surcharger la valeur d'un port http)

edgd1er commented 1 week ago

APACHE_HTTP(S)_PORT + ROOT_PASSWD + ADMIN_PASSWORD #2859 + diminution des layers de l'image: refusée car basé sur beta. la meme sur alpha: #2861

la PR a été accepté mais toutes les optims de place ont été supprimées.l' image revient a 1.2Gb.