Python: Déployer avec GitHub Actions

Comment déployer votre code Python en utilisant 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 vous permet d'automatiser des tâches, comme le déploiement de votre code Python sur des serveurs de production.

Dans ce guide, vous apprendrez à utiliser 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 cela, vous maintiendrez deux branches : staging et production. Le code poussé sur ces branches sera automatiquement déployé sur l'instance Stackhero correspondante.

Avoir une instance de staging n'est pas obligatoire. Vous pouvez suivre ce guide avec une seule instance de production. Cependant, pour garantir des déploiements fluides et être pleinement confiant lors du déploiement en production, il est fortement recommandé de maintenir à la fois une instance de staging et une instance de production. Cette pratique est un standard de l'industrie et une approche judicieuse qui peut vous aider à éviter de nombreux problèmes.

Avant de commencer, assurez-vous de disposer d'un compte GitHub avec un dépôt hébergeant votre code.

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 renommer ces services en "Production" et "Staging".

Vous n'avez pas encore de compte Stackhero ? Vous pouvez vous inscrire en seulement deux minutes gratuitement et ensuite créer vos services cloud Python en quelques clics.

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

Les clés SSH permettent à GitHub Actions de se connecter en toute sécurité à votre service Python pour le déploiement du code. Cette étape est essentielle pour protéger vos services Stackhero.

Sur votre ordinateur, générez de nouvelles clés SSH en exécutant :

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

Tout d'abord, récupérez la clé publique que vous venez de générer :

cat /tmp/ssh_key.pub

Ensuite, dans le tableau de bord Stackhero, sélectionnez votre service Python "production" et cliquez sur le bouton "Configurer".

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

Suivez ces étapes :

  1. Dans Clés publiques SSH, cliquez sur Ajouter une clé publique.
  2. Dans Description, entrez GitHub Action.
  3. Dans Clé, collez la clé publique que vous avez copiée depuis votre ordinateur.

Ajouter une clé publiqueAjouter une clé publique

Accédez à la page de votre projet GitHub et cliquez sur Settings, puis sur Environments. Sélectionnez New environment.

Configurer les environnements GitHubConfigurer les environnements GitHub

Dans le champ Name, tapez "production" et confirmez.

Définir l'environnementDéfinir l'environnement

Cliquez sur le bouton No restriction et choisissez Selected branches and tags.

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

Ensuite, 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

Dans la section Environment secrets, cliquez sur Add secret.

Ajouter un secretAjouter un secret

Maintenant, récupérez 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 SSHDéfinir le secret de la clé privée SSH

Ensuite, dans la section Environment variables, cliquez sur Add variable.

Définir les variablesDéfinir les variables

Entrez STACKHERO_ENDPOINT comme Nom et collez votre endpoint de service Python comme Valeur. 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é, supprimez les clés SSH de votre ordinateur car vous n'en aurez plus besoin :

rm /tmp/ssh_key /tmp/ssh_key.pub

Dans votre dépôt Git, créez un répertoire nommé .github/workflows s'il n'existe pas déjà. Ensuite, créez un fichier nommé deploy-to-stackhero.yml dans ce répertoire.

# 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 au nom de la branche dans GitHub (dans "Settings"/"Environments").
    # Puis ajoutez 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 sous "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Validez ces modifications en exécutant :

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

Ensuite, créez une branche de production :

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 et déclenche GitHub Actions pour déployer le code sur votre instance Stackhero.

Pour vérifier le déploiement, rendez-vous sur la page du projet GitHub et cliquez sur Actions.

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

Félicitations, vous pouvez maintenant déployer automatiquement votre code en production en utilisant GitHub Actions !

Configurer l'environnement de staging est très similaire à la configuration de l'environnement de production. Répétez simplement les étapes ci-dessus en remplaçant production par staging.

Après avoir configuré l'environnement, créez une branche de staging :

git checkout -b staging

Ensuite, poussez votre branche de staging sur GitHub :

git push --set-upstream origin staging

GitHub Actions déploiera automatiquement votre branche de staging sur l'instance Python désignée pour le staging.

Il est recommandé de protéger les branches production et staging pour empêcher les pushs directs. Avec cette configuration, des pull requests doivent être créées pour la branche staging et fusionnées par des membres de l'équipe ayant les droits appropriés. Une fois validées sur la plateforme de staging, les pull requests peuvent être fusionnées dans la branche production par les mêmes personnes autorisées.

Cette approche améliore la sécurité en garantissant que seuls les changements approuvés sont déployés et améliore la fiabilité en testant les nouvelles fonctionnalités sur la plateforme de staging avant qu'elles n'atteignent la production.