Ruby: Déployer avec GitHub Actions

Comment déployer votre code Ruby en utilisant GitHub Actions

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution Ruby 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 Ruby cloud hosting de Stackhero !

GitHub Actions vous permet d'automatiser des tâches telles que le déploiement de votre code Ruby 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 Ruby sur des environnements de staging et de production.

Pour cela, vous maintiendrez deux branches : staging et production, où 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 bonne pratique, vous aidant à éviter de nombreux problèmes.

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

Accédez à votre tableau de bord Stackhero et créez deux services Stackhero, un pour le staging et un pour la production. Pour éviter toute confusion, nous recommandons de renommer ces services en "Production" et "Staging".

Vous n'avez pas encore de compte Stackhero ? Vous pouvez en créer un en seulement deux minutes, gratuitement, puis créer vos services cloud Ruby en quelques clics.

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

Les clés SSH donneront à GitHub Actions le droit de se connecter à votre service Ruby pour déployer votre code. C'est une partie essentielle pour sécuriser vos services Stackhero.

Sur votre ordinateur, créez de nouvelles clés SSH :

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

Récupérez la clé publique que vous venez de générer :

cat /tmp/ssh_key.pub

Dans le tableau de bord Stackhero, sélectionnez votre service Ruby "production" et cliquez sur le bouton "Configurer". Obtenir les paramètres du serviceObtenir les paramètres du service

Ensuite :

  1. Dans Clés publiques SSH, cliquez sur Ajouter une clé publique.
  2. Dans Description, mettez GitHub Action.
  3. Dans Clé, collez le contenu de la clé publique que vous avez sur votre ordinateur.

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

Accédez au site GitHub et sélectionnez votre projet.

Cliquez sur Settings/Environments puis sur New environment. Configurer les environnements GitHubConfigurer les environnements GitHub

Dans Name, mettez "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 de l'environnementDéfinir les restrictions de l'environnement

Cliquez sur Add deployment branch or tag rule, entrez "production" dans 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 Environment secrets, cliquez sur Add secret. Ajouter un secretAjouter un secret

Récupérez la clé privée que vous avez précédemment générée sur votre ordinateur :

cat /tmp/ssh_key

Dans Name, mettez STACKHERO_SSH_PRIVATE_KEY. Dans Value, collez votre clé privée. Définir le secret de la clé privée SSHDéfinir le secret de la clé privée SSH

Dans Environment variables, cliquez sur Add variable. Définir les variablesDéfinir les variables

Dans Name, mettez STACKHERO_ENDPOINT. Dans Value, collez l'endpoint de votre service Ruby. Vous le trouverez 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.

Puisque vous n'aurez plus besoin des clés SSH générées précédemment, vous pouvez les supprimer de votre ordinateur pour des raisons de sécurité :

rm /tmp/ssh_key /tmp/ssh_key.pub

Dans votre dépôt Git, sur votre ordinateur, créez un répertoire nommé .github/workflows. Dans ce répertoire, créez un fichier nommé deploy-to-stackhero.yml.

# 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 git push.
    # N'oubliez pas de créer un environnement correspondant au nom de la branche dans GitHub (dans "Settings"/"Environments").
    # Ensuite, 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 }}

Commitez vos modifications :

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 finale git push poussera le code de votre ordinateur vers la branche GitHub production. GitHub Actions s'exécutera automatiquement et déploiera ce code sur votre instance Stackhero.

Pour vérifier cette action, accédez au site GitHub, sélectionnez votre projet, et cliquez sur Actions. GitHub Actions qui a déployé en productionGitHub Actions qui a déployé en production

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

La création de l'environnement de staging est similaire à la configuration de l'environnement de production. Pour le créer, répétez les étapes des sections précédentes de ce guide, en remplaçant simplement production par staging.

Ensuite, créez une branche de staging :

git checkout -b staging

Enfin, poussez vos modifications sur GitHub :

git push --set-upstream origin staging

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

Une bonne pratique consiste à protéger les branches production et staging pour empêcher les pushs directs sur celles-ci. Dans ce cas, une pull request doit être créée pour la branche staging puis fusionnée par des personnes ayant les droits de pousser du code sur le staging. Une fois validée sur la plateforme de staging, la pull request peut être fusionnée dans la branche production par les mêmes personnes ayant les droits.

Cette approche garantit la sécurité (seules les personnes autorisées peuvent pousser sur staging et production) et la fiabilité (les nouvelles fonctionnalités sont testées sur une plateforme de staging avant d'être poussées sur la branche production).