Loading...
Skip to Content

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.

Accueil Articles Automatiser le déploiement Laravel sur cPanel avec GitHub Actions
Automatiser le déploiement Laravel sur cPanel avec GitHub Actions

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é !

Contactez-nous

Prêt à donner vie à votre projet ? Contactez-nous dès aujourd'hui et commençons à créer ensemble des solutions innovantes pour votre entreprise.
Nous sommes disponibles pour répondre à vos questions et discuter de nouveaux projets.