Ruby: Déployer avec GitHub Actions

Comment déployer votre code Ruby à l'aide de 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 facilement des tâches comme le déploiement de votre code Ruby sur vos serveurs de production. Aucune étape manuelle n'est requise.

Dans ce guide, vous allez apprendre à configurer GitHub Actions de façon sécuritaire et fiable pour déployer automatiquement votre code Ruby sur vos environnements de staging et de production. Cette méthode garantit la cohérence de vos déploiements et réduit le risque d'erreurs.

Pour commencer, vous allez travailler avec deux branches dans votre dépôt GitHub : staging et production. Chaque fois que vous poussez du code sur l'une de ces branches, vos modifications seront automatiquement déployées sur l'instance Stackhero correspondante.

Avoir une instance de staging est optionnel. Bien que vous puissiez suivre ce guide avec seulement une instance de production, il est fortement recommandé de mettre en place à la fois des environnements de staging et de production. Il s'agit d'une bonne pratique reconnue dans l'industrie et cela permet de détecter les problèmes avant qu'ils n'atteignent vos utilisateurs en production.

Avant de commencer, assurez-vous d'avoir un compte GitHub et un dépôt contenant votre code Ruby.

Rendez-vous sur votre tableau de bord Stackhero pour créer deux services Ruby, un pour le staging et un autre pour la production. Pour plus de clarté, il est recommandé de renommer ces services en « Production » et « Staging ».

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

Exemple de services production et stagingExemple de services production et staging

Pour permettre à GitHub Actions de déployer votre code, vous devez configurer des clés SSH. Cela garantit que seules les actions autorisées peuvent se connecter à vos services Stackhero, assurant ainsi la sécurité de vos déploiements.

Vous pouvez générer une nouvelle paire de clés SSH sur votre ordinateur avec :

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

Ensuite, récupérez la clé publique que vous venez de créer :

cat /tmp/ssh_key.pub

Dans le tableau de bord Stackhero, sélectionnez votre service Ruby « production » et cliquez sur le bouton « Configurer ». Accéder aux paramètres du serviceAccéder aux paramètres du service

Puis :

  1. Sous SSH public keys, cliquez sur Add a public key.
  2. Pour Description, saisissez GitHub Action.
  3. Pour Key, collez le contenu de la clé publique depuis votre ordinateur.

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

Rendez-vous maintenant sur le site de GitHub et ouvrez votre projet.

Allez dans Settings > Environments, puis cliquez sur New environment. Configuration des environnements GitHubConfiguration des environnements GitHub

Nommez votre environnement « production » et sauvegardez-le. 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

Cliquez sur Add deployment branch or tag rule, saisissez « production » comme motif, puis ajoutez la règle. 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

Pour stocker votre clé privée SSH de façon sécuritaire, allez dans Environment secrets et cliquez sur Add secret. Ajouter un secretAjouter un secret

Récupérez votre clé privée depuis votre ordinateur :

cat /tmp/ssh_key

Pour Name, saisissez STACKHERO_SSH_PRIVATE_KEY. Pour Value, collez le contenu de votre clé privée. Définir le secret de la clé privée SSHDéfinir le secret de la clé privée SSH

Ensuite, ajoutez l'endpoint de votre service Ruby comme variable d'environnement. Cliquez sur Add variable dans Environment variables. Définir les variablesDéfinir les variables

Pour Name, saisissez STACKHERO_ENDPOINT. Pour Value, collez l'endpoint de votre service Ruby, que vous trouverez dans votre tableau de bord Stackhero. Définir la variable endpointDéfinir la variable endpoint

Si vous avez configuré un nom de domaine personnalisé pour votre service, assurez-vous d'utiliser ce domaine personnalisé à la place de <XXXXXX>.stackhero-network.com.

Une fois vos clés configurées dans Stackhero et GitHub, vous pouvez les supprimer de votre ordinateur pour des raisons de sécurité.

rm /tmp/ssh_key /tmp/ssh_key.pub

Sur votre machine locale, dans votre dépôt Git, créez un dossier nommé .github/workflows. À l'intérieur de ce dossier, créez un fichier appelé 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 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 "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 }}

Après avoir créé le fichier de workflow, vous pouvez valider vos modifications.

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

Ensuite, créez une branche production.

git checkout -b production

Enfin, poussez vos modifications sur GitHub.

git push --set-upstream origin production

Ce dernier git push va envoyer votre code sur la branche production de GitHub. GitHub Actions va alors démarrer automatiquement et déployer votre code sur votre instance Stackhero.

Pour voir votre workflow en action, rendez-vous sur la page GitHub de votre projet et cliquez sur Actions. GitHub Actions ayant déployé en productionGitHub Actions ayant déployé en production

Félicitations, vous venez de mettre en place le déploiement continu en production avec GitHub Actions.

La configuration de l'environnement de staging suit exactement le même processus que pour la production. Il suffit de répéter les étapes ci-dessus en remplaçant production par staging partout où c'est nécessaire.

Une fois votre environnement de staging configuré, vous pouvez créer une branche staging.

git checkout -b staging

Poussez votre branche staging sur GitHub.

git push --set-upstream origin staging

GitHub Actions va maintenant déployer automatiquement votre branche staging sur l'instance Ruby Stackhero dédiée au staging.

Pour renforcer la sécurité de vos déploiements, il est recommandé de protéger vos branches production et staging. Cela signifie que les pushs directs sont restreints et que les modifications doivent passer par une pull request. Les membres de l'équipe ayant les droits appropriés peuvent relire et approuver les pull requests vers staging, puis, une fois tout validé, fusionner les changements dans production de la même façon.

En suivant ce workflow, vous augmentez la sécurité (seuls les utilisateurs autorisés peuvent déployer sur staging et production) et la fiabilité (toutes les nouvelles fonctionnalités sont testées en staging avant d'arriver en production). Cela contribue à assurer des déploiements fluides et un environnement de production stable.