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.

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 stagingEsempio di servizi production e staging

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.

Per generare nuove chiavi SSH, esegui questo comando sul tuo computer:

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

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:

  1. Sotto SSH public keys, clicca su "Add a public key".
  2. Imposta la Description su "GitHub Action".
  3. Incolla la chiave pubblica appena recuperata nel campo Key.

Accedi alle impostazioni del servizioAccedi alle impostazioni del servizio

Ora aggiungi la chiave privata al tuo progetto GitHub affinché possa essere utilizzata durante il deployment:

  • Vai su Settings, poi seleziona Environments e clicca su New environment.

    Configurazione degli ambienti GitHubConfigurazione degli ambienti GitHub

  • Nel campo Name, inserisci "production" e conferma.

    Impostazione dell'ambienteImpostazione dell'ambiente

  • Clicca sul pulsante No restriction e seleziona Selected branches and tags.

    Impostazione delle restrizioni dell'ambienteImpostazione delle restrizioni dell'ambiente

  • 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 un secretAggiungi un secret

Recupera la chiave privata generata in precedenza eseguendo:

cat /tmp/ssh_key

Nelle impostazioni dell'ambiente GitHub:

  • Per Name, inserisci STACKHERO_SSH_PRIVATE_KEY e incolla la chiave privata nel campo Value.

    Impostazione del secret della chiave privata SSHImpostazione del secret della chiave privata SSH

  • Nella sezione Environment variables, clicca su Add variable.

    Impostazione delle variabiliImpostazione delle variabili

  • Per Name, inserisci STACKHERO_ENDPOINT e incolla l'endpoint del tuo servizio PHP nel campo Value. Puoi trovare questo endpoint nella dashboard Stackhero.

    Impostazione della variabile endpointImpostazione della variabile endpoint

Se hai personalizzato il nome di dominio del tuo servizio, utilizza la versione personalizzata invece di <XXXXXX>.stackhero-network.com.

Per motivi di sicurezza, è consigliabile eliminare le chiavi SSH generate dal tuo computer dopo la configurazione:

rm /tmp/ssh_key /tmp/ssh_key.pub

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 produzioneGitHub Actions che ha distribuito in produzione

Congratulazioni! Il tuo progetto è ora configurato per il deployment automatico in produzione tramite GitHub Actions.

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.

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.