Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker image #2630

Open
fred-gb opened this issue May 15, 2024 · 15 comments
Open

Docker image #2630

fred-gb opened this issue May 15, 2024 · 15 comments

Comments

@fred-gb
Copy link

fred-gb commented May 15, 2024

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:

  • La possibilité de choisir le port de Apache à exposer
  • La possibilité de choisir le mot de passe admin par une variable d'environement

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
Copy link
Contributor

pifou25 commented May 17, 2024

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
Copy link
Contributor

edgd1er commented May 17, 2024

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:

  • jeedom est installé lors du build (github)
  • la bdd est externalisée
  • supervisor est utlisé pour orchestrer les services pour permettre un arret propre via le pid 1
  • l'image est prete a l'emploi
  • l'image est basé sur bullseye-slim.
  • https est supporté.
  • les conf sensibles peuvent passés via les secrets docker.
  • il y a un healthcheck
  • redirection des logs sur le stdout du conteneur
  • plusieurs variables d'environnements sont ajoutés donc celle qui permet de définir la clé de chiffrement de données en bdd, utils lors des upgrades.

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

  • via jeedom et une mise a jour du system. inconvénient, le conteneur est géré comme une vm, ce n'est plus dans l'esprit docker.
  • via docker, en pullant une image. inconvénient, il faut re installer les dépendances des plugins. le script extras.sh prend en charge en partie cette etape.

@fred-gb
Copy link
Author

fred-gb commented May 18, 2024

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
Copy link
Contributor

pifou25 commented May 18, 2024

@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
Copy link
Author

fred-gb commented May 18, 2024

@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
Copy link
Contributor

edgd1er commented May 18, 2024

@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
Copy link
Contributor

pifou25 commented May 21, 2024

@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
Copy link
Contributor

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

zoic21 added a commit that referenced this issue Aug 7, 2024
@zoic21
Copy link
Contributor

zoic21 commented Aug 7, 2024

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
Copy link
Contributor

edgd1er commented Aug 7, 2024

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
Copy link
Author

fred-gb commented Aug 7, 2024

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
Copy link
Contributor

edgd1er commented Aug 7, 2024

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
Copy link
Author

fred-gb commented Aug 8, 2024

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
Copy link
Contributor

pifou25 commented Aug 17, 2024

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
Copy link
Contributor

edgd1er commented Aug 29, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants