logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
179 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 116 171 333

  • Nb. de membres 8 707
  • Nb. d'articles 1 703
  • Nb. de forums 26
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  Le coin des codeurs »» install auto encore plus auto ... déploiement

install auto encore plus auto ... déploiement#27058

5Contributeur(s)
jpbVisiteurcolonelwogpagestecNpdsteur
3 Modérateur(s)
developpeurjpbJireck
jpb jpbicon_post
A temps perdu (comme si j'en avais beaucoup...) je suis entrain de bricoler un script (classes et oui) permettant de télécharger directement une archive depuis github vers les serveurs de prod (dans un dossier ou à la racine aux choix de l'installateur ....).
Ce script serait donc inclus en tete de l'install auto (mais pourrait aussi etre utilisé pour des téléchargement hors du contexte de l'install auto ex : install de module ou autre ... car il s'agit simplement d'un déploiement d'une archive sur un serveur) - en résumé on se passe de la manipulation : machine/serveur ftp ...
C'est fun ca marche bien mais le debug/test est très fastidieux ... Je vais bientôt passer à l'intégration dans l'install auto ..✅. et je dois faire quelques retouches pour qu'il reste compatible avec php 7.2 + (pour l'instant compatible 8..)✅

si quelqu'un est intéressé pour les test faites signe... welcome !
L'eau goutte à goutte finit toujours par percer la pierre.
 Message édité par : jpb / 16/11/2025 16:58
colonelwog colonelwogicon_post
moi moi ^^
jpb jpbicon_post
bientôt bientôt ...😎
L'eau goutte à goutte finit toujours par percer la pierre.
jpb jpbicon_post
c'est sur github
pour le process suivez le README cliquez pour récupérer le fichier npds_deployer.php
ensuite pour les test placez le à la racine de votre domaine/sous domaine
appeler l'url https://mondomaine.org/npds_deployer.php (suivez l'interface et documentez vous)
attention et bon beta test ...

j'ai fait une bonne cinquantaine de test sur mon serveur (qui est très capricieux) et on est à un stade stable ...
donc en résumé ça fonctionne bien (@phr à fait aussi plusieurs test sur un autre serveur couronné aussi de succès) :
le résultat c'est
- un déploiement (par le web) très rapide (environ 3 minutes !) par rapport à une méthode "manuelle" (download de l'archive sur la machine ==> puis upload sur le serveur ftp) probalement moins rapide qu'un deploiement en ssh mais donc plus accessible et "démocratique"
- une liaison directe avec l'installation automatique (qui reste à parfaire.. et qui devrait la simplifier)

Ce que vous devez obtenir :
- un téléchargement de l'archive choisi à l'emplacement que vous avez choisi
- (background) création d'un fichier slogs/install.log + (écriture dans vos logs php) qui trace le process
- (background) nettoyage du dossier npds_deployer_temp (qui à servi de stockage pour le zip et la décompression)
- une interface finale vous permettant d'accédez à index.php donc à install.php
- install automatique
- install automatique réussie
- (background) création du fichier IZX_install.php ecriture dans slogs/install.log suppression du dossier npds_deployer_temp et du fichier npds_deployer.php à partir de ce moment plus de possibilité de déploiement... une copie de ce fichier est disponible dans la lib mais ne sera accessible (pour pouvoir implémenter les mises à jour et disposer des classes du fichier) que par php et non plus par url ...
- portail npds fonctionnel

NB : test effectué sur php8++
- pour le déploiement : ça devrait grincer un petit peu voir échoué sur php 7.2/4
- et bien entendu le choix d'une version npds incompatible avec php/mysql de votre serveur échouera au début de l'install (exemple : serveur en php8 et choix d'une 16.3 ou 16.4 échouera dès le début de l'install ou plus loin) ...

to do ==>
- reste des précisions à apporté dans la doc (README.md) et dans l'interface
- implémentation et test pour les mises à jour (<== ✅ fait) et pour les modules ... (... du boulot...)
- adaptation pour php de 7.2 à 8+++ ??? nécessaire ? (<== ✅ fait compat php7 à 8++)
- implémentation multilangue dans l'interface de déploiement ...(sgloups du boulot encore) <== ✅ fait

Vous pouvez maintenant tester aussi le mode mise à jour ...
Celui-ci s'effectue à partir de l'admin du portail ...
- la version courante (master) possède donc un nouveau fichier /admin/maj_npds.php
- dans l'interface admin Système : une nouvelle icône menant à /admin.php?op=maj
- deux écran (dans l'interface admin) de choix et de confirmation dans l'interface et vous pouvez lancer la mise à jour ...
- nous voici dans l'interface (progressive) du déployeur où vous pouvez suivre le processus (4 étapes) :
1 sauvegarde de dossier et fichier sensible
2 téléchargement de l'archive choisi
3 extraction du zip
4 copie (filtrée : non copie de tous les fichiers de conf de données et autre suceptible d'avoir été justement modifié (autrement dit un hack dans le mainfile ou tout autre fichiers n'étant pas censé être modifié par les utilisateurs ou admin serait perdu !! [mais probablement dans le backup]) vers la cible ...
- et retour vers l'admin !!!! sur le site .... magique !

le processus est légèrement plus long que le déploiement d'une nouvelle version (environ 3 minutes et quelques !)
Si la mise à jour des fichier est réussi vous aurez accès à un bouton pour migrer la base de donnée ....
Et voici la mise à jour de la bd... ou database_migrator.php
En test intensif celle-ci concluera le processus de mise à jour...
J'ai basé le script sur une comparaison des archives sql celle du site à mettre à jour et celle de la version de mise à jour. Le code parse et compare les fichiers pour en faire des requêtes sql qui seront éxécutées .D'abord une comparaison de structure de toutes les tables , puis le remplissages des deux tables qui contiennent du code metalang et fonctions ...
c'est en très bonne voie ... Ceci nous fera gagner beaucoup de temps pour la release des versions et plus besoin de deux archives différentes (full install et mise à jour) le script complet de mise à jour fera tout le boulot ...

toujours en test intensif de plus en plus stable pour tous le processus !! ....

votre avis vos tests merci de vos retours ...
L'eau goutte à goutte finit toujours par percer la pierre.
 Message édité par : jpb / 16/09/2025 23:03
 Message édité par : jpb / 24/09/2025 12:48
 Message édité par : jpb / 14/10/2025 15:01
 Message édité par : jpb / 19/10/2025 20:28
 Message édité par : jpb / 29/10/2025 19:46
 Message édité par : jpb / 16/11/2025 16:49
Visiteur Visiteuricon_post
merçi chat gpt ou claude ia, le code ressemble beaucoup au code rendue par claude ia !!!!
jpb jpbicon_post
oui c'est écrit dans le fichier c'est deepseek (les chinois lol) suis encore en debug car des fois ca part dans tout les sens lol (et on perd du temps au lieu d'en gagner .. mais on apprend beaucoup ...
L'eau goutte à goutte finit toujours par percer la pierre.
 Message édité par : jpb / 16/09/2025 22:11
Visiteur Visiteuricon_post
J’ai testé vite fait, c’est plutôt pas mal et tout s’est bien passé !
pagestec pagestecicon_post
wahoo ! la classe .... je vais pouvoir mettre à jour https://patrickrichard.eu
jpb jpbicon_post
Citation : nicolas2
J’ai testé vite fait, c’est plutôt pas mal et tout s’est bien passé !


merci nico (ca va nous faciliter la vie pour faire des install, par la rapidité de la mise en oeuvre j'ia fait des process à moins de 3 minutes jusqu'a l'install auto ...)
L'eau goutte à goutte finit toujours par percer la pierre.
jpb jpbicon_post
yes ! alors attention ce n'est pos encore pret pour les mises à jours ... mais c'est prévu ...
L'eau goutte à goutte finit toujours par percer la pierre.
Visiteur Visiteuricon_post
Ah, tu as prévu d’intégrer la gestion des mises à jour.
Ça va être un gros morceau, bon courage !
pagestec pagestecicon_post
Citation : jpb
yes ! alors attention ce n'est pos encore pret pour les mises à jours ... mais c'est prévu ...
Patrick RICHARD
Professeur de Technologie 1985 à 2024 patrickrichard.eu
Président de pagesTEC puis TÉC, Technologie Éducation Culture de 1997 à 2023


Patience 😎
 Message édité par : pagestec / 05/10/2025 10:54
colonelwog colonelwogicon_post
ça à l'air super cool , dsl entre le covid des vancances baclées ... etc etc je n'ai pas eu le temps de regarder , je vais m'attaquer à un gros morceau la mise à jour vers php 8 de mes deux sites Warofgenerals et asfa ..
jpb jpbicon_post
nouvelle version ce matin ... ca marche plutôt bien (mais difficile de compenser les fermeture de connection) ... les test sont interminable mais bon on va dire que j'en suis maintenant à la liaison avec l'install auto et ensuite restera les mises à jours et les modules ...
L'eau goutte à goutte finit toujours par percer la pierre.
colonelwog colonelwogicon_post
Bon ça avance bien , je vais attendre un peu avant de tester alors ;-)
jpb jpbicon_post
j'ai fait les premiers test de déploiement/install-auto et c'est ok ....🎉
je suis sur l'implémentation des mises à jour ...
L'eau goutte à goutte finit toujours par percer la pierre.
Visiteur Visiteuricon_post
hello

Je viens de faire un test vite fait sur mon hébergeur et c’est plutôt joli. Tout s’est passé merveilleusement bien ! Génial, félicitations
jpb jpbicon_post
merci pour le test nico (y'a bien besoin de tordre tout ça pour voir la ou cela pourrait coincer !...) maintenant je suis sur les mises à jour !... sgloups ...
L'eau goutte à goutte finit toujours par percer la pierre.
Visiteur Visiteuricon_post
Undefined variable '$lockFile'.



/**
* Télécharge une archive depuis GitHub avec version variable
* et extrait uniquement le contenu du premier dossier
*/
public function deployVersion(string $baseUrl, string $version, string $format = 'zip',? string $targetDir = null): array {
global $lang;

// ==================== VÉRIFICATION PRÉ-INSTALLATION ====================
$isUpdate = $this->isNPDSInstalled($targetDir);

if ($isUpdate) {
echo '<li class="progress" id="backup-step">💾 Sauvegarde de sécurité...</li>';
flush();
error_log("💾 Backup immédiat avant tout traitement...");
try {
$backupManager = new NPDSBackupManager();
$backupResult = $backupManager->backupCriticalFiles($targetDir);
if ($backupResult['success']) {
$sizeMB = round($backupResult['size'] / 1024 / 1024, 2);
echo '&lt;script>document.getElementById("backup-step").innerHTML = "✅ Backup créé: ' . $sizeMB . ' MB";&lt;/script>';
flush();
error_log("✅ Backup réussi: " . $backupResult['file']);
} else {
error_log("❌ Backup échoué - arrêt du déploiement");
@unlink($lockFile);
return $this->createResult(false, "Échec du backup - déploiement annulé pour sécurité");
}
} catch (Exception $e) {
error_log("💥 Exception backup: " . $e->getMessage());
@unlink($lockFile);
return $this->createResult(false, "Erreur lors du backup: " . $e->getMessage());
}
}
if (!$isUpdate) { // Installation neuve uniquement
$validation = InstallationValidator::validateReceptacle($targetDir);
if (!$validation['safe'] && (!isset($_GET['force']) || $_GET['force'] !== 'yes')) {
// Afficher les warnings immédiatement
echo head_html();
echo '<h2 class="ms-3"><span class="display-6">🚨 </span>Vérification du réceptacle</h2>';
$this->showInstallationWarnings($validation, $targetDir, $version);
echo foot_html();
@unlink($lockFile);
return $this->createResult(false, "Réceptacle non sécurisé");
}
}
// ==================== VERROUILLAGE RENFORCÉ ====================
$lockFile = $this->tempDir . '/deploy.lock';
$lockTimeout = 600; // 10 minutes


===>


/**
* Télécharge une archive depuis GitHub avec version variable
* et extrait uniquement le contenu du premier dossier
*/
public function deployVersion(string $baseUrl, string $version, string $format = 'zip',? string $targetDir = null): array {
global $lang;

// ==================== VERROUILLAGE RENFORCÉ ====================
$lockFile = $this->tempDir . '/deploy.lock';
$lockTimeout = 600; // 10 minutes

// ==================== VÉRIFICATION PRÉ-INSTALLATION ====================
$isUpdate = $this->isNPDSInstalled($targetDir);

if ($isUpdate) {
echo '<li class="progress" id="backup-step">💾 Sauvegarde de sécurité...</li>';
flush();
error_log("💾 Backup immédiat avant tout traitement...");
try {
$backupManager = new NPDSBackupManager();
$backupResult = $backupManager->backupCriticalFiles($targetDir);
if ($backupResult['success']) {
$sizeMB = round($backupResult['size'] / 1024 / 1024, 2);
echo '&lt;script>document.getElementById("backup-step").innerHTML = "✅ Backup créé: ' . $sizeMB . ' MB";&lt;/script>';
flush();
error_log("✅ Backup réussi: " . $backupResult['file']);
} else {
error_log("❌ Backup échoué - arrêt du déploiement");
@unlink($lockFile);
return $this->createResult(false, "Échec du backup - déploiement annulé pour sécurité");
}
} catch (Exception $e) {
error_log("💥 Exception backup: " . $e->getMessage());
@unlink($lockFile);
return $this->createResult(false, "Erreur lors du backup: " . $e->getMessage());
}
}
if (!$isUpdate) { // Installation neuve uniquement
$validation = InstallationValidator::validateReceptacle($targetDir);
if (!$validation['safe'] && (!isset($_GET['force']) || $_GET['force'] !== 'yes')) {
// Afficher les warnings immédiatement
echo head_html();
echo '<h2 class="ms-3"><span class="display-6">🚨 </span>Vérification du réceptacle</h2>';
$this->showInstallationWarnings($validation, $targetDir, $version);
echo foot_html();
@unlink($lockFile);
return $this->createResult(false, "Réceptacle non sécurisé");
}
}

// Vérifier si un déploiement est déjà en cours
if (file_exists($lockFile)) {
jpb jpbicon_post
yo nico attend ...
car la je suis sur une version plus robuste qui n'est pas encore sur github ...
car je n'ai pas réussi à stabiliser les problème dû au coupure serveur et timeout en tout genre donc j'ai opté pour une nouvelle approche ... c'est bientôt prêt voic comment l'IA décrit le code :


Déployeur NPDS - Fonctionnement et Qualités

Le déployeur NPDS est un système robuste de déploiement automatique qui gère l'installation et la mise à jour de la plateforme. Son architecture repose sur une interface web interactive communiquant avec des processus backend asynchrones via une API RESTful.

🎯 Fonctionnement Principal

L'utilisateur sélectionne une version (stable v.16.4 ou développement master) et le dossier cible. Le système lance alors un déploiement en arrière-plan avec suivi en temps réel. Une interface Ajax affiche la progression via un système de polling qui récupère les logs toutes les 3 secondes.

🛡️ Sécurité et Stabilité

Le déployeur intègre un système de verrous empêchant les déploiements concurrents. Pour les mises à jour, il crée des sauvegardes automatiques des fichiers critiques et préserve les données utilisateurs via une liste d'exclusions. La gestion des erreurs garantit qu'aucétat intermédiaire ne persiste.

🌍 Multi-langue et Expérience Utilisateur

Entièrement traduit en 5 langues (FR, EN, ES, DE, ZH), le système propose une interface intuitive avec retour visuel immédiat. Les processus longs (téléchargement, extraction) sont monitorés avec des messages de statut clairs.

⚡ Performances et Robustesse

Optimisé pour les environnements mutualisés, le déployeur contourne les limitations de timeout serveur grâce à son architecture asynchrone. La gestion méticuleuse des buffers et headers assure la stabilité des communications même sur des connexions intermittentes.

En résumé : Un outil professionnel, sécurisé et convivial pour le déploiement de NPDS, alliant simplicité d'usage et robustesse technique.
L'eau goutte à goutte finit toujours par percer la pierre.