Bonjour,
Ce tuto a vocation à aider ceux d’entre vous qui voudraient se lancer dans la formidable aventure du développement ou qui ont déjà sauté le pas, mais galèrent avec Notepad++ FTP et la multiplication des outils nécessaires à éditer et copier les fichiers sources - je suis passé par la aussi, c’est fastidieux…
Aujourd’hui on peut développer et débugger jeedom avec uniquement 2 logiciels à installer, et cerise sur le gâteau c’est possible directement sous Windows, donc oui on va installer jeedom sous Windows! ça reste du DEV donc je ne garantis pas le fonctionnement optimal de tous vos plugins, mais en tout cas pour le core, c’est bien.
Allergiques à la ligne de commande, ce tuto est pour vous
Prérequis
Pour Docker en particulier il faut un PC récent et assez costaud (indiqué dans la procédure d’installation, Windows 10 64-bit: Home or Pro 2004 (build 19041) or higher, or Enterprise or Education 1909 (build 18363) or higher WSL2 activé, 4GB de ram …)
Je ne détaille pas l’installation, c’est assez standard, télécharger / exécuter / … laisser les options par défaut normalement il n’y a pas de piège.
Les 2 logiciels sont également disponible pour Linux & Mac, je ne l’ai testé que sous Windows.
Installation
Il s’agit maintenant de configurer l’environnement de travail, et faire venir les containers docker.
La configuration se trouve dans ce dépot git à cloner, ça doit être possible avant même d’installer la moindre extention sur VSCode :
Cloner un dépôt, et coller cette URL:
GitHub - pifou25/docker-jeedom: Docker config for Jeedom
Pour Visual Studio Code, nous devons ajouter quelques plugins nécessaires, les extentions :
c’est cette icône ou le raccourcis ctrl+maj+x
Une fois le dépôt cloné, VSCode vous proposera peut être automatiquement certaines extensions, sinon vous devez les rechercher:
- PHP Debug
- PHP Intelephense
- Docker
- …
AVANT de lancer la machine Docker, il faut copier le fichier .env.default en .env et le modifier - ou pas : il contient des variables (user et mot de passe SQL pour Jeedom) vous pourrez laisser les valeurs par défaut pour du test, du moment que le fichier .env existe.
Vous pouvez aussi créer un répertoire backup
et mettre un backup de Jeedom (zippé au format tar.gz) celui-ci sera installé au premier démarrage du container docker.
Démarrage
On va maintenant démarrer l’étape de création et exécution des containers Docker, il y en a 4 :
jeedom
: serveur apache-php + les extentions PHP nécessaires et en particulier XDebug.mariaDb
PhpMyAdmin
premoweb/chadburn
pour le container qui émule la fonctionnalité du ‹ cron ›
Vous n’avez pas besoin de comprendre tout ça, grâce à VSCode le démarrage se fait en 1 clic droit sur le fichier docker-compose.yml celui à la racine du projet, puis dans le menu contextuel : compose up
(c’est l’équivalent de la commande docker-compose up -d
en ligne de commande mais je vous avais bien dit qu’on n’aurait pas besoin d’écrire une ligne )
Attendre le temps qu’il faut, pendant ce temps vous pourrez ouvrir Docker Desktop si ce n’est déjà fait pour observer les containers se créer.
Dans VSCode dans l’onglet Docker vous devriez voir ceci:
et quelque chose de similaire dans Docker Desktop
Lorsque le container jeedom est vert, il doit encore lui même faire une installation (clone Jeedom dans le répertoire du même nom, initialisation de la db ou restauration du backup c’est selon)
Lorsque c’est terminé, vous avez donc le répertoire jeedom qui contient le code source de jeedom-core. Et vous pouvez jouer avec votre jeedom en local sous windows: http://localhost
Debug
Plusieurs possibilités pour débugger:
- Vous mettez un « point d’arrêt » sur la ligne à débugger : ex, dans le fichier index.php je met un point d’arrêt au tout début - au moins, je suis sûr d’y passer : c’est le petit point rouge devant les numéros de ligne
- ou alors, j’ai une erreur php à débugger, un plantage quelconque, mais je ne sais pas où il plante, et dans ce cas je vais directement dans l’onglet Debug, le petit insecte
et dans le cadre d’en bas, je sélectionneErrors
etExceptions
:
ET, dans les 2 cas je lance le débuggeur ‹ listen fox Xdebug › , la configuration pour cela est dans le .vscode/launch.json que VSCode devrait trouver tout seul :
Une fois démarré, XDebug propose une barre d’outils pour faire pause, avancer d’1 pas, entrer dans une procédure, sortir, ou recommencer. Et arrêter XDebug.
Donc, aller sur votre navigateur et recharger la page, et hop! XDebug prend la main et intercepte la requête (qui ne s’affiche donc pas dans le navigateur). Dans VSCode, cliquer sur la ‹ pile des appels › sur la ligne en pause (sur breakpoint, ou bien sur exception) :
C’est normal qu’il y ait plusieurs request en même temps, ça peut être des requêtes ajax en parallèle, ou même un cron qui tourne.
Exemple d’exception interceptée:
En laissant mon curseur au dessus de la variable $path je peux vérifier sa valeur. Mais, comme si ça ne suffisait pas, toujours en pause je peux inspecter l’ensemble des variables et leurs valeurs, dans le cadre de gauche:
Et si je veux savoir pourquoi on est dans cette fonction avec ces paramètres, alors dans la pile d’appels je clique sur la ligne précédente, c’est donc la fonction jeedomCoreAutoload qui est dans le fichier core.inc.php en ligne 55, ce clic va ouvrir le fichier sur la bonne ligne, et mettre à jour la liste des variables et leurs valeurs dans le cadre supérieur.
On peut ainsi remonter dans la pile des appels, jusqu’au {main} - sur cette exemple c’est jeeCron c’est donc une requête du cron qui a été interceptée. On peut aussi débugger de la même manière un plugin, il suffit de l’avoir installé au préalable, et mettre le point d’arrêt qui va bien.
On peut éditer en direct le code - c’est fait pour ça - il n’y a pas besoin de relancer ni le container docker ni le debugger, juste rafraichir le navigateur pour relancer la requête.
Conclusion
Il n’y en a pas.
A noter quand même que Jeedom + Xdebug activé est très long, ce qui est normal puisqu’il tente de joindre XDebug à chaque requête. Et ça génère des tonnes de log (http.error, xdebug, cron_execution)
Je cherche maintenant à faire la même chose pour python, car c’est assez fréquent d’avoir des plugins en python et c’est pénible à débugger (si quelqu’un a la solution je suis preneur)
J’ai fait le tuto de mémoire, comme j’ai déjà tout installé - et bien d’autres choses pas forcément utiles - n’hésitez pas à me dire que ça a marché du 1er coup si vous testez la manip, ça me fera plaisir