PHP: Déployer avec GitHub Actions

Comment déployer votre code PHP avec 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 est un outil puissant qui vous permet d'automatiser vos workflows, y compris le déploiement de votre code PHP directement sur vos serveurs de production. Dans ce guide, nous allons voir comment déployer en toute sécurité votre application PHP sur des environnements de staging et de production avec GitHub Actions.

L'approche recommandée consiste à maintenir deux branches dans votre dépôt : staging et production. À chaque fois que vous poussez du code sur ces branches, il sera automatiquement déployé sur l'instance Stackhero correspondante.

Disposer d'une instance de staging n'est pas obligatoire. Cependant, utiliser à la fois des instances de staging et de production est fortement conseillé pour garantir des déploiements fluides et renforcer la confiance lors des mises en production. Cette pratique est conforme aux standards du secteur et permet de limiter les risques.

Pour commencer, vous aurez besoin d'un compte GitHub avec votre code PHP hébergé dans un dépôt.

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 plus de clarté, vous pouvez renommer ces services en "Production" et "Staging".

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

Exemple de services production et stagingExemple de services production et staging

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

Pour générer de nouvelles clés SSH, exécutez cette commande sur votre ordinateur :

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

Ensuite, récupérez la clé publique en exécutant :

cat /tmp/ssh_key.pub

Rendez-vous sur votre tableau de bord Stackhero et sélectionnez votre service PHP "Production". Cliquez sur "Configurer" et suivez ces étapes :

  1. Dans Clés publiques SSH, cliquez sur "Ajouter une clé publique".
  2. Indiquez "GitHub Action" dans le champ Description.
  3. Collez la clé publique que vous venez de récupérer dans le champ Clé.

Accéder aux paramètres du serviceAccéder aux paramètres du service

Ajoutez maintenant la clé privée à votre projet GitHub pour qu'elle soit utilisée lors du déploiement :

  • Allez dans Settings, puis sélectionnez Environments et cliquez sur New environment.

    Configuration des environnements GitHubConfiguration des environnements GitHub

  • Dans le champ Name, saisissez "production" et validez.

    Définir l'environnementDéfinir l'environnement

  • Cliquez sur le bouton No restriction puis 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, saisissez "production" dans le champ Name pattern et cliquez sur Add rule.

    Définir la branche de l'environnementDéfinir la branche de l'environnement Définir la branche de l'environnementDéfinir la branche de l'environnement

  • Dans la section Environment secrets, cliquez sur Add secret.

    Ajouter un secretAjouter un secret

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

cat /tmp/ssh_key

Dans les paramètres d'environnement GitHub :

  • Pour Name, saisissez 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

  • Pour Name, saisissez STACKHERO_ENDPOINT et collez l'endpoint de votre service PHP dans le champ Value. Vous trouverez cet endpoint sur votre tableau de bord Stackhero.

    Définir la variable endpointDéfinir la variable endpoint

Si vous avez personnalisé le nom de domaine de votre service, utilisez la version personnalisée à la place de <XXXXXX>.stackhero-network.com.

Pour des raisons de sécurité, il est recommandé de supprimer les clés SSH générées de votre ordinateur après la configuration :

rm /tmp/ssh_key /tmp/ssh_key.pub

Vous allez maintenant créer un fichier de workflow GitHub Actions pour automatiser vos déploiements. Dans votre dépôt Git, créez un dossier .github/workflows et ajoutez un fichier nommé deploy-to-stackhero.yml avec le contenu suivant :

# File: .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 lors d'un git push
    # N'oubliez pas de créer un environnement correspondant dans GitHub (dans "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 (dans "Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Une fois ce fichier ajouté, vous pouvez valider vos modifications avec ces commandes dans votre terminal :

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

Pour créer la branche production, vous pouvez exécuter :

git checkout -b production

Puis poussez vos modifications sur GitHub :

git push --set-upstream origin production

Cela va pousser votre code sur la branche production de GitHub. GitHub Actions va alors automatiquement s'exécuter et déployer votre code sur l'instance Stackhero associée. Pour vérifier le statut du déploiement, rendez-vous sur votre projet GitHub et cliquez sur Actions.

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

Félicitations ! Votre projet est maintenant configuré pour un déploiement automatique en production avec GitHub Actions.

Vous pouvez configurer votre environnement de staging de la même manière que l'environnement de production. Il suffit de répéter les étapes ci-dessus en remplaçant production par staging lorsque c'est nécessaire.

Une fois la configuration terminée, créez votre branche staging comme ceci :

git checkout -b staging

Puis poussez-la sur GitHub :

git push --set-upstream origin staging

GitHub Actions déploiera automatiquement le code de votre branche staging sur le service PHP que vous avez configuré pour le staging.

Pour garantir la fiabilité et la sécurité de votre application, il est conseillé de protéger vos branches production et staging contre les pushs directs. Vous pouvez par exemple imposer que les modifications passent par des pull requests, en prévoyant que la branche staging soit relue et fusionnée uniquement par les personnes autorisées à déployer. Une fois vos changements validés en staging, les utilisateurs autorisés pourront les fusionner dans la branche production.

Cette méthode permet de s'assurer que seul du code validé arrive en production, tout en testant les nouvelles fonctionnalités en staging avant leur mise en ligne, ce qui apporte une tranquillité d'esprit supplémentaire à votre équipe et à vous-même.