Download the PHP package bamboguirassy/laravel-deploy-supervisor without Composer

On this page you can find all versions of the php package bamboguirassy/laravel-deploy-supervisor. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package laravel-deploy-supervisor

Laravel Deploy Supervisor

Pipeline de déploiement supervisé pour applications Laravel : git pull + build + reload par étapes configurables, historique en base, suivi temps réel via broadcasting, déclenchement automatique par webhook (GitHub, GitLab, Bitbucket) et notifications email.

Extrait du projet TCRM, généricisé pour être réutilisable tel quel dans n'importe quel autre projet Laravel.

Compatibilité : PHP 8.2+, Laravel 10, 11, 12 ou 13.

Fonctionnalités

Installation

Disponible sur Packagist (mise à jour automatique à chaque push/tag via le hook GitHub) :

Publier la config et la migration :

Mise à jour

⚠️ La contrainte ^1.x écrite dans votre composer.json (générée par composer require ci-dessus) n'entraîne PAS automatiquement la récupération de la dernière version 1.x à chaque déploiement. Si un composer.lock existe déjà avec une ancienne version verrouillée, composer install réutilise cette version — même si votre contrainte l'autoriserait à prendre plus récent. Pour forcer la mise à jour vers la dernière version disponible sur Packagist (voir le CHANGELOG pour le contenu de chaque version) :

Rappel semver : ^1.x autorise toute version 1.x la plus récente (ex. 1.2.2, 1.3.0...) mais jamais un futur 2.0.0 (breaking change).

Prérequis : file d'attente (Horizon ou queue:work)

⚠️ Étape facile à oublier, qui casse tout en silence. Chaque déploiement s'exécute dans un job (RunDeploiementJob) dispatché sur la queue config('deploy-supervisor.queue') (par défaut deploy). Si aucun worker n'écoute cette queue, POST /deploiement répond quand même 202 Accepted — mais rien ne s'exécute jamais. Le job reste en attente silencieuse dans Redis, sans erreur visible ni côté API ni côté logs applicatifs. Les notifications email (voir plus bas) partagent cette même queue : sans worker, elles ne partent pas non plus.

Avec Horizon, ajoutez la queue à un supervisor de config/horizon.php :

Puis redémarrer Horizon (php artisan horizon:terminate, Supervisor le relance) pour qu'il prenne en compte le nouveau supervisor.

Sans Horizon, un worker classique dédié suffit (à superviser vous-même, ex. avec Supervisor) :

Vérifiez que ça fonctionne en lançant un déploiement de test (php artisan deploy-supervisor:run --sync contourne la queue et exécute en synchrone, utile pour confirmer que le pipeline lui-même marche — mais ne remplace pas ce test en mode asynchrone normal, via l'API ou sans --sync, pour valider que le worker écoute bien).

Configuration minimale

Dans config/deploy-supervisor.php (publié), renseigner au moins :

  1. targets — un exemple complet est en commentaire dans le fichier publié ; définit pour chaque cible (backend, frontend, ou tout autre nom) un dossier (path) et une liste ORDONNÉE d'étapes (label + command). Une "cible" ici est le même concept que ce que l'API expose comme "environnement" via GET /environnements (voir "Utilisation").
  2. routes.middleware — voir la section Sécurité ci-dessous, à lire avant toute mise en production.
  3. gate — protège uniquement le canal de diffusion temps réel (voir Sécurité) :

  4. user_model — le modèle User de votre application (par défaut App\Models\User).
  5. declenche_par_formatter — nom d'une classe invokable (__invoke($user): array) qui formate l'utilisateur "déclenché par" pour l'API. Doit être un nom de classe (string), jamais une closure — php artisan config:cache sérialise la config avec var_export(), qui ne sait pas représenter une Closure. Créez la vôtre si vos colonnes User diffèrent (name/nom_complet/uid...) :

Variables d'environnement

Variables de base (voir les commentaires du fichier de config pour le détail de chacune). Les variables spécifiques au webhook et aux notifications email sont documentées dans leurs sections dédiées ci-dessous, pas ici.

Sécurité

⚠️ Les routes du package ne portent par défaut AUCUNE vérification de permission/rôle — uniquement config('deploy-supervisor.routes.middleware') (par défaut ['api', 'auth:sanctum'], donc juste "être authentifié"). C'est volontaire : ce package ne peut pas deviner votre logique d'autorisation (rôles, permissions, is_admin...). Sans action de votre part, n'importe quel utilisateur authentifié peut déclencher, consulter et supprimer des déploiements.

À vous d'ajouter votre propre garde, typiquement l'une de ces deux options :

Le canal de diffusion temps réel (config('deploy-supervisor.channel')), lui, reste protégé par la Gate DEPLOY_SUPERVISOR_GATE — un canal de broadcasting a besoin d'un callback booléen quoi qu'il arrive, donc ce point-là n'est pas concerné par le choix ci-dessus. Non définie côté application hôte = canal refusé par défaut (échec fermé).

Utilisation

Via l'API (routes enregistrées automatiquement)

GET /api/deploiement/environnements retourne { code, label } pour chaque cible configurée — s'adapte automatiquement si vous ajoutez ou retirez une cible dans config('deploy-supervisor.targets'), sans aucun changement de code frontend nécessaire :

Via la CLI

Suivi temps réel

Le pipeline diffuse 3 types d'événements légers sur le canal privé deploy-supervisor (nom configurable) — jamais de sortie console dedans, pour rester bien en dessous des limites de payload des serveurs WebSocket (10 Ko par défaut sur Reverb) :

Le détail complet (avec la sortie console de chaque étape, output_tail) reste toujours en base — à récupérer via GET /api/deploiement/{uid} côté frontend, typiquement après réception de l'événement deploiement.termine.

Exemple de client (pusher-js, adaptable à laravel-echo) :

Webhook (déclenchement automatique sur push)

Désactivé par défaut :

Une fois activé, le package expose une route par fournisseur et par cible ({target} doit correspondre à une clé de config('deploy-supervisor.targets')) :

La cible à déployer est portée par l'URL elle-même, pas déduite du dépôt émetteur du payload — ce qui permet d'avoir un dépôt git différent par cible (ex. un dépôt backend et un dépôt frontend séparés) : chaque dépôt reçoit sa propre URL de webhook, pointant directement vers sa cible.

Un push sur la branche DEPLOY_SUPERVISOR_GIT_BRANCH (par défaut main) déclenche un déploiement asynchrone (queue) de cette seule cible — même comportement que POST /api/deploiement avec cibles: ["backend"]. Toute autre branche est ignorée (réponse 200, aucun déploiement créé).

⚠️ Ces routes ne portent PAS le middleware auth:sanctum (un webhook n'a pas de session utilisateur) — l'authenticité est vérifiée par signature/token propre à chaque fournisseur. Sans secret configuré, aucune requête n'est acceptée (échec fermé).

Deux requêtes identiques (même commit, même cible) envoyées à quelques secondes d'intervalle — fréquent en cas de retry réseau côté fournisseur — ne déclenchent qu'un seul déploiement (déduplication par verrou de 30s sur le couple SHA du commit / cible).

Générer un secret fort

Génère un secret aléatoire de 32 octets et l'écrit directement dans DEPLOY_SUPERVISOR_WEBHOOK_SECRET dans .env (même principe que php artisan key:generate) — demande confirmation si une valeur existe déjà (--force pour l'écraser sans confirmation, --show pour juste afficher une valeur générée sans toucher à .env). Ne la réutilisez pas ailleurs, et ne la commitez jamais. La commande affiche aussi, juste après, l'URL complète de chaque fournisseur (voir ci-dessous) prête à copier.

Récupérer l'URL complète à configurer

Affiche l'URL complète de chaque cible × fournisseur, construite à partir de APP_URL (donc jamais à reconstruire à la main) :

Pour Bitbucket, le secret est directement inclus dans l'URL affichée (voir la section Bitbucket ci-dessous, qui explique pourquoi). Assurez-vous que APP_URL (dans .env) correspond bien à l'URL publique réelle de votre application avant de copier ces URLs chez le fournisseur.

Configuration multi-dépôts : si backend et frontend vivent dans deux dépôts git distincts, configurez le webhook de chaque dépôt avec l'URL correspondant à sa propre cible (le dépôt backend reçoit l'URL .../webhook/{provider}/backend, le dépôt frontend reçoit .../webhook/{provider}/frontend) — un push sur l'un ne déclenchera que sa cible, jamais l'autre.

GitHub

Dans les paramètres du dépôt → Webhooks → Add webhook :

GitHub signe le corps de la requête (HMAC-SHA256) dans le header X-Hub-Signature-256, vérifié côté package.

GitLab

Dans le dépôt → Settings → Webhooks :

GitLab renvoie ce secret tel quel dans le header X-Gitlab-Token, comparé côté package.

Bitbucket

Bitbucket Cloud ne propose pas de champ "secret" natif pour ses webhooks : le secret doit être ajouté directement dans l'URL, en query string.

Dans le dépôt → Repository settings → Webhooks :

⚠️ Le secret apparaît ici en clair dans l'URL configurée côté Bitbucket (visible par quiconque a accès aux paramètres du dépôt) — s'assurer que l'URL est servie en HTTPS pour qu'il ne transite jamais en clair sur le réseau.

Notifications par email

Désactivées par défaut. Une fois activées, un email est envoyé à une liste d'adresses configurée — indépendante des comptes utilisateurs Laravel, typiquement une liste ops/astreinte — au démarrage et à la fin de chaque déploiement.

Robustesse


All versions of laravel-deploy-supervisor with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
illuminate/support Version ^10.0|^11.0|^12.0|^13.0
illuminate/database Version ^10.0|^11.0|^12.0|^13.0
illuminate/process Version ^10.0|^11.0|^12.0|^13.0
illuminate/broadcasting Version ^10.0|^11.0|^12.0|^13.0
illuminate/queue Version ^10.0|^11.0|^12.0|^13.0
illuminate/mail Version ^10.0|^11.0|^12.0|^13.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package bamboguirassy/laravel-deploy-supervisor contains the following files

Loading the files please wait ...