PHP: Deployment mit GitHub Actions

Wie Sie Ihren PHP-Code mit GitHub Actions bereitstellen

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite PHP-Cloud-Lösung, die zahlreiche Vorteile bietet, darunter:

  • Deployen Sie Ihre Anwendung in Sekunden mit einem einfachen git push.
  • Verwenden Sie Ihren eigenen Domainnamen und profitieren Sie von der automatischen Konfiguration von HTTPS-Zertifikaten für erhöhte Sicherheit.
  • Genießen Sie beruhigende automatische Backups, Ein-Klick-Updates und eine einfache, transparente und vorhersehbare Preisgestaltung.
  • Erhalten Sie optimale Performance und robuste Sicherheit dank einer privaten und dedizierten VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die PHP-Cloud-Hosting-Lösung von Stackhero auszuprobieren!

GitHub Actions ist ein leistungsstarkes Tool, mit dem Sie Workflows automatisieren können – einschließlich der Bereitstellung Ihres PHP-Codes direkt auf Ihren Produktionsservern. In dieser Anleitung zeigen wir Ihnen, wie Sie Ihre PHP-Anwendung sicher sowohl in Staging- als auch in Produktionsumgebungen mit GitHub Actions deployen.

Die empfohlene Vorgehensweise ist, zwei Branches in Ihrem Repository zu pflegen: staging und production. Immer wenn Sie Code auf einen dieser Branches pushen, wird dieser automatisch auf die entsprechende Stackhero-Instanz deployed.

Eine Staging-Instanz ist nicht zwingend erforderlich. Es wird jedoch dringend empfohlen, sowohl Staging- als auch Produktionsinstanzen zu verwenden, um reibungslose Deployments zu gewährleisten und das Vertrauen bei der Auslieferung in die Produktion zu stärken. Diese Praxis entspricht den Branchenstandards und hilft, potenzielle Probleme zu vermeiden.

Um loszulegen, benötigen Sie ein GitHub-Konto mit Ihrem PHP-Code in einem Repository.

Melden Sie sich zunächst in Ihrem Stackhero-Dashboard an und erstellen Sie zwei PHP-Services – einen für Staging und einen für Produktion. Zur besseren Übersicht können Sie diese Services in "Production" und "Staging" umbenennen.

Falls Sie noch kein Stackhero-Konto haben, können Sie in nur zwei Minuten kostenlos eines erstellen und Ihre PHP Cloud-Services mit wenigen Klicks einrichten.

Beispiel für Production- und Staging-ServicesBeispiel für Production- und Staging-Services

SSH-Schlüssel sind die empfohlene Methode, damit GitHub Actions während des Deployments sicher auf Ihren PHP-Service zugreifen kann. In dieser Anleitung erstellen Sie ein eigenes SSH-Schlüsselpaar speziell für diesen Zweck.

Um neue SSH-Schlüssel zu generieren, führen Sie diesen Befehl auf Ihrem Computer aus:

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

Lesen Sie anschließend den öffentlichen Schlüssel mit folgendem Befehl aus:

cat /tmp/ssh_key.pub

Wechseln Sie in Ihr Stackhero-Dashboard und wählen Sie Ihren "Production" PHP-Service aus. Klicken Sie auf "Configure" und gehen Sie wie folgt vor:

  1. Unter SSH public keys klicken Sie auf "Add a public key".
  2. Geben Sie bei Description "GitHub Action" ein.
  3. Fügen Sie den eben ausgelesenen öffentlichen Schlüssel in das Feld Key ein.

Service-Einstellungen abrufenService-Einstellungen abrufen

Fügen Sie nun den privaten Schlüssel in Ihr GitHub-Projekt ein, damit er beim Deployment verwendet werden kann:

  • Gehen Sie zu Settings, wählen Sie dann Environments und klicken Sie auf New environment.

    GitHub-Umgebungen konfigurierenGitHub-Umgebungen konfigurieren

  • Geben Sie im Feld Name "production" ein und bestätigen Sie.

    Umgebung festlegenUmgebung festlegen

  • Klicken Sie auf den Button No restriction und wählen Sie Selected branches and tags.

    Umgebungsbeschränkungen festlegenUmgebungsbeschränkungen festlegen

  • Klicken Sie auf Add deployment branch or tag rule, geben Sie "production" im Feld Name pattern ein und klicken Sie auf Add rule.

    Umgebungs-Branch festlegenUmgebungs-Branch festlegen Umgebungs-Branch festlegenUmgebungs-Branch festlegen

  • Unter Environment secrets klicken Sie auf Add secret.

    Secret hinzufügenSecret hinzufügen

Lesen Sie den zuvor generierten privaten Schlüssel mit folgendem Befehl aus:

cat /tmp/ssh_key

In den GitHub-Umgebungseinstellungen:

  • Geben Sie bei Name STACKHERO_SSH_PRIVATE_KEY ein und fügen Sie Ihren privaten Schlüssel in das Feld Value ein.

    SSH Private Key Secret festlegenSSH Private Key Secret festlegen

  • Im Bereich Environment variables klicken Sie auf Add variable.

    Variablen festlegenVariablen festlegen

  • Geben Sie bei Name STACKHERO_ENDPOINT ein und fügen Sie den Endpoint Ihres PHP-Services in das Feld Value ein. Sie finden diesen Endpoint in Ihrem Stackhero-Dashboard.

    Endpoint-Variable festlegenEndpoint-Variable festlegen

Wenn Sie den Domainnamen Ihres Services angepasst haben, verwenden Sie die angepasste Version anstelle von <XXXXXX>.stackhero-network.com.

Aus Sicherheitsgründen empfiehlt es sich, die generierten SSH-Schlüssel nach der Einrichtung von Ihrem Computer zu entfernen:

rm /tmp/ssh_key /tmp/ssh_key.pub

Jetzt richten Sie eine GitHub Actions Workflow-Datei ein, um Ihre Deployments zu automatisieren. Legen Sie in Ihrem Git-Repository das Verzeichnis .github/workflows an und erstellen Sie darin eine Datei namens deploy-to-stackhero.yml mit folgendem Inhalt:

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

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

on:
  push:
    # Liste der Branches, die die Deployment-Action nach einem Git-Push auslösen
    # Vergessen Sie nicht, für jeden Branch eine entsprechende Umgebung in GitHub (unter "Settings" -> "Environments") anzulegen
    # Fügen Sie dann das Secret "STACKHERO_SSH_PRIVATE_KEY" und die Variable "STACKHERO_ENDPOINT" in dieser Umgebung hinzu
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Das Secret "STACKHERO_SSH_PRIVATE_KEY" und die Variable "STACKHERO_ENDPOINT" müssen in der jeweiligen GitHub-Umgebung (unter "Settings" -> "Environments") definiert sein
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Nachdem Sie diese Datei hinzugefügt haben, können Sie Ihre Änderungen mit folgenden Befehlen committen:

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

Um den Production-Branch zu erstellen, führen Sie aus:

git checkout -b production

Danach pushen Sie Ihre Änderungen zu GitHub:

git push --set-upstream origin production

Dadurch wird Ihr Code auf den production-Branch bei GitHub gepusht. GitHub Actions wird dann automatisch ausgeführt und deployed Ihren Code auf die zugeordnete Stackhero-Instanz. Den Status des Deployments können Sie in Ihrem GitHub-Projekt unter Actions einsehen.

GitHub Actions, die nach Production deployed habenGitHub Actions, die nach Production deployed haben

Herzlichen Glückwunsch! Ihr Projekt ist jetzt für das automatische Deployment in die Produktion mit GitHub Actions eingerichtet.

Sie können Ihre Staging-Umgebung auf die gleiche Weise wie die Produktionsumgebung einrichten. Wiederholen Sie dazu einfach die oben genannten Schritte und ersetzen Sie production durch staging, wo es erforderlich ist.

Sobald die Einstellungen vorgenommen wurden, können Sie Ihren Staging-Branch wie folgt anlegen:

git checkout -b staging

Und dann zu GitHub pushen:

git push --set-upstream origin staging

GitHub Actions wird den Code aus Ihrem Staging-Branch automatisch auf den für Staging eingerichteten PHP-Service deployen.

Um die Zuverlässigkeit und Sicherheit Ihrer Anwendung zu gewährleisten, empfiehlt es sich, Ihre production- und staging-Branches gegen direkte Pushes zu schützen. Sie können beispielsweise festlegen, dass Änderungen nur über Pull Requests erfolgen dürfen, wobei der staging-Branch nur von berechtigten Personen mit Deploy-Rechten geprüft und gemerged wird. Sobald Ihre Änderungen im Staging validiert sind, können autorisierte Nutzer sie in den production-Branch übernehmen.

Mit diesem Ansatz gelangt nur geprüfter Code in die Produktion, und Sie können neue Features zunächst im Staging testen, bevor sie live gehen – das sorgt für zusätzliche Sicherheit und ein gutes Gefühl im Team.