Python: Distribuire con GitHub Actions
Come distribuire il proprio 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 semplifica l'automazione delle attività, incluso il deployment del codice Python direttamente sui server di produzione.
In questa guida vedrete come configurare GitHub Actions in modo sicuro e affidabile per distribuire il vostro codice Python sia in ambienti di staging che di produzione.
Per mantenere l'organizzazione, utilizzerete due branch: staging e production. Ogni volta che effettuerete un push su questi branch, il codice verrà automaticamente distribuito sull'istanza Stackhero corrispondente.
Disporre di un'istanza di staging non è obbligatorio. Potete seguire questa guida anche con una sola istanza di produzione. Tuttavia, per garantire deployment fluidi e avere piena fiducia quando si distribuisce in produzione, è fortemente consigliato mantenere sia un'istanza di staging che una di produzione. Questa pratica è uno standard del settore e un approccio solido che può aiutarvi a evitare numerosi problemi.
Prima di iniziare, assicuratevi di avere un account GitHub e un repository dove è ospitato il vostro codice.
Creazione dei servizi Python
Accedete alla vostra dashboard Stackhero e create due servizi Stackhero, uno per lo staging e uno per la produzione. Per maggiore chiarezza, potete chiamarli "Production" e "Staging".
Non avete ancora un account Stackhero? Potete registrarvi gratuitamente in due minuti e poi creare i vostri servizi cloud Python con pochi clic.
Esempio di servizi production e staging
Configurare le chiavi SSH
Le chiavi SSH permettono a GitHub Actions di connettersi in modo sicuro al vostro servizio Python per il deployment del codice. Questo passaggio è fondamentale per la sicurezza dei vostri servizi Stackhero.
Sul vostro computer, potete generare nuove chiavi SSH eseguendo:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Impostare la chiave pubblica
Per prima cosa, visualizzate la chiave pubblica appena generata:
cat /tmp/ssh_key.pub
Successivamente, nella dashboard Stackhero, selezionate il servizio Python "production" e cliccate sul pulsante "Configure".
Accedere alle impostazioni del servizio
Seguite questi passaggi:
- Sotto
SSH public keys, cliccate suAdd a public key. - Per
Description, inseriteGitHub Action. - Per
Key, incollate la chiave pubblica appena copiata.
Aggiungere la chiave pubblica
Impostare la chiave privata
Andate sulla pagina del vostro progetto GitHub, cliccate su Settings, poi su Environments. Scegliete New environment.
Configurazione degli ambienti GitHub
Nel campo Name, inserite "production" e confermate.
Impostazione dell'ambiente
Cliccate sul pulsante No restriction e selezionate Selected branches and tags.
Impostazione delle restrizioni dell'ambiente
Poi cliccate su Add deployment branch or tag rule, inserite "production" nel campo Name pattern e cliccate su Add rule.
Impostazione del branch dell'ambiente
Impostazione del branch dell'ambiente
Nella sezione Environment secrets, cliccate su Add secret.
Aggiungere un secret
Ora visualizzate la chiave privata generata in precedenza:
cat /tmp/ssh_key
Nella configurazione del secret, usate STACKHERO_SSH_PRIVATE_KEY come Nome e incollate la chiave privata come Valore.
Impostazione del secret della chiave privata SSH
Successivamente, nella sezione Environment variables, cliccate su Add variable.
Impostazione delle variabili
Inserite STACKHERO_ENDPOINT come Nome e incollate l'endpoint del vostro servizio Python come Valore. Troverete questo endpoint nella dashboard Stackhero.
Impostazione della variabile endpoint
Se avete personalizzato il nome di dominio del vostro servizio, utilizzate la versione personalizzata invece di <XXXXXX>.stackhero-network.com.
Eliminare le chiavi generate
Per motivi di sicurezza, è consigliabile eliminare ora le chiavi SSH dal vostro computer, poiché non vi serviranno più:
rm /tmp/ssh_key /tmp/ssh_key.pub
Configurare il workflow di GitHub Actions
Nel vostro repository Git, create una cartella chiamata .github/workflows se non esiste già. Poi aggiungete al suo interno 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 deploy dopo un git push.
# Non dimenticate di creare un ambiente corrispondente al nome del branch su GitHub (in "Settings"/"Environments").
# Poi aggiungete il secret corrispondente "STACKHERO_SSH_PRIVATE_KEY" e la variabile "STACKHERO_ENDPOINT" 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:
# Il secret "STACKHERO_SSH_PRIVATE_KEY" e la variabile "STACKHERO_ENDPOINT" devono essere definiti nell'ambiente branch corrispondente su GitHub in "Settings"/"Environments".
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
Una volta aggiunto il file workflow, potete effettuare il commit delle modifiche:
git add -A .
git commit -m "Aggiungi GitHub Actions per il deploy su Stackhero"
Potete creare un branch production con:
git checkout -b production
E inviare le modifiche su GitHub:
git push --set-upstream origin production
Questo invierà il vostro codice al branch production su GitHub e attiverà GitHub Actions, che distribuirà il codice sulla vostra istanza Stackhero.
Per verificare lo stato del deployment, visitate semplicemente la pagina del vostro progetto GitHub e cliccate su Actions.
GitHub Actions che ha distribuito in produzione
Ecco fatto. Ora avete il deployment automatico in produzione tramite GitHub Actions.
Creazione dell'ambiente di staging
La configurazione di un ambiente di staging è praticamente identica a quella della produzione. Potete semplicemente ripetere i passaggi sopra, sostituendo production con staging ovunque compaia.
Dopo aver configurato l'ambiente, potete creare un branch staging così:
git checkout -b staging
Poi inviate il branch staging su GitHub:
git push --set-upstream origin staging
Il vostro branch staging verrà ora automaticamente distribuito sull'istanza Python che avete destinato allo staging.
Approfondimenti
È consigliabile proteggere i branch production e staging per evitare push diretti. Con questa configurazione, i membri del team dovranno creare delle pull request verso il branch staging, che dovranno essere revisionate e unite da utenti con i permessi adeguati. Una volta che le modifiche sono state validate sulla piattaforma di staging, la pull request potrà essere unita nel branch production da una persona autorizzata.
Questo workflow aiuta a garantire che solo le modifiche approvate arrivino in produzione, migliorando anche l'affidabilità grazie ai test delle nuove funzionalità su staging prima della messa in produzione.