PHP: Deployen met GitHub Actions

Hoe u uw PHP-code kunt deployen met GitHub Actions

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare PHP cloud oplossing die tal van voordelen biedt, waaronder:

  • Implementeer uw applicatie in seconden met een eenvoudige git push.
  • Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
  • Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
  • Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de PHP cloud hosting oplossing van Stackhero te proberen!

GitHub Actions is een krachtig hulpmiddel waarmee u workflows kunt automatiseren, waaronder het direct deployen van uw PHP-code naar uw productie-servers. In deze handleiding laten we zien hoe u uw PHP-applicatie veilig kunt deployen naar zowel staging- als productieomgevingen met behulp van GitHub Actions.

De aanbevolen aanpak is om twee branches in uw repository te onderhouden: staging en production. Telkens wanneer u code pusht naar deze branches, wordt deze automatisch gedeployed naar de bijbehorende Stackhero-instantie.

Het hebben van een staging-instantie is niet verplicht. Het gebruik van zowel staging- als productie-instanties wordt echter sterk aanbevolen om soepele deploys te garanderen en het vertrouwen bij productie-deploys te vergroten. Deze werkwijze sluit aan bij de industriestandaarden en helpt mogelijke problemen te voorkomen.

Om te beginnen heeft u een GitHub-account nodig met uw PHP-code in een repository.

Log eerst in op uw Stackhero-dashboard en maak twee PHP-services aan: één voor staging en één voor productie. Voor de duidelijkheid kunt u deze services hernoemen naar "Production" en "Staging".

Als u nog geen Stackhero-account heeft, kunt u er gratis één aanmaken in slechts twee minuten en uw PHP cloud services met een paar klikken opzetten.

Voorbeeld van productie- en staging-servicesVoorbeeld van productie- en staging-services

SSH-sleutels zijn de aanbevolen methode om GitHub Actions veilig verbinding te laten maken met uw PHP-service tijdens het deployen. In deze handleiding maakt u een uniek SSH-sleutelpaar speciaal voor dit doel aan.

Om nieuwe SSH-sleutels te genereren, voert u het volgende commando uit op uw computer:

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

Haal vervolgens de publieke sleutel op door het volgende commando uit te voeren:

cat /tmp/ssh_key.pub

Ga naar uw Stackhero-dashboard en selecteer uw "Production" PHP-service. Klik op "Configure" en volg deze stappen:

  1. Onder SSH public keys, klik op "Add a public key".
  2. Vul bij Description "GitHub Action" in.
  3. Plak de zojuist opgehaalde publieke sleutel in het veld Key.

Service-instellingen ophalenService-instellingen ophalen

Voeg nu de private sleutel toe aan uw GitHub-project zodat deze gebruikt kan worden tijdens het deployen:

  • Ga naar Settings, selecteer vervolgens Environments en klik op New environment.

    GitHub-omgevingen configurerenGitHub-omgevingen configureren

  • Vul bij Name "production" in en bevestig.

    Omgeving instellenOmgeving instellen

  • Klik op de knop No restriction en selecteer Selected branches and tags.

    Omgevingsrestricties instellenOmgevingsrestricties instellen

  • Klik op Add deployment branch or tag rule, vul "production" in bij het veld Name pattern en klik op Add rule.

    Omgevingsbranch instellenOmgevingsbranch instellen Omgevingsbranch instellenOmgevingsbranch instellen

  • Onder Environment secrets, klik op Add secret.

    Secret toevoegenSecret toevoegen

Haal de eerder gegenereerde private sleutel op door het volgende commando uit te voeren:

cat /tmp/ssh_key

In de GitHub-omgevingsinstellingen:

  • Vul bij Name STACKHERO_SSH_PRIVATE_KEY in en plak uw private sleutel in het veld Value.

    SSH private key secret instellenSSH private key secret instellen

  • In de sectie Environment variables, klik op Add variable.

    Variabelen instellenVariabelen instellen

  • Vul bij Name STACKHERO_ENDPOINT in en plak uw PHP-service endpoint in het veld Value. U vindt dit endpoint in uw Stackhero-dashboard.

    Endpoint variabele instellenEndpoint variabele instellen

Als u de domeinnaam van uw service heeft aangepast, gebruik dan de aangepaste versie in plaats van <XXXXXX>.stackhero-network.com.

Om veiligheidsredenen is het verstandig om de gegenereerde SSH-sleutels van uw computer te verwijderen na de installatie:

rm /tmp/ssh_key /tmp/ssh_key.pub

Nu gaat u een GitHub Actions workflow-bestand aanmaken om uw deploys te automatiseren. Maak in uw Git-repository een map aan genaamd .github/workflows en voeg een bestand toe met de naam deploy-to-stackhero.yml met de volgende inhoud:

# File: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # Lijst van branches die de deploy-actie triggeren na een git push
    # Vergeet niet om voor elke branch een bijbehorende environment in GitHub aan te maken (onder "Settings" -> "Environments")
    # Voeg vervolgens het secret "STACKHERO_SSH_PRIVATE_KEY" en de variabele "STACKHERO_ENDPOINT" toe aan die environment
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Het secret "STACKHERO_SSH_PRIVATE_KEY" en de variabele "STACKHERO_ENDPOINT" moeten gedefinieerd zijn in de bijbehorende GitHub environment (onder "Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Nadat u dit bestand heeft toegevoegd, kunt u uw wijzigingen committen met de volgende commando's in uw terminal:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

Om de production branch aan te maken, voert u uit:

git checkout -b production

Push vervolgens uw wijzigingen naar GitHub:

git push --set-upstream origin production

Hiermee pusht u uw code naar de production branch op GitHub. GitHub Actions zal dan automatisch uw code deployen naar de gekoppelde Stackhero-instantie. Om de status van de deployment te controleren, kunt u uw GitHub-project openen en op Actions klikken.

GitHub Actions die naar productie heeft gedeployedGitHub Actions die naar productie heeft gedeployed

Gefeliciteerd! Uw project is nu ingesteld voor automatische deployment naar productie met GitHub Actions.

U kunt uw staging-omgeving op vrijwel dezelfde manier instellen als de productieomgeving. Herhaal simpelweg de bovenstaande stappen en vervang production door staging waar nodig.

Zodra de instellingen zijn geconfigureerd, kunt u uw staging branch aanmaken met:

git checkout -b staging

En push deze vervolgens naar GitHub:

git push --set-upstream origin staging

GitHub Actions zal automatisch de code uit uw staging branch deployen naar de PHP-service die u voor staging heeft ingesteld.

Om de betrouwbaarheid en veiligheid van uw applicatie te waarborgen, is het verstandig om uw production en staging branches te beschermen tegen directe pushes. U kunt bijvoorbeeld instellen dat wijzigingen alleen via pull requests worden doorgevoerd, waarbij de staging branch alleen door geautoriseerde personen mag worden gereviewd en gemerged. Zodra uw wijzigingen in staging zijn gevalideerd, kunnen bevoegde gebruikers deze samenvoegen met de production branch.

Met deze aanpak komt alleen gecontroleerde code in productie terecht en kunt u nieuwe features eerst in staging testen voordat ze live gaan. Dit geeft u en uw team extra zekerheid.