Mise à jour automatique de vos modules et scripts PHP : une solution universelle signée AI-DEV

Maintenir un module, une extension ou une application à jour est une tâche incontournable pour tout développeur.

Qu’il s’agisse de corriger un bug, d’ajouter une fonctionnalité ou d’améliorer la sécurité, il faut pouvoir distribuer les nouvelles versions aux utilisateurs simplement et efficacement.

Pour les développeurs qui commercialisent ou distribuent leurs propres solutions, la mise en place d’un système de mise à jour peut rapidement devenir un projet à part entière.

C’est pour répondre à ce besoin qu’AI-DEV a développé un système de publication et d’installation de mises à jour pour les modules PrestaShop, mais également pour n’importe quel CMS ou script PHP.

L’objectif : disposer d’un mécanisme unique, réutilisable et sécurisé, sans dépendre du système de mise à jour propre à une plateforme.

Un système de mise à jour qui ne se limite pas à PrestaShop

À l’origine, ce système répond à un besoin concret : pouvoir distribuer les mises à jour de mes propres modules PrestaShop sans dépendre du mécanisme natif de la plateforme.

Mais pourquoi limiter cette solution à PrestaShop ?

Un module WordPress, une extension pour un autre CMS, un script PHP indépendant ou une application développée sur mesure rencontrent exactement le même besoin : pouvoir vérifier si une nouvelle version existe et l’installer facilement.

Le système a donc été conçu pour être indépendant de toute plateforme.

Il repose sur deux éléments distincts :

  • Un serveur de distribution qui stocke et met à disposition les versions publiées.
  • Une bibliothèque cliente intégrable dans le module ou le script qui doit recevoir les mises à jour.

Le même serveur peut ainsi gérer plusieurs modules et applications, chacun disposant de son propre identifiant et de ses propres paramètres d’accès.

PrestaShop n’est qu’un exemple d’intégration parmi d’autres.

Comment fonctionne le système ?

Le fonctionnement repose sur un principe simple.

1. Préparation et publication d’une nouvelle version

Depuis votre environnement de développement, vous préparez une nouvelle version de votre module ou de votre script.

Un ensemble de scripts PHP permet de :

  • Construire automatiquement une archive ZIP.
  • Générer les informations de version.
  • Ajouter le journal des modifications (changelog).
  • Calculer l’empreinte SHA-256 de l’archive.
  • Signer les informations de publication.

La publication est ensuite transférée sur votre serveur de distribution.

Un script Windows est également fourni pour automatiser les différentes étapes de préparation et d’envoi.

2. Vérification des mises à jour

Depuis l’administration de votre module ou de votre application, le système interroge le serveur de distribution.

Il récupère les informations de la dernière version disponible et vérifie leur authenticité.

Si une version plus récente existe, l’utilisateur peut consulter :

  • Le numéro de la nouvelle version.
  • Le journal des modifications.
  • Les informations de publication.

Il peut ensuite décider de lancer l’installation.

3. Installation de la mise à jour

L’installation nécessite une confirmation explicite de l’utilisateur.

Une fois celle-ci validée, le système télécharge l’archive, vérifie à nouveau sa signature et son empreinte, puis procède au remplacement des fichiers.

Une sauvegarde des fichiers existants est réalisée avant l’opération.

En cas de problème lors de l’installation, le système tente de restaurer cette sauvegarde.

L’objectif est de limiter les risques liés à une mise à jour interrompue ou incorrecte.

La sécurité au cœur du mécanisme

Distribuer des fichiers exécutables sur plusieurs installations nécessite une attention particulière à la sécurité.

Le système utilise plusieurs mécanismes complémentaires.

Une signature cryptographique Ed25519

Chaque module possède une paire de clés cryptographiques :

  • Une clé privée conservée exclusivement sur la machine utilisée pour publier les versions.
  • Une clé publique intégrée dans les installations du module.

La clé privée permet de signer les informations de publication. La clé publique permet au client de vérifier cette signature.

Ainsi, même si un fichier ZIP ou les informations de version sont modifiés après publication, le client refuse la mise à jour si la signature ne correspond plus.

La clé privée n’est jamais placée sur le serveur web.

Une vérification SHA-256 des archives

En complément de la signature, chaque archive dispose d’une empreinte SHA-256.

Après téléchargement, le client recalcule cette empreinte et la compare à celle publiée.

Cela permet de détecter toute modification du fichier ZIP.

Une authentification propre à chaque module

Chaque module possède son propre identifiant et son secret.

Les requêtes sont authentifiées par un mécanisme HMAC-SHA256, avec horodatage et nonce à usage unique afin de limiter les risques de rejeu.

Le secret n’est pas transmis directement lors des requêtes.

Il est important de préciser que ce secret n’est pas un système de licence : il sert à authentifier les échanges et à isoler les dépôts de chaque module.

Il n’y a donc pas de gestion de licences par boutique, domaine ou durée d’utilisation.

Des protections supplémentaires lors de l’installation

Le mécanisme d’installation intègre également plusieurs protections :

  • Refus des chemins de fichiers dangereux.
  • Refus des liens symboliques dans les archives.
  • Limitation de la taille des archives décompressées.
  • Conservation du fichier contenant la configuration et la clé publique.
  • Sauvegarde avant remplacement et restauration en cas d’échec.

L’ensemble permet de sécuriser aussi bien la distribution que l’installation des mises à jour.

Compatible avec PrestaShop, mais aussi avec les autres CMS et scripts PHP

C’est l’un des principaux avantages de cette solution : le système de mise à jour n’est pas dépendant de PrestaShop.

Une intégration spécifique est fournie pour PrestaShop, avec un panneau de mise à jour directement accessible depuis l’administration du module.

Mais la bibliothèque cliente peut également être utilisée dans d’autres environnements.

Quelques exemples :

  • PrestaShop : mise à jour de modules directement depuis leur configuration.
  • WordPress : intégration dans l’administration d’un plugin.
  • Autres CMS : ajout d’un panneau de mise à jour dans l’administration existante.
  • Scripts PHP indépendants : mise à jour d’une application ou d’un outil développé sur mesure.
  • Applications métier : distribution de nouvelles versions sans avoir à mettre en place un système spécifique.

Pour les environnements autres que PrestaShop, les classes clientes permettent de récupérer les informations de version, télécharger les archives et effectuer leur installation.

Le panneau de mise à jour peut également être réutilisé dans une interface d’administration déjà sécurisée.

Un serveur PHP sur un hébergement classique

Pas besoin d’une infrastructure complexe pour faire fonctionner le système.

Le serveur de distribution est développé en PHP et peut fonctionner sur un hébergement classique compatible.

Les prérequis sont :

  • PHP 8.1 ou supérieur.
  • L’extension Sodium.
  • Un accès HTTPS.
  • Un accès aux fichiers pour stocker les archives et les informations de publication.

L’extension cURL est nécessaire côté client pour communiquer avec le serveur.

Le système ne nécessite ni service externe spécialisé, ni plateforme de distribution propriétaire.

Les fichiers de stockage sont placés en dehors de la racine web afin de limiter les accès directs aux données internes.

Une solution libre et disponible sur GitHub

Le projet est disponible publiquement sur GitHub sous licence Apache 2.0.

Vous pouvez consulter les sources, étudier son fonctionnement et l’adapter à vos propres besoins.

Le dépôt contient notamment :

  • Les scripts de génération des clés.
  • Les outils d’enregistrement des modules.
  • Les scripts de préparation et de publication des versions.
  • Le serveur de distribution.
  • La bibliothèque cliente.
  • Les classes d’installation.
  • L’intégration PrestaShop.
  • Des exemples et un script de tests.

Un système de tests automatisés permet également de vérifier différents scénarios : authentification, isolation entre modules, protection contre le rejeu, vérification des signatures, sauvegarde et rejet d’une archive modifiée.

Accéder au projet GitHub :

https://github.com/ai-dev-git/deploy

Conclusion : un seul système pour distribuer toutes vos mises à jour

Développer et maintenir plusieurs modules ou applications implique souvent de multiplier les mécanismes de mise à jour.

Avec ce projet, AI-DEV propose une approche différente : un serveur de distribution unique, une bibliothèque cliente réutilisable et une intégration indépendante de la plateforme utilisée.

Que vous développiez des modules PrestaShop, des extensions pour d’autres CMS ou des scripts PHP autonomes, vous pouvez ainsi disposer d’un mécanisme commun pour publier et installer vos nouvelles versions.

Un système pensé pour les développeurs qui souhaitent garder la maîtrise de leurs mises à jour, sans dépendre d’une solution propriétaire ou d’un système de licences.

👉 Retrouvez les sources et la documentation du projet sur GitHub :

https://github.com/ai-dev-git/deploy

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

+ deux = dix