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.
PHP-Services erstellen
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-Services
SSH-Schlüssel konfigurieren
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.
SSH-Schlüssel generieren
Um neue SSH-Schlüssel zu generieren, führen Sie diesen Befehl auf Ihrem Computer aus:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Öffentlichen Schlüssel hinterlegen
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:
- Unter
SSH public keysklicken Sie auf "Add a public key". - Geben Sie bei
Description"GitHub Action" ein. - Fügen Sie den eben ausgelesenen öffentlichen Schlüssel in das Feld
Keyein.
Service-Einstellungen abrufen
Privaten Schlüssel hinterlegen
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 dannEnvironmentsund klicken Sie aufNew environment.
GitHub-Umgebungen konfigurieren -
Geben Sie im Feld
Name"production" ein und bestätigen Sie.
Umgebung festlegen -
Klicken Sie auf den Button
No restrictionund wählen SieSelected branches and tags.
Umgebungsbeschränkungen festlegen -
Klicken Sie auf
Add deployment branch or tag rule, geben Sie "production" im FeldName patternein und klicken Sie aufAdd rule.
Umgebungs-Branch festlegen
Umgebungs-Branch festlegen -
Unter
Environment secretsklicken Sie aufAdd secret.
Secret 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
NameSTACKHERO_SSH_PRIVATE_KEYein und fügen Sie Ihren privaten Schlüssel in das FeldValueein.
SSH Private Key Secret festlegen -
Im Bereich
Environment variablesklicken Sie aufAdd variable.
Variablen festlegen -
Geben Sie bei
NameSTACKHERO_ENDPOINTein und fügen Sie den Endpoint Ihres PHP-Services in das FeldValueein. Sie finden diesen Endpoint in Ihrem Stackhero-Dashboard.
Endpoint-Variable festlegen
Wenn Sie den Domainnamen Ihres Services angepasst haben, verwenden Sie die angepasste Version anstelle von <XXXXXX>.stackhero-network.com.
Generierte Schlüssel löschen
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
GitHub Actions Workflow konfigurieren
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 haben
Herzlichen Glückwunsch! Ihr Projekt ist jetzt für das automatische Deployment in die Produktion mit GitHub Actions eingerichtet.
Staging-Umgebung erstellen
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.
Weiterführende Hinweise
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.