PHP: Bereitstellung 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 erleichtert die Automatisierung von Aufgaben wie der Bereitstellung Ihres PHP-Codes auf Produktionsservern. In diesem Leitfaden erfahren Sie, wie Sie Ihre PHP-Anwendung sicher in Staging- und Produktionsumgebungen mit GitHub Actions bereitstellen können.

Der Ansatz beinhaltet die Pflege von zwei Branches, staging und production. Code, der in diese Branches gepusht wird, wird automatisch auf der entsprechenden Stackhero-Instanz bereitgestellt.

Eine Staging-Instanz ist nicht zwingend erforderlich. Es wird jedoch dringend empfohlen, sowohl Staging- als auch Produktionsinstanzen zu verwenden, um reibungslose Bereitstellungen und ein höheres Vertrauen bei der Bereitstellung in der Produktion zu gewährleisten. Diese Praxis entspricht den Industriestandards und hilft, potenzielle Probleme zu vermeiden.

Um diesem Leitfaden zu folgen, benötigen Sie ein GitHub-Konto, das Ihr PHP-Code-Repository hostet.

Beginnen Sie, indem Sie sich in Ihr Stackhero-Dashboard einloggen und zwei PHP-Dienste erstellen: einen für das Staging und einen für die Produktion. Um die Übersicht zu behalten, benennen Sie diese Dienste in "Production" und "Staging" um.

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

Beispiel für Produktions- und Staging-DiensteBeispiel für Produktions- und Staging-Dienste

SSH-Schlüssel sind unerlässlich, damit GitHub Actions sicher eine Verbindung zu Ihrem PHP-Dienst für die Bereitstellung herstellen kann. In diesem Leitfaden erstellen Sie ein einzigartiges SSH-Schlüsselpaar, das diesem Zweck gewidmet ist.

Sie können neue SSH-Schlüssel generieren, indem Sie den folgenden Befehl auf Ihrem Computer ausführen:

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

Rufen Sie den öffentlichen Schlüssel ab, indem Sie ausführen:

cat /tmp/ssh_key.pub

Navigieren Sie anschließend zu Ihrem Stackhero-Dashboard. Wählen Sie Ihren "Production" PHP-Dienst aus und klicken Sie auf "Configure". Folgen Sie dann diesen Schritten:

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

Dienst-Einstellungen abrufenDienst-Einstellungen abrufen

Öffnen Sie nun Ihr GitHub-Projekt und folgen Sie diesen Schritten, um den privaten Schlüssel für die Bereitstellung zu konfigurieren:

  • Klicken Sie auf Settings, dann Environments und wählen Sie New environment.

    GitHub-Umgebungen konfigurierenGitHub-Umgebungen konfigurieren

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

    Umgebung festlegenUmgebung festlegen

  • Klicken Sie auf die Schaltfläche 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

Rufen Sie den zuvor generierten privaten Schlüssel ab, indem Sie ausführen:

cat /tmp/ssh_key

In den GitHub-Umgebungseinstellungen:

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

    SSH-Privatschlüssel-Secret festlegenSSH-Privatschlüssel-Secret festlegen

  • Klicken Sie im Abschnitt Environment variables auf Add variable.

    Variablen festlegenVariablen festlegen

  • Geben Sie in Name STACKHERO_ENDPOINT ein und fügen Sie den PHP-Dienst-Endpunkt in das Feld Value ein. Sie finden diesen Endpunkt in Ihrem Stackhero-Dashboard.

    Endpunkt-Variable festlegenEndpunkt-Variable festlegen

Wenn Sie den Domainnamen Ihres Dienstes angepasst haben, verwenden Sie die angepasste Version anstelle von xxxxxx.stackhero-network.com.

Aus Sicherheitsgründen sollten Sie nun die generierten SSH-Schlüssel von Ihrem Computer entfernen:

rm /tmp/ssh_key /tmp/ssh_key.pub

Als nächstes richten Sie einen GitHub Actions-Workflow ein, um Ihre Bereitstellungen zu automatisieren. Erstellen Sie in Ihrem Git-Repository ein Verzeichnis namens .github/workflows und fügen Sie eine Datei namens deploy-to-stackhero.yml mit folgendem Inhalt hinzu:

# Datei: .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 Bereitstellungsaktion nach einem Git-Push auslösen
    # Vergessen Sie nicht, eine entsprechende Umgebung in GitHub (unter "Settings" -> "Environments") für jeden Branch zu erstellen
    # 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" sollten in der entsprechenden GitHub-Umgebung (unter "Settings" -> "Environments") definiert sein
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Nachdem Sie die Datei hinzugefügt haben, committen Sie Ihre Änderungen, indem Sie die folgenden Befehle in Ihrem Terminal ausführen:

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

Erstellen Sie dann einen Produktions-Branch, indem Sie ausführen:

git checkout -b production

Schließlich pushen Sie Ihre Änderungen zu GitHub:

git push --set-upstream origin production

Dieser Befehl pusht Ihren Code in den production-Branch von GitHub. GitHub Actions wird dann automatisch ausgeführt und stellt Ihren Code auf der zugehörigen Stackhero-Instanz bereit. Um die Bereitstellung zu überprüfen, besuchen Sie Ihr GitHub-Projekt und klicken Sie auf Actions.

GitHub Actions, die in die Produktion bereitgestellt wurdenGitHub Actions, die in die Produktion bereitgestellt wurden

Herzlichen Glückwunsch, Sie sind jetzt bereit, Ihren Code automatisch in die Produktion mit GitHub Actions bereitzustellen!

Sie können die Staging-Umgebung mit einem ähnlichen Prozess wie die Produktionsumgebung einrichten. Wiederholen Sie einfach die obigen Schritte und ersetzen Sie production durch staging, wo zutreffend.

Sobald die Einstellungen konfiguriert sind, erstellen Sie einen Staging-Branch, indem Sie ausführen:

git checkout -b staging

Pushen Sie dann Ihre Änderungen zu GitHub:

git push --set-upstream origin staging

GitHub Actions stellt den Code des Staging-Branches automatisch auf dem für das Staging vorgesehenen PHP-Dienst bereit.

Es ist eine gute Praxis, die Branches production und staging zu schützen, um direkte Pushes zu vermeiden. Sie könnten in Erwägung ziehen, einen Pull-Request für den staging-Branch zu erstellen, der nur von Personen mit Berechtigungen für die Bereitstellung überprüft und zusammengeführt wird. Sobald die Änderungen in der Staging-Umgebung validiert sind, können autorisierte Benutzer den Pull-Request in den production-Branch zusammenführen.

Dieser Ansatz erhöht die Sicherheit, indem er sicherstellt, dass nur genehmigte Änderungen bereitgestellt werden, und verbessert die Zuverlässigkeit, indem neue Funktionen in einer Staging-Umgebung getestet werden, bevor sie die Produktion erreichen.