Ruby: Déployer avec GitHub Actions

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

Dans ce guide, vous allez découvrir comment configurer GitHub Actions de manière sécurisée et fiable pour déployer automatiquement votre code Ruby sur vos environnements de staging et de production. Cette méthode garantit des déploiements cohérents et réduit le risque d'erreurs.

Pour commencer, vous allez utiliser 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.

Disposer d'une instance de staging est optionnel. Vous pouvez suivre ce guide avec uniquement une instance de production, mais il est fortement recommandé de mettre en place à la fois des environnements de staging et de production. C'est 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 de disposer d'un compte GitHub et d'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 conseillé 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 cloud Ruby 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 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 Clés publiques SSH, cliquez sur Ajouter une clé publique.
  2. Pour Description, saisissez GitHub Action.
  3. Pour Clé, 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 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 enregistrez-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écurisée, 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 sur 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, veillez à 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 plus 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 .github/workflows. Dans ce dossier, 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 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 mise en place 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 à chaque fois que 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 désormais 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 conseillé 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 disposant des droits appropriés peuvent relire et valider les pull requests vers staging, puis, une fois tout validé, fusionner les changements dans production de la même manière.

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 à garantir des déploiements fluides et un environnement de production stable.