Ruby: Distribuire con GitHub Actions

Come distribuire il tuo codice Ruby utilizzando GitHub Actions

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Ruby cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Distribuisci la tua applicazione in pochi secondi con un semplice git push.
  • Usa il tuo nome di dominio e beneficia della configurazione automatica dei certificati HTTPS per una sicurezza potenziata.
  • Goditi la tranquillità con backup automatici, aggiornamenti con un clic, e una tariffazione semplice, trasparente e prevedibile.
  • Ottieni prestazioni ottimali e una sicurezza robusta grazie a una VM privata e dedicata.

Risparmia tempo e semplificati la vita: bastano solo 5 minuti per provare la soluzione Ruby cloud hosting di Stackhero!

GitHub Actions ti consente di automatizzare attività come la distribuzione del tuo codice Ruby sui server di produzione.

In questa guida, imparerai a utilizzare GitHub Actions in modo sicuro e affidabile per distribuire il tuo codice Ruby in ambienti di staging e produzione.

Per fare ciò, manterrai due branch: staging e production, dove il codice inviato a questi branch verrà automaticamente distribuito all'istanza corrispondente di Stackhero.

Avere un'istanza di staging non è obbligatorio. Puoi seguire questa guida e avere solo un'istanza di produzione. Tuttavia, per garantire distribuzioni fluide ed essere pienamente sicuro durante la distribuzione in produzione, è fortemente consigliato mantenere sia un'istanza di staging che una di produzione. Questa pratica è uno standard del settore e una buona pratica, aiutandoti a evitare numerosi problemi.

Per procedere con questa guida, hai bisogno di un account GitHub con un repository che ospita il tuo codice.

Accedi alla tua dashboard di Stackhero e crea due servizi Stackhero, uno per lo staging e uno per la produzione. Per evitare confusione, ti consigliamo di rinominare questi servizi in "Production" e "Staging".

Non hai ancora un account Stackhero? Puoi crearne uno in soli due minuti, gratuitamente, e poi creare i tuoi servizi cloud Ruby con pochi clic.

Esempio di servizi di produzione e stagingEsempio di servizi di produzione e staging

Le chiavi SSH daranno a GitHub Actions il diritto di connettersi al tuo servizio Ruby per distribuire il tuo codice. Questa è una parte essenziale per proteggere i tuoi servizi Stackhero.

Sul tuo computer, crea nuove chiavi SSH:

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

Recupera la chiave pubblica che hai appena generato:

cat /tmp/ssh_key.pub

Nella dashboard di Stackhero, seleziona il tuo servizio Ruby "production" e clicca sul pulsante "Configure". Ottieni le impostazioni del servizioOttieni le impostazioni del servizio

Poi:

  1. In SSH public keys, clicca su Add a public key.
  2. In Description, imposta GitHub Action.
  3. In Key, incolla il contenuto della chiave pubblica che hai sul tuo computer.

Ottieni le impostazioni del servizioOttieni le impostazioni del servizio

Vai al sito di GitHub e seleziona il tuo progetto.

Clicca su Settings/Environments e poi su New environment. Configurazione degli ambienti GitHubConfigurazione degli ambienti GitHub

In Name, imposta "production" e conferma. Impostazione dell'ambienteImpostazione dell'ambiente

Clicca sul pulsante No restriction e seleziona Selected branches and tags. Impostazione delle restrizioni dell'ambienteImpostazione delle restrizioni dell'ambiente

Clicca su Add deployment branch or tag rule, inserisci "production" in Name pattern, e clicca su Add rule. Impostazione del branch dell'ambienteImpostazione del branch dell'ambiente Impostazione del branch dell'ambienteImpostazione del branch dell'ambiente

In Environment secrets, clicca su Add secret. Aggiungi segretoAggiungi segreto

Recupera la chiave privata che hai precedentemente generato sul tuo computer:

cat /tmp/ssh_key

In Name, metti STACKHERO_SSH_PRIVATE_KEY. In Value, incolla la tua chiave privata. Impostazione del segreto della chiave privata SSHImpostazione del segreto della chiave privata SSH

In Environment variables, clicca su Add variable. Impostazione delle variabiliImpostazione delle variabili

In Name, metti STACKHERO_ENDPOINT. In Value, incolla l'endpoint del tuo servizio Ruby. Lo troverai nella tua dashboard di Stackhero. Impostazione della variabile dell'endpointImpostazione della variabile dell'endpoint

Se hai personalizzato il nome di dominio del tuo servizio, usa la versione personalizzata invece di xxxxxx.stackhero-network.com.

Poiché non avrai più bisogno delle chiavi SSH generate in precedenza, puoi eliminarle dal tuo computer per motivi di sicurezza:

rm /tmp/ssh_key /tmp/ssh_key.pub

Nel tuo repository Git, sul tuo computer, crea una directory chiamata .github/workflows. In questa directory, crea un file chiamato deploy-to-stackhero.yml.

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

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

on:
  push:
    # Elenco dei branch che attiveranno l'azione di distribuzione a seguito di un git push.
    # Non dimenticare di creare un ambiente corrispondente al nome del branch in GitHub (in "Settings"/"Environments").
    # Poi aggiungi il segreto corrispondente "STACKHERO_SSH_PRIVATE_KEY" e la variabile "STACKHERO_ENDPOINT" in questo ambiente.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Il segreto "STACKHERO_SSH_PRIVATE_KEY" e la variabile "STACKHERO_ENDPOINT" devono essere definiti nell'ambiente del branch corrispondente su GitHub sotto "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Esegui il commit delle tue modifiche:

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

Poi crea un branch di produzione:

git checkout -b production

Infine, invia le tue modifiche a GitHub:

git push --set-upstream origin production

Questo comando finale git push invierà il codice dal tuo computer al branch production di GitHub. GitHub Actions verrà eseguito automaticamente e distribuirà questo codice alla tua istanza Stackhero.

Per verificare questa azione, vai al sito di GitHub, seleziona il tuo progetto e clicca su Actions. GitHub Actions che ha distribuito in produzioneGitHub Actions che ha distribuito in produzione

Congratulazioni, ora puoi distribuire automaticamente il tuo codice in produzione tramite GitHub Actions!

La creazione dell'ambiente di staging è simile alla configurazione dell'ambiente di produzione. Per crearlo, ripeti i passaggi delle sezioni precedenti di questa guida, semplicemente sostituendo production con staging.

Poi crea un branch di staging:

git checkout -b staging

Infine, invia le tue modifiche a GitHub:

git push --set-upstream origin staging

GitHub Actions distribuirà automaticamente il tuo branch di staging all'istanza Ruby designata per lo staging.

Una buona pratica è proteggere i branch production e staging per impedire push diretti su di essi. In questo caso, deve essere creata una pull request per il branch staging e poi fusa da persone con i diritti di inviare codice allo staging. Una volta convalidata sulla piattaforma di staging, la pull request può essere fusa nel branch production dalle stesse persone che hanno i diritti.

Questo approccio garantisce sicurezza (solo le persone autorizzate possono inviare su staging e production) e affidabilità (le nuove funzionalità vengono testate su una piattaforma di staging prima di essere inviate al branch production).