Skip to content

feat: dockerisation complète du projet - #592

Open
Neo-AzTeK wants to merge 24 commits into
JeromeDevome:masterfrom
Neo-AzTeK:master
Open

feat: dockerisation complète du projet#592
Neo-AzTeK wants to merge 24 commits into
JeromeDevome:masterfrom
Neo-AzTeK:master

Conversation

@Neo-AzTeK

Copy link
Copy Markdown

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.

…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.
@Neo-AzTeK

Copy link
Copy Markdown
Author

J'itère actuellement sur les bugs lors d'une installation de zéro.

Neo-AzTeK added 13 commits July 27, 2026 14:56
…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").
@Neo-AzTeK

Copy link
Copy Markdown
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant