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.
Creazione dei servizi Python
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 staging
Configurare le chiavi SSH
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 ""
Impostare la chiave pubblica
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 servizio
Segui questi passaggi:
- In
SSH public keys, clicca suAdd a public key. - In
Description, inserisciGitHub Action. - In
Key, incolla la chiave pubblica che hai copiato dal tuo computer.
Aggiungi chiave pubblica
Impostare la chiave privata
Vai alla pagina del tuo progetto GitHub e clicca su Settings, poi su Environments. Seleziona New environment.
Configurazione degli ambienti GitHub
Nel campo Name, digita "production" e conferma.
Impostazione dell'ambiente
Clicca sul pulsante No restriction e scegli Selected branches and tags.
Impostazione 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'ambiente
Impostazione del branch dell'ambiente
Nella sezione Environment secrets, clicca su Add secret.
Aggiungi 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 SSH
Poi, nella sezione Environment variables, clicca su Add variable.
Impostazione 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'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
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
Configurare il workflow di GitHub Actions
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 produzione
Congratulazioni, ora puoi distribuire automaticamente il tuo codice in produzione utilizzando GitHub Actions!
Creazione dell'ambiente di staging
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.
Andare oltre
È 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.