feat: dockerisation complète du projet - #592
Open
Neo-AzTeK wants to merge 24 commits into
Open
Conversation
…des tables de la db automatique pour docker
…tables lorsque la configuration de connexion est prédéfinie.
…llateur Initialisation de la variable $GLOBALS['db_c'] après l'ouverture de la connexion MySQL dans install_mysql.php. Cela permet à SecuChaine::ProtectDataSql de recevoir une instance mysqli valide au lieu de null, résolvant une erreur fatale sous PHP 8.3 lors de l'initialisation des tables.
Author
|
J'itère actuellement sur les bugs lors d'une installation de zéro. |
…ement les requêtes multilignes lors de l'installation.
Correction du tableau d'options Twig et sécurisation de la définition de TABLE_PREFIX dans misc.inc.php.
…ans les redirections et requêtes Ajout d'isset() avant l'utilisation de $url, $_GET['url'] et $_SERVER['REMOTE_ADDR'] pour éviter les warnings PHP 8 (et les erreurs de construction d'en-tête) lorsque ces valeurs ne sont pas définies.
…ôt qu'au build Retire la copie du fichier de connexion Docker à la construction de l'image ; admin.inc.php inclut désormais connect.inc.php.docker si connect.inc.php est absent, comme le fait déjà app.php.
…antes dans le schéma d'install Le schéma d'installation fraîche (tables.my.sql) ne créait pas ces deux colonnes sur grr_area, alors que maj.php les ajoute lors des mises à jour et que le reste du code les utilise sans condition. Résultat : une installation neuve provoquait un échec SQL silencieux et une page blanche sur app.php.
…ent partout Déplace le template de connexion Docker (lecture depuis les variables d'environnement) de personnalisation/ vers include/, qui n'est pas monté en volume et survit donc au bind mount de personnalisation/. Unifie tous les points d'inclusion (app.php, index.php, admin.inc.php, install_mysql.php, maj.php, verif_auto_grr.php, admin_save_mysql.php, frmcontactlist.php, lasso/*.php) sur le même repli : personnalisation/connect.inc.php si présent, sinon include/connect.inc.php. Corrige au passage les lasso/*.php qui référençaient déjà include/connect.inc.php alors que ce fichier n'existait nulle part.
Restaure COPY --chown=www-data:www-data sur les copies de code source, dépendances vendor et jslib, et crée temp/ (non versionné, .dockerignore) avec les droits www-data. Revient sur le passage en root du conteneur, qui n'est plus nécessaire pour éviter les problèmes de droits.
Ajoute un healthcheck mysqladmin ping sur le service db et fait dépendre le démarrage de web de service_healthy plutôt que du simple démarrage du conteneur, pour éviter que web ne tente de se connecter avant que MySQL n'accepte les connexions.
…d authentification_obli=1
La condition forçait la lecture de $_SESSION['default_list_type'] dès que authentification_obli
valait 1, même si cette clé de session n'avait jamais été renseignée (ex: juste après connexion),
provoquant un warning PHP 8 (undefined array key) et area_list_format à null. On ne lit
désormais cette clé que si elle existe réellement, avec repli sur Settings::get("area_list_format").
Author
|
Le projet démarre maintenant normalement. Il est possible de suivre le script d'initialisation et la page principale s'affiche comme il faut. |
Un bind mount reprend l'ownership du dossier hôte, qui ne correspond pas à l'utilisateur www-data du conteneur : les uploads (logo, image de connexion, images de salle) échouaient avec une erreur d'écriture. Un volume nommé est peuplé automatiquement par Docker depuis le contenu de l'image (déjà chown www-data via COPY --chown), donc les droits restent cohérents sans dépendre de l'utilisateur hôte.
Les paquets -dev (headers/compilateurs) nécessaires à docker-php-ext-install restaient dans l'image finale sans être utilisés au runtime. Une étape php-extensions-builder compile gd/intl/mysqli/zip, puis l'étape finale ne récupère que les .so compilés et les bibliothèques runtime correspondantes (sans les -dev), réduisant la surface de l'image de prod.
Trois requêtes de installation/fonctions/maj.php reposaient sur des comportements spécifiques à MariaDB, absents de MySQL strict : - CHANGE IF EXISTS sur grr_participants (syntaxe MariaDB uniquement), remplacé par une vérification SHOW COLUMNS avant le rename ; - ADD beneficiaire_ext/moderation dépendait de ce rename, désormais protégé par sa propre vérification d'existence ; - DEFAULT '' sur une colonne TEXT (grr_log_mail.erreur), interdit par MySQL, la colonne passe donc en NULL (toujours renseignée à l'insertion côté code) ; - normalisation des TIMESTAMP à zéro dans grr_entry_moderate avant le CHANGE de login_moderateur, qui échouait sous NO_ZERO_DATE lors de la réécriture de table.
La configuration LDAP était impossible car l'extension ldap n'a
jamais été compilée dans l'image PHP, faisant échouer le
function_exists('ldap_connect') côté admin_config_ldap.php.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cette Pull Request propose une solution de conteneurisation complète pour le projet. L'objectif est d'assurer une parfaite reproductibilité de l'environnement (installation automatique des dépendances et des configurations requises). Plutôt que de documenter manuellement la configuration d'une instance GRR, cette approche permet d'automatiser l'ensemble du processus à l'aide de commandes simples et connues (pour les projets docker).
Pour l'instant je n'ai fait que la base de la base, mais il faudrait l'améliorer au fur à mesure et peut être distribuer des images conteneur.