Python: Bereitstellung 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, wie z.B. das Bereitstellen Ihres Python-Codes auf Produktionsservern.

In diesem Leitfaden lernen Sie, wie Sie GitHub Actions sicher und zuverlässig nutzen, um Ihren Python-Code in Staging- und Produktionsumgebungen bereitzustellen.

Dazu werden Sie zwei Branches pflegen: staging und production. Code, der in diese Branches gepusht wird, wird automatisch auf die entsprechende Stackhero-Instanz bereitgestellt.

Eine Staging-Instanz ist nicht zwingend erforderlich. Sie können diesem Leitfaden folgen und nur eine Produktionsinstanz haben. Um jedoch reibungslose Bereitstellungen zu gewährleisten und bei der Bereitstellung in die Produktion voll Vertrauen zu haben, wird dringend empfohlen, sowohl eine Staging- als auch eine Produktionsinstanz zu pflegen. Diese Praxis ist ein Industriestandard und ein sinnvoller Ansatz, der Ihnen helfen kann, zahlreiche Probleme zu vermeiden.

Bevor Sie beginnen, stellen Sie sicher, dass Sie ein GitHub-Konto mit einem Repository haben, das Ihren Code hostet.

Besuchen Sie Ihr Stackhero-Dashboard und erstellen Sie zwei Stackhero-Dienste, einen für Staging und einen für Produktion. Zur Klarheit können Sie diese Dienste in "Production" und "Staging" umbenennen.

Haben Sie noch kein Stackhero-Konto? Sie können sich in nur zwei Minuten kostenlos anmelden und dann Ihre Python-Cloud-Dienste mit nur wenigen Klicks erstellen.

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

SSH-Schlüssel ermöglichen es GitHub Actions, sicher mit Ihrem Python-Dienst für die Codebereitstellung zu verbinden. Dieser Schritt ist entscheidend, um Ihre Stackhero-Dienste zu schützen.

Erzeugen Sie auf Ihrem Computer neue SSH-Schlüssel, indem Sie folgendes ausführen:

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

Zuerst rufen Sie den gerade erzeugten öffentlichen Schlüssel ab:

cat /tmp/ssh_key.pub

Wählen Sie dann im Stackhero-Dashboard Ihren "production" Python-Dienst aus und klicken Sie auf die Schaltfläche "Konfigurieren".

Dienst-Einstellungen abrufenDienst-Einstellungen abrufen

Folgen Sie diesen Schritten:

  1. Klicken Sie in SSH public keys auf Add a public key.
  2. Geben Sie in Description GitHub Action ein.
  3. Fügen Sie in Key den von Ihrem Computer kopierten öffentlichen Schlüssel ein.

Öffentlichen Schlüssel hinzufügenÖffentlichen Schlüssel hinzufügen

Navigieren Sie zu Ihrer GitHub-Projektseite und klicken Sie auf Settings, dann auf Environments. 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 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 festlegenUmgebungs-Branch festlegen Umgebungs-Branch festlegenUmgebungs-Branch festlegen

Klicken Sie im Abschnitt Environment secrets auf Add secret.

Secret hinzufügenSecret hinzufügen

Rufen Sie nun den zuvor generierten privaten Schlüssel ab:

cat /tmp/ssh_key

Verwenden Sie in der Secret-Konfiguration STACKHERO_SSH_PRIVATE_KEY als Name und fügen Sie den privaten Schlüssel als Wert ein.

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

Klicken Sie dann im Abschnitt Environment variables auf Add variable.

Variablen festlegenVariablen festlegen

Geben Sie STACKHERO_ENDPOINT als Name ein und fügen Sie Ihren Python-Dienst-Endpunkt als Wert 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 entfernen Sie die SSH-Schlüssel von Ihrem Computer, da Sie sie nicht mehr benötigen:

rm /tmp/ssh_key /tmp/ssh_key.pub

Erstellen Sie in Ihrem Git-Repository ein Verzeichnis namens .github/workflows, falls es noch nicht existiert. Erstellen Sie dann eine Datei namens deploy-to-stackhero.yml in diesem Verzeichnis.

# 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 Umgebung zu erstellen, die dem Branch-Namen in GitHub entspricht (unter "Settings"/"Environments").
    # 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" sollten in der entsprechenden Branch-Umgebung auf GitHub unter "Settings"/"Environments" definiert sein.
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Bestätigen Sie diese Änderungen, indem Sie folgendes ausführen:

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

Erstellen Sie dann einen Produktions-Branch:

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 und löst GitHub Actions aus, um den Code auf Ihrer Stackhero-Instanz bereitzustellen.

Um die Bereitstellung zu überprüfen, besuchen Sie die GitHub-Projektseite und klicken Sie auf Actions.

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

Herzlichen Glückwunsch, Sie können jetzt Ihren Code automatisch in die Produktion mit GitHub Actions bereitstellen!

Das Einrichten der Staging-Umgebung ist sehr ähnlich wie die Konfiguration der Produktionsumgebung. Wiederholen Sie einfach die obigen Schritte und ersetzen Sie production durch staging.

Nachdem Sie die Umgebung eingerichtet haben, erstellen Sie einen Staging-Branch:

git checkout -b staging

Pushen Sie dann Ihren Staging-Branch zu GitHub:

git push --set-upstream origin staging

GitHub Actions wird Ihren Staging-Branch automatisch auf die für Staging vorgesehene Python-Instanz bereitstellen.

Es ist eine gute Praxis, die production und staging Branches zu schützen, um direkte Pushes zu verhindern. Mit dieser Konfiguration müssen Pull Requests für den staging Branch erstellt und von Teammitgliedern mit den entsprechenden Rechten zusammengeführt werden. Sobald sie auf der Staging-Plattform validiert sind, können die Pull Requests von denselben autorisierten Personen in den production Branch zusammengeführt werden.

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