Ruby: Deployen met GitHub Actions

Hoe u uw Ruby-code kunt deployen met GitHub Actions

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Ruby cloud oplossing die tal van voordelen biedt, waaronder:

  • Implementeer uw applicatie in seconden met een eenvoudige git push.
  • Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
  • Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
  • Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Ruby cloud hosting oplossing van Stackhero te proberen!

GitHub Actions maakt het eenvoudig om taken te automatiseren, zoals het deployen van uw Ruby-code naar uw productieomgevingen. Er zijn geen handmatige stappen nodig.

In deze handleiding ontdekt u hoe u GitHub Actions veilig en betrouwbaar kunt instellen om uw Ruby-code automatisch te deployen naar zowel staging- als productieomgevingen. Deze aanpak zorgt voor consistente deployments en verkleint de kans op fouten.

Om te beginnen werkt u met twee branches in uw GitHub-repository: staging en production. Telkens wanneer u code pusht naar deze branches, worden uw wijzigingen automatisch gedeployed naar de bijbehorende Stackhero-instantie.

Het hebben van een staging-instantie is optioneel. U kunt deze handleiding volgen met alleen een productieomgeving, maar het is sterk aanbevolen om zowel staging- als productieomgevingen in te richten. Dit wordt gezien als een best practice binnen de industrie en helpt problemen te detecteren voordat ze uw productiegebruikers bereiken.

Voordat u begint, zorg ervoor dat u een GitHub-account heeft en een repository met uw Ruby-code.

Ga naar uw Stackhero-dashboard om twee Ruby-services aan te maken: één voor staging en één voor productie. Voor de duidelijkheid is het verstandig om deze services te hernoemen naar "Production" en "Staging".

Heeft u nog geen Stackhero-account? U kunt zich gratis aanmelden in slechts een paar minuten en vervolgens uw Ruby cloud services met een paar klikken aanmaken.

Voorbeeld van productie- en staging-servicesVoorbeeld van productie- en staging-services

Om GitHub Actions toe te staan uw code te deployen, moet u SSH-sleutels instellen. Dit zorgt ervoor dat alleen geautoriseerde acties verbinding kunnen maken met uw Stackhero-services, waardoor uw deployments veilig blijven.

U kunt een nieuw SSH-sleutelpaar genereren op uw computer met:

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

Haal vervolgens de publieke sleutel op die u zojuist heeft aangemaakt:

cat /tmp/ssh_key.pub

Selecteer in het Stackhero-dashboard uw "production" Ruby-service en klik op de knop "Configure". Service-instellingen openenService-instellingen openen

Vervolgens:

  1. Klik onder SSH public keys op Add a public key.
  2. Vul bij Description in: GitHub Action.
  3. Plak bij Key de inhoud van uw publieke sleutel vanaf uw computer.

Service-instellingen openenService-instellingen openen

Ga nu naar de GitHub-website en open uw project.

Ga naar Settings > Environments en klik op New environment. GitHub-omgevingen configurerenGitHub-omgevingen configureren

Geef uw omgeving de naam "production" en sla deze op. Omgeving instellenOmgeving instellen

Klik op de knop No restriction en kies Selected branches and tags. Omgevingsrestricties instellenOmgevingsrestricties instellen

Klik op Add deployment branch or tag rule, voer "production" in als patroon en voeg de regel toe. Omgevingsbranch instellenOmgevingsbranch instellen Omgevingsbranch instellenOmgevingsbranch instellen

Om uw SSH private key veilig op te slaan, gaat u naar Environment secrets en klikt u op Add secret. Secret toevoegenSecret toevoegen

Haal uw private key op vanaf uw computer:

cat /tmp/ssh_key

Voer bij Name in: STACKHERO_SSH_PRIVATE_KEY. Bij Value plakt u de inhoud van uw private key. SSH private key secret instellenSSH private key secret instellen

Voeg vervolgens het endpoint van uw Ruby-service toe als omgevingsvariabele. Klik op Add variable onder Environment variables. Variabelen instellenVariabelen instellen

Voer bij Name in: STACKHERO_ENDPOINT. Bij Value plakt u het endpoint van uw Ruby-service, te vinden in uw Stackhero-dashboard. Endpointvariabele instellenEndpointvariabele instellen

Als u een eigen domeinnaam voor uw service heeft ingesteld, gebruik dan dat eigen domein in plaats van <XXXXXX>.stackhero-network.com.

Nadat uw sleutels zijn ingesteld in Stackhero en GitHub, kunt u ze van uw computer verwijderen voor extra veiligheid.

rm /tmp/ssh_key /tmp/ssh_key.pub

Maak op uw lokale machine, in uw Git-repository, een map aan genaamd .github/workflows. Maak in deze map een bestand aan met de naam deploy-to-stackhero.yml.

# Bestand: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # Lijst van branches die de deploy-actie triggeren na een git push.
    # Vergeet niet om een omgeving aan te maken die overeenkomt met de branchnaam in GitHub (onder "Settings"/"Environments").
    # Voeg vervolgens het bijbehorende secret "STACKHERO_SSH_PRIVATE_KEY" en de variabele "STACKHERO_ENDPOINT" toe aan deze omgeving.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Het secret "STACKHERO_SSH_PRIVATE_KEY" en de variabele "STACKHERO_ENDPOINT" moeten zijn ingesteld in de bijbehorende branch-omgeving op GitHub onder "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Nadat u het workflowbestand heeft aangemaakt, kunt u uw wijzigingen committen.

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

Maak vervolgens een production branch aan.

git checkout -b production

Push ten slotte uw wijzigingen naar GitHub.

git push --set-upstream origin production

Deze laatste git push uploadt uw code naar de production branch op GitHub. GitHub Actions zal automatisch starten en uw code deployen naar uw Stackhero-instantie.

Om uw workflow in actie te zien, gaat u naar de GitHub-pagina van uw project en klikt u op Actions. GitHub Actions die naar productie heeft gedeployedGitHub Actions die naar productie heeft gedeployed

Gefeliciteerd, u heeft zojuist continuous deployment naar productie opgezet met GitHub Actions.

Het opzetten van de staging-omgeving verloopt op exact dezelfde manier als productie. Herhaal simpelweg bovenstaande stappen, waarbij u production vervangt door staging waar nodig.

Zodra uw staging-omgeving is ingericht, kunt u een staging branch aanmaken.

git checkout -b staging

Push uw staging branch naar GitHub.

git push --set-upstream origin staging

GitHub Actions zal nu automatisch uw staging branch deployen naar uw toegewezen Stackhero Ruby-instantie voor staging.

Om uw deployments extra te beveiligen, is het verstandig om uw production en staging branches te beschermen. Dit betekent dat directe pushes worden beperkt en wijzigingen via een pull request moeten verlopen. Teamleden met de juiste rechten kunnen pull requests naar staging beoordelen en goedkeuren, en zodra alles akkoord is, kunnen de wijzigingen op dezelfde manier naar production worden gemerged.

Door deze workflow te volgen, verhoogt u de veiligheid (alleen geautoriseerde gebruikers kunnen deployen naar staging en production) en de betrouwbaarheid (alle nieuwe features worden eerst in staging getest voordat ze naar productie gaan). Dit helpt om uw deployments soepel te laten verlopen en uw productieomgeving stabiel te houden.