Python: Déployer avec GitHub Actions
Comment déployer votre code Python avec GitHub Actions
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution cloud Python prête à l'emploi offrant 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 d'hébergement cloud Python de Stackhero !
GitHub Actions facilite l'automatisation des tâches, y compris le déploiement de votre code Python directement sur vos serveurs de production.
Dans ce guide, vous allez découvrir comment configurer GitHub Actions de manière sécurisée et fiable pour déployer votre code Python sur des environnements de staging et de production.
Pour garder une organisation claire, vous utiliserez deux branches : staging et production. À chaque fois que vous pousserez 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. Vous pouvez suivre ce guide et n'avoir qu'une seule instance de production. Cependant, pour garantir des déploiements fluides et déployer en toute confiance en production, il est fortement recommandé de maintenir à la fois une instance de staging et une instance de production. Cette pratique est un standard dans l'industrie et une approche fiable qui permet d'éviter de nombreux problèmes.
Avant de commencer, assurez-vous de disposer d'un compte GitHub et d'un repository hébergeant votre code.
Création des services Python
Rendez-vous sur votre tableau de bord Stackhero et créez deux services Stackhero, un pour le staging et un pour la production. Pour plus de clarté, vous pouvez les nommer "Production" et "Staging".
Vous n'avez pas encore de compte Stackhero ? Il suffit de vous inscrire gratuitement en deux minutes, puis de créer vos services cloud Python en quelques clics.
Exemple de services production et staging
Configurer les clés SSH
Les clés SSH permettent à GitHub Actions de se connecter de façon sécurisée à votre service Python pour déployer le code. Cette étape est essentielle pour protéger vos services Stackhero.
Sur votre ordinateur, vous pouvez générer de nouvelles clés SSH en exécutant :
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Ajouter la clé publique
Commencez par afficher la clé publique que vous venez de générer :
cat /tmp/ssh_key.pub
Ensuite, dans votre tableau de bord Stackhero, sélectionnez votre service Python "production" et cliquez sur le bouton "Configurer".
Accéder aux paramètres du service
Suivez ces étapes :
- Sous
Clés publiques SSH, cliquez surAjouter une clé publique. - Pour
Description, saisissezGitHub Action. - Pour
Clé, collez la clé publique que vous venez de copier.
Ajouter une clé publique
Ajouter la clé privée
Rendez-vous sur la page de votre projet GitHub, cliquez sur Settings, puis sur Environments. Choisissez New environment.
Configuration des environnements GitHub
Dans le champ Name, saisissez "production" et validez.
Définir l'environnement
Cliquez sur le bouton No restriction et sélectionnez Selected branches and tags.
Définir les restrictions d'environnement
Ensuite, cliquez sur Add deployment branch or tag rule, saisissez "production" dans le champ Name pattern, puis cliquez sur Add rule.
Définir la branche de l'environnement
Définir la branche de l'environnement
Dans la section Environment secrets, cliquez sur Add secret.
Ajouter un secret
Affichez maintenant la clé privée que vous avez générée précédemment :
cat /tmp/ssh_key
Dans la configuration du secret, utilisez STACKHERO_SSH_PRIVATE_KEY comme Nom et collez la clé privée comme Valeur.
Définir le secret de la clé privée SSH
Ensuite, dans la section Environment variables, cliquez sur Add variable.
Définir les variables
Saisissez STACKHERO_ENDPOINT comme Nom et collez l'endpoint de votre service Python comme Valeur. Vous trouverez cet endpoint dans votre tableau de bord Stackhero.
Dé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.
Supprimer les clés générées
Pour des raisons de sécurité, il est conseillé de supprimer les clés SSH de votre ordinateur maintenant, car vous n'en aurez plus besoin :
rm /tmp/ssh_key /tmp/ssh_key.pub
Configurer le workflow GitHub Actions
Dans votre dépôt Git, créez un dossier nommé .github/workflows s'il n'existe pas déjà. Ajoutez ensuite un fichier nommé deploy-to-stackhero.yml à l'intérieur.
# 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 lors d'un git push.
# N'oubliez pas de créer un environnement correspondant au nom de la branche sur GitHub (dans "Settings"/"Environments").
# Ajoutez ensuite le secret correspondant "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 de branche correspondant sur GitHub dans "Settings"/"Environments".
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
Une fois le fichier de workflow ajouté, vous pouvez valider vos modifications :
git add -A .
git commit -m "Ajout de GitHub Actions pour déployer sur Stackhero"
Vous pouvez créer une branche production avec :
git checkout -b production
Et pousser vos modifications sur GitHub :
git push --set-upstream origin production
Cela poussera votre code sur la branche production de GitHub et déclenchera GitHub Actions, qui déploiera votre code sur votre instance Stackhero.
Pour vérifier le statut de votre déploiement, rendez-vous simplement sur la page de votre projet GitHub et cliquez sur Actions.
GitHub Actions ayant déployé en production
C'est tout. Vous avez maintenant des déploiements automatiques en production grâce à GitHub Actions.
Création de l'environnement de staging
La mise en place d'un environnement de staging est quasiment identique à la configuration de la production. Il vous suffit de répéter les étapes ci-dessus en remplaçant production par staging partout où cela apparaît.
Après avoir configuré l'environnement, vous pouvez créer une branche staging comme ceci :
git checkout -b staging
Puis poussez votre branche staging sur GitHub :
git push --set-upstream origin staging
Votre branche staging sera alors automatiquement déployée sur l'instance Python que vous avez dédiée au staging.
Aller plus loin
Il est recommandé de protéger les branches production et staging pour éviter les pushs directs. Avec cette configuration, les membres de l'équipe devront créer des pull requests vers la branche staging, qui devront être relues et fusionnées par des utilisateurs ayant les droits nécessaires. Une fois les changements validés sur la plateforme de staging, la pull request pourra être fusionnée dans la branche production par une personne autorisée.
Ce workflow permet de garantir que seuls les changements validés arrivent en production, tout en améliorant la fiabilité grâce à des tests des nouvelles fonctionnalités sur le staging avant leur mise en ligne.