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.
Creazione dei servizi Ruby
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 staging
Configurare le chiavi SSH
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 ""
Impostare la chiave pubblica
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 servizio
Poi:
- In
SSH public keys, clicca suAdd a public key. - In
Description, impostaGitHub Action. - In
Key, incolla il contenuto della chiave pubblica che hai sul tuo computer.
Ottieni le impostazioni del servizio
Impostare la chiave privata
Vai al sito di GitHub e seleziona il tuo progetto.
Clicca su Settings/Environments e poi su New environment.
Configurazione degli ambienti GitHub
In Name, imposta "production" e conferma.
Impostazione dell'ambiente
Clicca sul pulsante No restriction e seleziona Selected branches and tags.
Impostazione 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'ambiente
Impostazione del branch dell'ambiente
In Environment secrets, clicca su Add secret.
Aggiungi 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 SSH
In Environment variables, clicca su Add variable.
Impostazione 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'endpoint
Se hai personalizzato il nome di dominio del tuo servizio, usa la versione personalizzata invece di xxxxxx.stackhero-network.com.
Eliminare le chiavi generate
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
Configurare il workflow di GitHub Actions
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 produzione
Congratulazioni, ora puoi distribuire automaticamente il tuo codice in produzione tramite GitHub Actions!
Creazione dell'ambiente di staging
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.
Andare oltre
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).