Python: Distribuire con GitHub Actions

Come distribuire il tuo codice Python utilizzando GitHub Actions

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione cloud Python 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 migliorata.
  • 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: ci vogliono solo 5 minuti per provare la soluzione di hosting cloud Python di Stackhero!

GitHub Actions ti consente di automatizzare attività, come distribuire il tuo codice Python su server di produzione.

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

Per fare ciò, manterrai due branch: staging e production. Il codice inviato a questi branch verrà automaticamente distribuito sull'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 quando distribuisci in produzione, è fortemente consigliato mantenere sia un'istanza di staging che una di produzione. Questa pratica è uno standard del settore e un approccio valido che può aiutarti a evitare numerosi problemi.

Prima di iniziare, assicurati di avere un account GitHub con un repository che ospita il tuo codice.

Visita il tuo dashboard Stackhero e crea due servizi Stackhero, uno per lo staging e uno per la produzione. Per chiarezza, potresti considerare di rinominare questi servizi in "Production" e "Staging".

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

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

Le chiavi SSH consentono a GitHub Actions di connettersi in modo sicuro al tuo servizio Python per la distribuzione del codice. Questo passaggio è essenziale per proteggere i tuoi servizi Stackhero.

Sul tuo computer, genera nuove chiavi SSH eseguendo:

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

Per prima cosa, recupera la chiave pubblica che hai appena generato:

cat /tmp/ssh_key.pub

Poi, nel dashboard di Stackhero, seleziona il tuo servizio Python "production" e clicca sul pulsante "Configure".

Ottieni le impostazioni del servizioOttieni le impostazioni del servizio

Segui questi passaggi:

  1. In SSH public keys, clicca su Add a public key.
  2. In Description, inserisci GitHub Action.
  3. In Key, incolla la chiave pubblica che hai copiato dal tuo computer.

Aggiungi chiave pubblicaAggiungi chiave pubblica

Vai alla pagina del tuo progetto GitHub e clicca su Settings, poi su Environments. Seleziona New environment.

Configurazione degli ambienti GitHubConfigurazione degli ambienti GitHub

Nel campo Name, digita "production" e conferma.

Impostazione dell'ambienteImpostazione dell'ambiente

Clicca sul pulsante No restriction e scegli Selected branches and tags.

Impostazione delle restrizioni dell'ambienteImpostazione delle restrizioni dell'ambiente

Successivamente, clicca su Add deployment branch or tag rule, inserisci "production" nel campo 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

Nella sezione Environment secrets, clicca su Add secret.

Aggiungi segretoAggiungi segreto

Ora, recupera la chiave privata che hai generato in precedenza:

cat /tmp/ssh_key

Nella configurazione del segreto, usa STACKHERO_SSH_PRIVATE_KEY come Nome e incolla la chiave privata come Valore.

Impostazione del segreto della chiave privata SSHImpostazione del segreto della chiave privata SSH

Poi, nella sezione Environment variables, clicca su Add variable.

Impostazione delle variabiliImpostazione delle variabili

Inserisci STACKHERO_ENDPOINT come Nome e incolla il tuo endpoint del servizio Python come Valore. Puoi trovare questo endpoint nel tuo dashboard 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.

Per motivi di sicurezza, rimuovi le chiavi SSH dal tuo computer poiché non ne avrai più bisogno:

rm /tmp/ssh_key /tmp/ssh_key.pub

Nel tuo repository Git, crea una directory chiamata .github/workflows se non esiste già. Poi crea un file chiamato deploy-to-stackhero.yml in quella directory.

# 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 push git.
    # 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 }}

Conferma queste modifiche eseguendo:

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 invia il tuo codice al branch production di GitHub e attiva GitHub Actions per distribuire il codice sulla tua istanza Stackhero.

Per verificare la distribuzione, visita la pagina del progetto GitHub 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 utilizzando GitHub Actions!

Configurare l'ambiente di staging è molto simile alla configurazione dell'ambiente di produzione. Basta ripetere i passaggi sopra, sostituendo production con staging.

Dopo aver configurato l'ambiente, crea un branch di staging:

git checkout -b staging

Poi invia il tuo branch di staging a GitHub:

git push --set-upstream origin staging

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

È buona pratica proteggere i branch production e staging per impedire push diretti. Con questa configurazione, devono essere creati pull request per il branch staging e fusi dai membri del team con i diritti appropriati. Una volta convalidati sulla piattaforma di staging, i pull request possono essere fusi nel branch production dalle stesse persone autorizzate.

Questo approccio migliora la sicurezza garantendo che solo le modifiche approvate vengano distribuite e migliora l'affidabilità testando le nuove funzionalità sulla piattaforma di staging prima che raggiungano la produzione.