-
Notifications
You must be signed in to change notification settings - Fork 317
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
Add .env file for database configuration #2887
base: alpha
Are you sure you want to change the base?
Conversation
39190c2
to
03a8b91
Compare
Bonjour, |
Le .env est un standard. |
Je vois pas trop l'interet on peut deja passer tout le parametrage en variable. C'est d'ailleurs ce qu'on fait nous chez jeedom pour tester le core. |
Pardon mais j’ai du mal a comprendre ta réponse. Je parle d’avoir un environnement de dev dans lequel on peut lancer les tests phpunit en utilisant un bdd différente que celle du dev. D’ailleurs si c’est possible, ça serait intéressant de documenter comment vous faites vos environnements de dev parce que la gestion des droits sur les fichiers est ingérable chez moi. |
Actuellement on a une action github pour le core qui s'occupe de checker que tout va bien en buildant le docker et en lancer le sick.php. C'est très léger mais ca suffit en général. Pour les plugins il n'y a rien si ce n'est une validation de la syntaxe. Après oui il y aurait un gros boulot pour mettre des vrais tests c'est sur mais malheureusement on a pas les moyens humain. Pour ta modification je suis mitigé je vois pas le but au final. C'est pour changer de BDD en changeant juste un fichier .env ? |
La configuration de base de donnée est une configuration d’environnement. Ce fichier permet de définir les variables d’environnement de ton application. Je te renvoi vers cet article https://www.armandphilippot.com/article/dotenv-variables-environnement si tu veux en savoir plus, mais c’est aujourd’hui plus que courament utilisé dans le dev, et pas que en PHP. C’est même directement pris en compte par docker-compose. |
Je parlerais que de l'image docker. Actuellement, le common.config.php est alimenté par les variables d'environnements, le docker compose quand il lit les variables d'environnements, les crée et les valorise dans le conteneur en execution. Ce qui permet justement de "brancher" le conteneur docker si differentes BDD, pour tester par exemple. Donc concernant l'image docker que les infos viennent du .env ou de la configuration de lancement de l'image c'est la meme. |
Le build crée le fichier ENV DB_USERNAME=jeedom
ENV DB_NAME=jeedom
ENV DB_PORT=3306
ENV DB_HOST=localhost Je ne les ai vu utilisée à aucun endroit. Ni dans le
C’est ce qui est fait (en tout cas j’ai gardé le même comportement par soucis de rétrocompatibilité) et actuellement les 2 fichiers co-existent, le |
Désolé, je fais court: le init.sh de l'image prend en charge la valorisation du fichier de conf bdd lors du lancement. core/install/OS_specific/Docker/init.sh Lines 98 to 103 in 685b1e3
Avec une erreur pour le mot de passe dans la master , mais avec une PR deja envoyé pour corriger l'ano: fix # |
On est d’accord que a part le mot de passe (préalablement généré), toute la config est en dur ? |
03a8b91
to
be7cea3
Compare
be7cea3
to
b9745f3
Compare
le common.config.php.sample contient des valeurs en dur qui sont changées par les sed pour obtenir un fichier de configuration. common.config.php Dans le cas du bare-metal ou vm, l'étape 9 de l'installation (install.sh) prend en charge la valorisation du fichier commong.config.php: step_9_jeedom_configuration : Lines 302 to 323 in 5de9f9c
Cependant, Je comprends le besoin simple de lancer des tests via des BDD de tests avec des jeux de tests différentiés et si le .env aide, cela va dans le bon sens. |
@zoic21 est-ce que ce qui te gène c'est juste la partie docker (que je peux supprimer ca n'aura pas d'impact) ou la MR en général ? |
J'ai juste pas encore eu le temps de tester, la charge est assez importante en ce moment et docker est vraiment critique (plus qu'un bug dans le core) donc je dois passer des heures a tester les moindres changements sur docker. |
Si ca peut te faire gagner du temps je peux virer la partie docker sans problème, c'était juste pour être plus clean. Je le répète, le common.config.php est toujours pris en compte tant qu'on surcharge pas avec un .env . J'ai bien fais attention a ne jamais rien casser pendant mon dev. |
Faut juste je test ton PR je peux pas le passer comme ca et la je suis complètement sous l'eau donc pas avant plusieurs semaines malheureusement, j'ai pris trop de truc dernièrement et je m'en sors plus. |
J'utilise déjà un fichier Il ne faut pas faire ça : déjà, tu conserve la même version du code, donc tu ne pourra pas switcher d'une instance prod / master à une autre pour le dev / branche alpha, par exemple. Le code sera le même et les plugins installés aussi... sans parler des packages installés, version debian & co... Il faudrait juste un fichier |
Je me suis déjà fait mon environnement comme tu le dis. L'objectif est surtout d'apporter un peu de standard et d'éviter d'avoir une config qui traine au milieu des dossiers. Le .env n'est pas specifique a docker, et dans le cas de cette pr ca permet aussi d'avoir un environement sans docker et de lancer des tests auto sur une bdd indépendante. C'est gentil pour le tuto mais je suis sous linux et vim. |
@pifou25 En tout cas tout tuto est très bien fait, j'espère qu'il pourra servir a d'autres dev ;) |
vim comme IDE pour développer en php / js ? c'est un peu limité, tu ne dois pas avoir beaucoup d'aide (je ne connais pas vim mais j'imagine) En tout cas si tu es sous linux tu n'a aucune excuse, VS Code existe aussi !! et null besoin de Docker Desktop, tu n'a qu'à installer le docker client & démon en ligne de commande c'est suffisant, je devrais refaire un tuto identique pour linux en fait ^^ |
Non, bien plus efficace que vscode, mais courbe d'apprentissage beaucoup plus longue.
Rassure-toi je connais très bien tout ça, et ce n'est pas l'objectif de la PR. |
@pifou25 si ca t'interesse, j'ai fais un dépot de mon environement. Le principe c'est de pouvoir agir sur le code en local via un volume docker et de pouvoir cloner plusieurs versions en paralelle (je m'en sert pas vraiment en realité mais ca fonctionne). Si ca peut te donner des idées pour ta PR. |
@kwizer15 Voila ma PR #2917 qui introduit un exemple de docker-compose.yml avec un fichier .env qui fait la même chose que cette PR. |
@pifou25 Qu'as-tu compris exactement du but de ma PR ? |
Oui tout à fait, tu déplace la configuration de la bdd qui est dans le fichier config.common.php dans un fichier .env c'est limpide, Mais on n'a pas besoin de faire cela si on utilise docker, et c'est pour ça que j'en parle. Dans l'autre PR celle sur les phpunit, on utilise docker donc on n'en a pas besoin. Pour Jeedom non plus, en fonctionnement normal on n'en a pas besoin. Au final ça complexifie le core pour rien, pour un besoin qui t'es propre, mais tu devrais juste te mettre à docker :) Je ne doute pas que ça peut marcher (j'ai pas testé mais ça semble bien) mais si on peut éviter... |
On peut s’arrêter là, c’est juste l’objectif, mettre la config de base de donnée là où elle doit être, dans les variables d’environnements, rien de plus, rien de moins.
Je suis d’accord, mais on sort du sujet
Effectivement mais cette PR permet de le faire simplement. De plus, les tests sont censé pouvoir fonctionner indépendament de ton env de dev (quel qu’il soit). Et là sans cette PR (ou en tout cas sans modification de la conf bdd à la volée) ce n’est pas possible.
Non, on n’en a pas besoin en «prod», comme la plupart des outils de dev, mais ca ne les empèche pas d’exister.
Y a rien de complexe là dedans, ca lit les différents
Je veux juste réduire les regression et simplifier un peut-être éventuel futur refacto en rajoutant des tests (j’ai déjà trouvé 2 bugs rien que dans la classe DB). Si tu as une autre solution qui fonctionne, je suis preneur.
mais tu devrais juste te mettre à la modestie :) |
C'est juste là que je ne suis pas d'accord, les tests ne sont censé passer que dans un env de test, et on ne devrait pas avoir à adapter le core pour faire passer nos tests. (edit)
Voici une solution simple qui n'affecte pas le core pour lancer tes phpunit en local, inspirée de l'install actuelle:
|
Oui on peux faire comme ça et surment de plein d'autres manières. Mais encore une fois, c'est hors-sujet. |
Déplace la configuration de la base de donnée dans un fichier .env (surchargeable par .env.local).
Description
Cette PR est rétrocompatible, on priorise le nouveau système mais accepte le fichier
/core/config/common.config.php
en renvoyant une deprecated si le fichier.env
est absent ou ne contient pas la configuration base de donnée.Le fichier
.env
peut contenir 2 variables d’environnement :en pratique le fichier généré par l’installation sera le suivant
DATABASE_DSN=mysql://jeedom:password@localhost:3306/jeedom
(La génération du fichier partie peut être retirée de la PR si besoin, cela n'aura aucune conséquence.
.env
.Suggested changelog entry
Move database configuration in /.env file.
Types of changes
PR checklist