Node.js: Distribuire con GitHub Actions
Scopri come distribuire il tuo codice Node.js utilizzando GitHub Actions
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione Node.js 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 di hosting cloud Node.js di Stackhero!
GitHub Actions semplifica l'automazione di attività come la distribuzione del codice Node.js su server di produzione. In questa guida, vedremo come distribuire in modo sicuro e affidabile la tua applicazione Node.js sia in ambiente di staging che di produzione utilizzando GitHub Actions.
Ti consigliamo di mantenere due branch: staging e production. Quando esegui il push del codice su uno di questi branch, le modifiche vengono distribuite automaticamente al servizio Stackhero corrispondente.
Disporre di un'istanza di staging è facoltativo. Puoi seguire questa guida anche utilizzando solo un'istanza di produzione. Tuttavia, per rendere i deployment più fluidi e aumentare la sicurezza prima della messa in produzione, è altamente consigliato mantenere sia un ambiente di staging che uno di produzione. Questo approccio è ampiamente adottato nel settore e aiuta a prevenire i problemi di deployment più comuni.
Prima di iniziare, assicurati di avere un account GitHub e un repository che ospiti il tuo codice Node.js.
Creazione dei servizi Node.js
Per prima cosa, accedi alla tua dashboard Stackhero e crea due servizi Stackhero: uno per lo staging e uno per la produzione. Per maggiore chiarezza, puoi nominare questi servizi "Staging" e "Production".
Se non hai ancora un account Stackhero, puoi crearne uno gratuitamente in due minuti e configurare i tuoi servizi cloud Node.js in pochi clic.
Esempio di servizi Node.js
Configurare le chiavi SSH
Le chiavi SSH consentono a GitHub Actions di connettersi in modo sicuro al tuo servizio Node.js durante la distribuzione del codice. Questo passaggio è fondamentale per proteggere i tuoi servizi Stackhero.
Sul tuo computer, puoi generare nuove chiavi SSH con:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Impostare la chiave pubblica
Per visualizzare la chiave pubblica appena creata, esegui:
cat /tmp/ssh_key.pub
Successivamente, nella dashboard Stackhero, seleziona il servizio Node.js di produzione e clicca sul pulsante Configure.
Accedi alle impostazioni del servizio
Procedi con questi passaggi:
- In SSH public keys, clicca su Add a public key.
- Per Description, inserisci
GitHub Action. - Per Key, incolla la chiave pubblica copiata in precedenza.
Accedi alle impostazioni del servizio
Impostare la chiave privata
Ora passa su GitHub e apri il repository del tuo progetto. Clicca su Settings, poi seleziona Environments. Scegli New environment.
Configurazione degli ambienti GitHub
Inserisci "production" come Name e conferma.
Impostazione dell'ambiente
Clicca sul pulsante No restriction, quindi scegli Selected branches and tags.
Impostazione delle restrizioni dell'ambiente
Ora clicca su Add deployment branch or tag rule, inserisci "production" nel campo 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 secret
Per recuperare la chiave privata generata, esegui:
cat /tmp/ssh_key
Su GitHub, usa STACKHERO_SSH_PRIVATE_KEY come Name e incolla la tua chiave privata nel campo Value.
Impostazione del secret della chiave privata SSH
Poi, in Environment variables, clicca su Add variable.
Impostazione delle variabili
Inserisci STACKHERO_ENDPOINT come Name e incolla l'endpoint del tuo servizio Node.js nel campo Value. Puoi trovare questo endpoint nella dashboard Stackhero.
Impostazione della variabile endpoint
Se hai impostato un dominio personalizzato per il tuo servizio, utilizza il tuo dominio personalizzato al posto di <XXXXXX>.stackhero-network.com.
Eliminare le chiavi generate
Per motivi di sicurezza, è consigliabile eliminare le chiavi SSH dal tuo computer dopo averle configurate su Stackhero e GitHub:
rm /tmp/ssh_key /tmp/ssh_key.pub
Configurare il workflow di GitHub Actions
All'interno del tuo repository Git, crea una directory .github/workflows se non esiste già. Poi aggiungi 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:
# Elenca i branch che attivano l'azione di deployment. Assicurati che esista un ambiente in GitHub (in "Settings" > "Environments") per ogni branch.
# Poi aggiungi il secret STACKHERO_SSH_PRIVATE_KEY e la variabile STACKHERO_ENDPOINT corrispondenti in quell'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:
# STACKHERO_SSH_PRIVATE_KEY e STACKHERO_ENDPOINT devono essere impostati nell'ambiente GitHub corrispondente.
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
Una volta creato il file di workflow, puoi effettuare il commit delle modifiche così:
git add -A .
git commit -m "Aggiungi GitHub Actions per il deploy su Stackhero"
Per creare un branch di produzione, esegui:
git checkout -b production
Poi esegui il push delle modifiche su GitHub:
git push --set-upstream origin production
Questo push invia il tuo codice al branch production e attiva GitHub Actions per distribuire il codice sul servizio Stackhero. Per verificare la distribuzione, apri il tuo progetto su GitHub e clicca su Actions.
GitHub Actions che ha distribuito in produzione
Ecco fatto. Il tuo codice è ora configurato per la distribuzione automatica in produzione tramite GitHub Actions.
Creazione dell'ambiente di staging
La configurazione dell'ambiente di staging è praticamente identica a quella di produzione. Basta ripetere i passaggi precedenti, sostituendo production con staging dove necessario.
Inizia creando un branch di staging:
git checkout -b staging
Poi esegui il push del branch di staging su GitHub:
git push --set-upstream origin staging
GitHub Actions distribuirà automaticamente il branch staging sul servizio Node.js dedicato.
Approfondimenti
È una buona pratica proteggere i branch production e staging per evitare push diretti. Puoi invece creare una pull request verso il branch di staging e unire le modifiche dal tuo branch di sviluppo. Una volta validate le modifiche sulla piattaforma di staging, puoi effettuare il merge della pull request nel branch production.
Questo workflow garantisce che solo i contributor autorizzati possano effettuare push su staging e produzione, offrendo inoltre un ulteriore livello di test prima che le nuove funzionalità vadano online.