PHP: Distribuire con GitHub Actions
Come distribuire il tuo codice PHP utilizzando GitHub Actions
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione PHP cloud pronta all'uso che fornisce una serie di 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 PHP cloud hosting di Stackhero!
GitHub Actions è uno strumento potente che consente di automatizzare i workflow, incluso il deployment del codice PHP direttamente sui server di produzione. In questa guida vedremo come distribuire in modo sicuro la tua applicazione PHP sia in ambiente di staging che di produzione utilizzando GitHub Actions.
L'approccio consigliato è quello di mantenere due branch nel tuo repository: staging e production. Ogni volta che esegui un push su uno di questi branch, il codice verrà automaticamente distribuito sull'istanza Stackhero corrispondente.
Disporre di un'istanza di staging non è obbligatorio. Tuttavia, utilizzare sia un ambiente di staging che uno di produzione è fortemente raccomandato per garantire deployment fluidi e una maggiore sicurezza durante la messa in produzione. Questa pratica è in linea con gli standard del settore e aiuta a prevenire potenziali problemi.
Per iniziare, è necessario un account GitHub con il codice PHP ospitato in un repository.
Creazione dei servizi PHP
Per prima cosa, accedi alla tua dashboard Stackhero e crea due servizi PHP, uno per lo staging e uno per la produzione. Per maggiore chiarezza, puoi rinominare questi servizi in "Production" e "Staging".
Se non hai ancora un account Stackhero, puoi crearne uno gratuitamente in due minuti e configurare i tuoi servizi cloud PHP con pochi clic.
Esempio di servizi production e staging
Configurare le chiavi SSH
Le chiavi SSH sono il metodo consigliato per consentire a GitHub Actions di connettersi in modo sicuro al tuo servizio PHP durante il deployment. In questa guida, creerai una coppia di chiavi SSH dedicata a questo scopo.
Generare le chiavi SSH
Per generare nuove chiavi SSH, esegui questo comando sul tuo computer:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Impostare la chiave pubblica
Successivamente, recupera la chiave pubblica eseguendo:
cat /tmp/ssh_key.pub
Accedi alla dashboard Stackhero e seleziona il servizio PHP "Production". Clicca su "Configure" e segui questi passaggi:
- Sotto
SSH public keys, clicca su "Add a public key". - Imposta la
Descriptionsu "GitHub Action". - Incolla la chiave pubblica appena recuperata nel campo
Key.
Accedi alle impostazioni del servizio
Impostare la chiave privata
Ora aggiungi la chiave privata al tuo progetto GitHub affinché possa essere utilizzata durante il deployment:
-
Vai su
Settings, poi selezionaEnvironmentse clicca suNew environment.
Configurazione degli ambienti GitHub -
Nel campo
Name, inserisci "production" e conferma.
Impostazione dell'ambiente -
Clicca sul pulsante
No restrictione selezionaSelected branches and tags.
Impostazione delle restrizioni dell'ambiente -
Clicca su
Add deployment branch or tag rule, inserisci "production" nel campoName patterne clicca suAdd rule.
Impostazione del branch dell'ambiente
Impostazione del branch dell'ambiente -
Nella sezione
Environment secrets, clicca suAdd secret.
Aggiungi un secret
Recupera la chiave privata generata in precedenza eseguendo:
cat /tmp/ssh_key
Nelle impostazioni dell'ambiente GitHub:
-
Per
Name, inserisciSTACKHERO_SSH_PRIVATE_KEYe incolla la chiave privata nel campoValue.
Impostazione del secret della chiave privata SSH -
Nella sezione
Environment variables, clicca suAdd variable.
Impostazione delle variabili -
Per
Name, inserisciSTACKHERO_ENDPOINTe incolla l'endpoint del tuo servizio PHP nel campoValue. Puoi trovare questo endpoint nella dashboard Stackhero.
Impostazione della variabile endpoint
Se hai personalizzato il nome di dominio del tuo servizio, utilizza la versione personalizzata invece di <XXXXXX>.stackhero-network.com.
Eliminare le chiavi generate
Per motivi di sicurezza, è consigliabile eliminare le chiavi SSH generate dal tuo computer dopo la configurazione:
rm /tmp/ssh_key /tmp/ssh_key.pub
Configurare il workflow GitHub Actions
Ora configurerai un file di workflow GitHub Actions per automatizzare i deployment. All'interno del tuo repository Git, crea una directory chiamata .github/workflows e aggiungi un file chiamato deploy-to-stackhero.yml con il seguente contenuto:
# 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
# Ricorda di creare un ambiente corrispondente in GitHub (in "Settings" -> "Environments") per ogni branch
# Poi aggiungi il secret "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 GitHub corrispondente (in "Settings" -> "Environments")
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
Dopo aver aggiunto questo file, puoi effettuare il commit delle modifiche eseguendo questi comandi nel terminale:
git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"
Per creare il branch production, puoi eseguire:
git checkout -b production
Poi esegui il push delle modifiche su GitHub:
git push --set-upstream origin production
Questo comando invierà il codice al branch production su GitHub. GitHub Actions eseguirà automaticamente il workflow e distribuirà il codice sull'istanza Stackhero associata. Per verificare lo stato del deployment, puoi visitare il tuo progetto GitHub e cliccare su Actions.
GitHub Actions che ha distribuito in produzione
Congratulazioni! Il tuo progetto è ora configurato per il deployment automatico in produzione tramite GitHub Actions.
Creazione dell'ambiente di staging
Puoi configurare l'ambiente di staging nello stesso modo dell'ambiente di produzione. Basta ripetere i passaggi sopra, sostituendo production con staging dove necessario.
Una volta configurato, puoi creare il branch staging così:
git checkout -b staging
Poi esegui il push su GitHub:
git push --set-upstream origin staging
GitHub Actions distribuirà automaticamente il codice dal branch staging al servizio PHP che hai configurato per lo staging.
Approfondimenti
Per garantire che la tua applicazione rimanga affidabile e sicura, è buona pratica proteggere i branch production e staging dai push diretti. Puoi configurare il repository in modo che le modifiche vengano apportate tramite pull request, magari prevedendo che il branch staging venga revisionato e unito solo da chi ha i permessi di deployment. Una volta che le modifiche sono state validate in staging, gli utenti autorizzati possono unirle nel branch production.
Questo approccio assicura che solo codice verificato arrivi in produzione e ti permette di testare le nuove funzionalità in staging prima che vadano online, offrendo maggiore tranquillità a te e al tuo team.