Python: Deployment mit GitHub Actions
Wie Sie Ihren Python-Code mit GitHub Actions bereitstellen
👋 Willkommen bei der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Python-Cloud-Lösung, die zahlreiche Vorteile bietet, darunter:
- Deployen Sie Ihre Anwendung in Sekundenschnelle 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 Leistung und robuste Sicherheit dank einer privaten und dedizierten VM.
Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Python-Cloud-Hosting-Lösung von Stackhero auszuprobieren!
GitHub Actions ermöglicht es Ihnen, Aufgaben zu automatisieren – einschließlich der Bereitstellung Ihres Python-Codes direkt auf Produktionsservern.
In dieser Anleitung erfahren Sie, wie Sie GitHub Actions sicher und zuverlässig einrichten, um Ihren Python-Code sowohl in Staging- als auch in Produktionsumgebungen zu deployen.
Zur besseren Organisation verwenden Sie zwei Branches: staging und production. Immer wenn Sie Code auf einen dieser Branches pushen, wird er automatisch auf die entsprechende Stackhero-Instanz bereitgestellt.
Eine Staging-Instanz ist nicht zwingend erforderlich. Sie können dieser Anleitung folgen und nur eine Produktionsinstanz verwenden. Um jedoch reibungslose Deployments sicherzustellen und mit voller Sicherheit in Produktion zu deployen, wird dringend empfohlen, sowohl eine Staging- als auch eine Produktionsinstanz zu betreiben. Diese Vorgehensweise ist Branchenstandard und eine bewährte Methode, um zahlreiche Probleme zu vermeiden.
Bevor Sie beginnen, stellen Sie sicher, dass Sie über ein GitHub-Konto und ein Repository verfügen, in dem Ihr Code gehostet wird.
Python-Services erstellen
Öffnen Sie Ihr Stackhero-Dashboard und erstellen Sie zwei Stackhero-Services – einen für Staging und einen für Produktion. Zur besseren Übersicht können Sie diese "Production" und "Staging" nennen.
Sie haben noch kein Stackhero-Konto? Sie können sich in nur zwei Minuten kostenlos registrieren und anschließend Ihre Python Cloud-Services mit wenigen Klicks erstellen.
Beispiel für Production- und Staging-Services
SSH-Schlüssel konfigurieren
SSH-Schlüssel ermöglichen es GitHub Actions, sich sicher mit Ihrem Python-Service zu verbinden, um den Code zu deployen. Dieser Schritt ist entscheidend, um Ihre Stackhero-Services zu schützen.
Auf Ihrem Computer können Sie neue SSH-Schlüssel generieren, indem Sie folgenden Befehl ausführen:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Öffentlichen Schlüssel hinterlegen
Zeigen Sie zunächst den gerade generierten öffentlichen Schlüssel an:
cat /tmp/ssh_key.pub
Wechseln Sie dann in Ihrem Stackhero-Dashboard zu Ihrem "production" Python-Service und klicken Sie auf den Button "Configure".
Service-Einstellungen aufrufen
Gehen Sie wie folgt vor:
- Unter
SSH public keysklicken Sie aufAdd a public key. - Geben Sie bei
Descriptionden WertGitHub Actionein. - Bei
Keyfügen Sie den kopierten öffentlichen Schlüssel ein.
Öffentlichen Schlüssel hinzufügen
Privaten Schlüssel hinterlegen
Gehen Sie auf die Seite Ihres GitHub-Projekts, klicken Sie auf Settings und dann auf Environments. Wählen Sie New environment.
GitHub Environments konfigurieren
Geben Sie im Feld Name "production" ein und bestätigen Sie.
Umgebung festlegen
Klicken Sie auf den Button No restriction und wählen Sie Selected branches and tags.
Umgebungsrestriktionen festlegen
Klicken Sie anschließend auf Add deployment branch or tag rule, geben Sie "production" im Feld Name pattern ein und klicken Sie auf Add rule.
Umgebungs-Branch festlegen
Umgebungs-Branch festlegen
Im Bereich Environment secrets klicken Sie auf Add secret.
Secret hinzufügen
Zeigen Sie nun den zuvor generierten privaten Schlüssel an:
cat /tmp/ssh_key
Verwenden Sie bei der Secret-Konfiguration STACKHERO_SSH_PRIVATE_KEY als Name und fügen Sie den privaten Schlüssel als Wert ein.
SSH Private Key Secret festlegen
Gehen Sie anschließend im Bereich Environment variables auf Add variable.
Variablen festlegen
Geben Sie STACKHERO_ENDPOINT als Name ein und fügen Sie den Endpoint Ihres Python-Services als Wert ein. 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 SSH-Schlüssel jetzt von Ihrem Computer zu entfernen, da Sie diese nicht mehr benötigen:
rm /tmp/ssh_key /tmp/ssh_key.pub
GitHub Actions Workflow konfigurieren
Erstellen Sie in Ihrem Git-Repository ein Verzeichnis namens .github/workflows, falls es noch nicht existiert. Legen Sie darin eine Datei mit dem Namen deploy-to-stackhero.yml an.
# 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 nach einem git push die Deploy-Action auslösen.
# Vergessen Sie nicht, eine Umgebung mit dem entsprechenden Branch-Namen in GitHub (unter "Settings"/"Environments") anzulegen.
# Fügen Sie dann das entsprechende 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 entsprechenden Branch-Umgebung auf GitHub unter "Settings"/"Environments" definiert sein.
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
Nachdem Sie die Workflow-Datei hinzugefügt haben, können Sie Ihre Änderungen committen:
git add -A .
git commit -m "GitHub Actions für Deployment zu Stackhero hinzufügen"
Sie können einen Production-Branch mit folgendem Befehl erstellen:
git checkout -b production
Und Ihre Änderungen zu GitHub pushen:
git push --set-upstream origin production
Dadurch wird Ihr Code auf den production-Branch bei GitHub gepusht und GitHub Actions ausgelöst, um Ihren Code auf Ihrer Stackhero-Instanz zu deployen.
Um den Status Ihres Deployments zu prüfen, besuchen Sie einfach die GitHub-Projektseite und klicken Sie auf Actions.
GitHub Actions, die nach Production deployed haben
Das war's. Sie haben jetzt automatische Deployments in Produktion mit GitHub Actions eingerichtet.
Staging-Umgebung erstellen
Das Einrichten einer Staging-Umgebung ist nahezu identisch mit der Konfiguration der Produktion. Sie können die obigen Schritte einfach wiederholen und überall production durch staging ersetzen.
Nachdem Sie die Umgebung eingerichtet haben, können Sie einen Staging-Branch wie folgt erstellen:
git checkout -b staging
Dann pushen Sie Ihren Staging-Branch zu GitHub:
git push --set-upstream origin staging
Ihr Staging-Branch wird nun automatisch auf die für Staging vorgesehene Python-Instanz deployed.
Weiterführende Hinweise
Es ist ratsam, die Branches production und staging zu schützen, um direkte Pushes zu verhindern. Mit dieser Konfiguration müssen Teammitglieder Pull Requests für den staging-Branch erstellen, die von berechtigten Nutzern geprüft und gemerged werden. Sobald die Änderungen auf der Staging-Plattform validiert wurden, kann der Pull Request von einer autorisierten Person in den production-Branch gemerged werden.
Dieser Workflow stellt sicher, dass nur geprüfte Änderungen in die Produktion gelangen und erhöht die Zuverlässigkeit, indem neue Features zunächst auf Staging getestet werden, bevor sie live gehen.