Automatiser le déploiement Laravel sur cPanel avec GitHub Actions
Découvrez comment automatiser le déploiement de vos projets Laravel sur cPanel avec GitHub Actions en utilisant des pipelines prêts à l’emploi.
Si vous déployez vos applications Laravel sur cPanel comme moi, vous savez que l'utilisation classique de git pull
et git push
peut rapidement devenir répétitive. Mais bonne nouvelle, il est possible d’automatiser tout ce processus en utilisant GitHub Actions !
Dans cet article, je vous partage un pipeline complet prêt à l’emploi pour automatiser vos déploiements. En suivant les étapes, vous pourrez facilement gérer vos builds et vos déploiements avec un script simple.
Configuration des fichiers nécessaires
Pour commencer, nous allons créer deux fichiers essentiels :
.github/workflows/master.yml
: le fichier YAML pour définir le pipeline GitHub Actions.deploy.sh
: un script Bash pour exécuter les commandes sur le serveur distant.
Créez le dossier .github/workflows
à la racine de votre projet Laravel, puis ajoutez les deux fichiers.
Variables d’environnement
Ajoutez les variables suivantes dans les secrets de votre dépôt GitHub :
- MASTER_SSH_HOST : Adresse du serveur.
- MASTER_SSH_USERNAME : Nom d’utilisateur SSH.
- MASTER_SSH_KEY : Clé privée SSH.
- MASTER_SSH_PORT : Port SSH (par défaut 22).
- MASTER_SSH_PATH : Chemin vers le dossier de votre projet sur le serveur.
Le fichier YAML : master.yml
Voici le script complet pour master.yml
:
name: Deploy to Master
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '19.x'
- run: npm install
- run: npm run build
- name: Commit built assets
run: |
git config --local user.email "votre-email@domaine.com"
git config --local user.name "Votre Nom"
git checkout -B deploy
git add -f public/
git commit -m "Build front-end assets"
git push -f origin deploy
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
username: ${{ secrets.MASTER_SSH_USERNAME }}
host: ${{ secrets.MASTER_SSH_HOST }}
key: ${{ secrets.MASTER_SSH_KEY }}
port: ${{ secrets.MASTER_SSH_PORT }}
script: |
cd ${{ secrets.MASTER_SSH_PATH }}
chmod +x ./deploy.sh
./deploy.sh
delete:
name: Delete deploy branch
runs-on: ubuntu-latest
needs: deploy
steps:
- name: Checkout branch
uses: actions/checkout@v4
- name: Delete deploy branch
run: |
git config --local user.email "votre-email@domaine.com"
git config --local user.name "Votre Nom"
git push origin --delete deploy
Explications :
- Build : Le job construit les assets front-end, commit le dossier
public
sur une branche intermédiaire (deploy
) et pousse les changements. - Deploy : Le serveur cible est accédé via SSH pour exécuter le script de déploiement.
- Delete : La branche intermédiaire
deploy
est supprimée pour garder le dépôt propre.
Le fichier Bash : deploy.sh
Placez ce script à la racine de votre projet Laravel :
#!/bin/sh
set -e
echo "Déploiement de l'application ..."
# Activer le mode maintenance
(php artisan down --secret="bypass") || true
# Mettre à jour le code
git fetch origin deploy
git reset --hard origin/deploy
# Installer les dépendances
composer install --no-interaction --prefer-dist --optimize-autoloader
# Mettre à jour la base de données
php artisan migrate --force
# Nettoyer le cache
php artisan optimize:clear
# Désactiver le mode maintenance
php artisan up
echo "Application déployée avec succès !"
Étapes :
- Le mode maintenance est activé pour éviter les interruptions pour les utilisateurs.
- Le script récupère les dernières modifications de la branche
deploy
. - Les dépendances sont installées avec Composer, et les migrations de la base de données sont appliquées.
- Le cache est nettoyé, et le mode maintenance est désactivé.
Pourquoi utiliser une branche intermédiaire deploy
?
Sur les hébergements cPanel, Node.js n’est pas toujours disponible ou facilement configurable. La branche deploy
permet de transférer uniquement les fichiers nécessaires sans avoir besoin de Node sur le serveur.
Astuce : Si votre serveur supporte Node, vous pouvez sauter l'étape build
et ajuster directement le script de déploiement.
Questions fréquentes
Pourquoi supprimer la branche deploy
?
La branche deploy
est temporaire. Elle est utilisée uniquement pour transférer les fichiers de build. La suppression permet de garder un dépôt propre.
Et si mon serveur a Node.js installé ?
Si Node.js est accessible sur votre serveur, vous pouvez sauter le job build
et faire toutes les étapes directement dans le script deploy.sh
.
Que faire si je rencontre des problèmes ?
Les erreurs peuvent provenir de permissions, de clés SSH, ou d'étapes manquantes dans les scripts. Vérifiez étape par étape et assurez-vous que le serveur accepte les connexions SSH depuis GitHub Actions.
Conclusion
Avec ce pipeline, le déploiement de vos projets Laravel sur cPanel devient automatisé, propre et professionnel. Vous économisez du temps tout en garantissant des déploiements fiables.
Prêt à optimiser vos workflows ?
Chez Tunisie Innovation, nous vous accompagnons dans la mise en place de solutions automatisées pour vos projets web. Contactez-nous pour optimiser vos déploiements et gagner en productivité !