PHP: Déployer avec GitHub Actions

Comment déployer votre code PHP en utilisant GitHub Actions

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution PHP cloud prête à l'emploi qui offre de nombreux avantages, notamment :

  • Déployez votre application en quelques secondes avec un simple git push.
  • Utilisez votre propre nom de domaine et bénéficiez de la configuration automatique des certificats HTTPS pour une sécurité renforcée.
  • Profitez de la tranquillité d'esprit avec des sauvegardes automatiques, des mises à jour en un clic, et une tarification simple, transparente et prévisible.
  • Obtenez des performances optimales et une sécurité robuste grâce à une VM privée et dédiée.

Gagnez du temps et simplifiez-vous la vie : il ne faut que 5 minutes pour essayer la solution PHP cloud hosting de Stackhero !

GitHub Actions facilite l'automatisation de tâches telles que le déploiement de votre code PHP sur des serveurs de production. Dans ce guide, vous apprendrez à déployer en toute sécurité votre application PHP sur des environnements de staging et de production en utilisant GitHub Actions.

L'approche consiste à maintenir deux branches, staging et production. Le code poussé sur ces branches est automatiquement déployé sur l'instance Stackhero correspondante.

Avoir une instance de staging n'est pas obligatoire. Cependant, l'utilisation d'instances de staging et de production est fortement recommandée pour garantir des déploiements fluides et une plus grande confiance lors des déploiements en production. Cette pratique est conforme aux standards de l'industrie et aide à prévenir les problèmes potentiels.

Pour suivre ce guide, vous avez besoin d'un compte GitHub hébergeant votre dépôt de code PHP.

Commencez par vous connecter à votre tableau de bord Stackhero et créez deux services PHP : un pour le staging et un pour la production. Pour rester organisé, renommez ces services en "Production" et "Staging".

Si vous n'avez pas de compte Stackhero, vous pouvez en créer un gratuitement en seulement deux minutes et configurer vos services cloud PHP en quelques clics.

Exemple de services de production et de stagingExemple de services de production et de staging

Les clés SSH sont essentielles pour permettre à GitHub Actions de se connecter en toute sécurité à votre service PHP pour le déploiement. Dans ce guide, vous allez créer une paire de clés SSH unique dédiée à cet usage.

Vous pouvez générer de nouvelles clés SSH en exécutant la commande suivante sur votre ordinateur :

ssh-keygen -C "" -f /tmp/ssh_key -N ""

Récupérez la clé publique en exécutant :

cat /tmp/ssh_key.pub

Ensuite, accédez à votre tableau de bord Stackhero. Sélectionnez votre service PHP "Production" et cliquez sur "Configurer". Puis suivez ces étapes :

  1. Sous Clés publiques SSH, cliquez sur "Ajouter une clé publique".
  2. Définissez la Description sur "GitHub Action".
  3. Collez la clé publique récupérée dans le champ Clé.

Obtenir les paramètres du serviceObtenir les paramètres du service

Maintenant, ouvrez votre projet GitHub et suivez ces étapes pour configurer la clé privée pour le déploiement :

  • Cliquez sur Settings, puis Environments et sélectionnez New environment.

    Configurer les environnements GitHubConfigurer les environnements GitHub

  • Dans le champ Name, entrez "production" et confirmez.

    Définir l'environnementDéfinir l'environnement

  • Cliquez sur le bouton No restriction et sélectionnez Selected branches and tags.

    Définir les restrictions d'environnementDéfinir les restrictions d'environnement

  • Cliquez sur Add deployment branch or tag rule, entrez "production" dans le champ Name pattern, et cliquez sur Add rule.

    Définir la branche d'environnementDéfinir la branche d'environnement Définir la branche d'environnementDéfinir la branche d'environnement

  • Sous Environment secrets, cliquez sur Add secret.

    Ajouter un secretAjouter un secret

Récupérez la clé privée que vous avez générée précédemment en exécutant :

cat /tmp/ssh_key

Dans les paramètres d'environnement GitHub :

  • Dans Name, entrez STACKHERO_SSH_PRIVATE_KEY et collez votre clé privée dans le champ Value.

    Définir le secret de la clé privée SSHDéfinir le secret de la clé privée SSH

  • Dans la section Environment variables, cliquez sur Add variable.

    Définir les variablesDéfinir les variables

  • Dans Name, entrez STACKHERO_ENDPOINT et collez l'endpoint du service PHP dans le champ Value. Vous pouvez trouver cet endpoint dans votre tableau de bord Stackhero.

    Définir la variable d'endpointDéfinir la variable d'endpoint

Si vous avez personnalisé le nom de domaine de votre service, utilisez la version personnalisée au lieu de xxxxxx.stackhero-network.com.

Pour des raisons de sécurité, vous devez maintenant supprimer les clés SSH générées de votre ordinateur :

rm /tmp/ssh_key /tmp/ssh_key.pub

Ensuite, vous allez configurer un workflow GitHub Actions pour automatiser vos déploiements. Dans votre dépôt Git, créez un répertoire nommé .github/workflows et ajoutez un fichier nommé deploy-to-stackhero.yml avec le contenu suivant :

# Fichier : .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # Liste des branches qui déclencheront l'action de déploiement suite à un push git
    # N'oubliez pas de créer un environnement correspondant dans GitHub (sous "Settings" -> "Environments") pour chaque branche
    # Puis ajoutez le secret "STACKHERO_SSH_PRIVATE_KEY" et la variable "STACKHERO_ENDPOINT" dans cet environnement
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Le secret "STACKHERO_SSH_PRIVATE_KEY" et la variable "STACKHERO_ENDPOINT" doivent être définis dans l'environnement GitHub correspondant (sous "Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Après avoir ajouté le fichier, validez vos modifications en exécutant les commandes suivantes dans votre terminal :

git add -A .
git commit -m "Ajout de GitHub Actions pour déployer sur Stackhero"

Ensuite, créez une branche de production en exécutant :

git checkout -b production

Enfin, poussez vos modifications sur GitHub :

git push --set-upstream origin production

Cette commande pousse votre code sur la branche production de GitHub. GitHub Actions s'exécute alors automatiquement et déploie votre code sur l'instance Stackhero associée. Pour vérifier le déploiement, visitez votre projet GitHub et cliquez sur Actions.

GitHub Actions ayant déployé en productionGitHub Actions ayant déployé en production

Félicitations, vous êtes maintenant prêt à déployer automatiquement votre code en production en utilisant GitHub Actions !

Vous pouvez configurer l'environnement de staging en suivant un processus similaire à celui de l'environnement de production. Répétez simplement les étapes ci-dessus en remplaçant production par staging lorsque cela est applicable.

Une fois les paramètres configurés, créez une branche de staging en exécutant :

git checkout -b staging

Ensuite, poussez vos modifications sur GitHub :

git push --set-upstream origin staging

GitHub Actions déploie automatiquement le code de la branche staging sur le service PHP désigné pour le staging.

Il est recommandé de protéger les branches production et staging pour éviter les pushs directs. Vous pourriez envisager de créer une pull request pour la branche staging qui est examinée et fusionnée uniquement par des personnes ayant les droits de déploiement. Une fois les modifications validées dans l'environnement de staging, les utilisateurs autorisés peuvent fusionner la pull request dans la branche production.

Suivre cette approche augmente la sécurité en garantissant que seules les modifications approuvées sont déployées et améliore la fiabilité en testant les nouvelles fonctionnalités dans un environnement de staging avant qu'elles n'atteignent la production.