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 semplifica l'automazione di attività come la distribuzione del tuo codice PHP su server di produzione. In questa guida, ti verrà mostrato come distribuire in modo sicuro la tua applicazione PHP su ambienti di staging e produzione utilizzando GitHub Actions.

L'approccio prevede il mantenimento di due branch, staging e production. Il codice inviato a questi branch viene automaticamente distribuito sull'istanza corrispondente di Stackhero.

Avere un'istanza di staging non è obbligatorio. Tuttavia, l'uso di entrambe le istanze di staging e produzione è fortemente raccomandato per garantire distribuzioni fluide e maggiore fiducia durante la distribuzione in produzione. Questa pratica è in linea con gli standard del settore e aiuta a prevenire potenziali problemi.

Per seguire questa guida, è necessario un account GitHub che ospiti il tuo repository di codice PHP.

Inizia accedendo alla tua dashboard di Stackhero e creando due servizi PHP: uno per lo staging e uno per la produzione. Per mantenere l'organizzazione, rinomina questi servizi in "Production" e "Staging".

Se non hai un account Stackhero, puoi crearne uno gratuitamente in soli due minuti e configurare i tuoi servizi cloud PHP con pochi clic.

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

Le chiavi SSH sono essenziali per consentire a GitHub Actions di connettersi in modo sicuro al tuo servizio PHP per la distribuzione. In questa guida, creerai una coppia di chiavi SSH unica dedicata a questo scopo.

Puoi generare nuove chiavi SSH eseguendo il seguente comando sul tuo computer:

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

Recupera la chiave pubblica eseguendo:

cat /tmp/ssh_key.pub

Successivamente, vai alla tua dashboard di Stackhero. Seleziona il tuo servizio PHP "Production" e clicca su "Configure". Segui quindi 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 recuperata nel campo Key.

Ottieni le impostazioni del servizioOttieni le impostazioni del servizio

Ora, apri il tuo progetto GitHub e segui questi passaggi per configurare la chiave privata per la distribuzione:

  • Clicca su Settings, poi Environments e seleziona 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

  • Sotto Environment secrets, clicca su Add secret.

    Aggiungi un segretoAggiungi un segreto

Recupera la chiave privata che hai generato in precedenza eseguendo:

cat /tmp/ssh_key

Nelle impostazioni dell'ambiente GitHub:

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

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

  • Nella sezione Environment variables, clicca su Add variable.

    Impostazione delle variabiliImpostazione delle variabili

  • In Name, inserisci STACKHERO_ENDPOINT e incolla l'endpoint del servizio PHP nel campo Value. Puoi trovare questo endpoint nella tua dashboard di 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, ora dovresti rimuovere le chiavi SSH generate dal tuo computer:

rm /tmp/ssh_key /tmp/ssh_key.pub

Successivamente, configurerai un workflow di GitHub Actions per automatizzare le tue distribuzioni. Nel 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 distribuzione a seguito di un push git
    # Non dimenticare di creare un ambiente corrispondente in GitHub (sotto "Settings" -> "Environments") per ogni branch
    # Quindi aggiungi il segreto "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 segreto "STACKHERO_SSH_PRIVATE_KEY" e la variabile "STACKHERO_ENDPOINT" devono essere definiti nell'ambiente GitHub corrispondente (sotto "Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Dopo aver aggiunto il file, conferma le tue modifiche eseguendo i seguenti comandi nel tuo terminale:

git add -A .
git commit -m "Aggiungi GitHub Actions per distribuire su Stackhero"

Quindi, crea un branch di produzione eseguendo:

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. GitHub Actions quindi si esegue automaticamente e distribuisce il tuo codice sull'istanza associata di Stackhero. Per verificare la distribuzione, visita il tuo progetto GitHub e clicca su Actions.

GitHub Actions che ha distribuito in produzioneGitHub Actions che ha distribuito in produzione

Congratulazioni, ora sei pronto per distribuire automaticamente il tuo codice in produzione utilizzando GitHub Actions!

Puoi configurare l'ambiente di staging utilizzando un processo simile a quello dell'ambiente di produzione. Basta ripetere i passaggi sopra, sostituendo production con staging dove applicabile.

Una volta configurate le impostazioni, crea un branch di staging eseguendo:

git checkout -b staging

Quindi, invia le tue modifiche a GitHub:

git push --set-upstream origin staging

GitHub Actions distribuisce automaticamente il codice del branch staging al servizio PHP designato per lo staging.

È buona pratica proteggere i branch production e staging per evitare push diretti. Potresti considerare di creare una pull request per il branch staging che viene esaminata e fusa solo da persone con diritti di distribuzione. Una volta che le modifiche sono validate nell'ambiente di staging, gli utenti autorizzati possono fondere la pull request nel branch production.

Seguire questo approccio aumenta la sicurezza garantendo che solo le modifiche approvate vengano distribuite e migliora l'affidabilità testando le nuove funzionalità in un ambiente di staging prima che raggiungano la produzione.