Node.js: Deployment mit GitHub Actions

Erfahren Sie, wie Sie Ihren Node.js-Code mit GitHub Actions bereitstellen

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Node.js Cloud Lösung, die zahlreiche Vorteile bietet, darunter:

  • Deployen Sie Ihre Anwendung in Sekundenschnelle mit einem einfachen git push.
  • Nutzen Sie Ihren eigenen Domainnamen und profitieren Sie von der automatischen Konfiguration von HTTPS-Zertifikaten für erhöhte Sicherheit.
  • Genießen Sie sorgenfreie 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 Node.js Cloud Hosting Lösung von Stackhero auszuprobieren!

GitHub Actions ermöglicht es Ihnen, Aufgaben wie das Deployment Ihres Node.js-Codes auf Produktionsserver einfach zu automatisieren. In dieser Anleitung zeigen wir Ihnen, wie Sie Ihre Node.js-Anwendung sicher und zuverlässig mit GitHub Actions sowohl in Staging- als auch in Produktionsumgebungen deployen können.

Wir empfehlen, zwei Branches zu pflegen: staging und production. Wenn Sie Code in einen dieser Branches pushen, werden Ihre Änderungen automatisch auf den entsprechenden Stackhero-Service deployed.

Eine Staging-Instanz ist optional. Sie können dieser Anleitung auch nur mit einer Produktionsinstanz folgen. Um Deployments reibungsloser zu gestalten und vor dem Live-Gang mehr Sicherheit zu gewinnen, wird jedoch dringend empfohlen, sowohl Staging- als auch Produktionsumgebungen zu betreiben. Dieses Vorgehen ist in der Branche weit verbreitet und hilft, typische Deployment-Probleme zu vermeiden.

Bevor Sie beginnen, stellen Sie sicher, dass Sie ein GitHub-Konto und ein Repository mit Ihrem Node.js-Code besitzen.

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

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

Beispiel für Node.js-ServicesBeispiel für Node.js-Services

SSH-Schlüssel ermöglichen es GitHub Actions, sich beim Deployment sicher mit Ihrem Node.js-Service zu verbinden. Dieser Schritt ist entscheidend, um Ihre Stackhero-Services zu schützen.

Auf Ihrem Computer können Sie neue SSH-Schlüssel wie folgt generieren:

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

Um den gerade erstellten öffentlichen Schlüssel anzuzeigen, führen Sie aus:

cat /tmp/ssh_key.pub

Wechseln Sie anschließend in Ihr Stackhero-Dashboard, wählen Sie Ihren Node.js-Produktionsservice aus und klicken Sie auf Configure.

Service-Einstellungen abrufenService-Einstellungen abrufen

Fahren Sie mit diesen Schritten fort:

  1. Unter SSH public keys klicken Sie auf Add a public key.
  2. Geben Sie bei Description GitHub Action ein.
  3. Fügen Sie bei Key den zuvor kopierten öffentlichen Schlüssel ein.

Service-Einstellungen abrufenService-Einstellungen abrufen

Wechseln Sie nun zu GitHub und öffnen Sie Ihr Projekt-Repository. Klicken Sie auf Settings und wählen Sie Environments. Wählen Sie New environment.

GitHub-Umgebungen konfigurierenGitHub-Umgebungen konfigurieren

Geben Sie "production" als Name ein und bestätigen Sie.

Umgebung festlegenUmgebung festlegen

Klicken Sie auf No restriction und wählen Sie dann Selected branches and tags.

Umgebungsrestriktionen festlegenUmgebungsrestriktionen festlegen

Klicken Sie nun 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

Um den generierten privaten Schlüssel abzurufen, führen Sie aus:

cat /tmp/ssh_key

Verwenden Sie in GitHub STACKHERO_SSH_PRIVATE_KEY als Name und fügen Sie Ihren privaten Schlüssel in das Feld Value ein.

SSH-Private-Key-Secret festlegenSSH-Private-Key-Secret festlegen

Anschließend klicken Sie unter Environment variables auf Add variable.

Variablen festlegenVariablen festlegen

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

Endpoint-Variable festlegenEndpoint-Variable festlegen

Wenn Sie einen eigenen Domainnamen für Ihren Service eingerichtet haben, verwenden Sie Ihre eigene Domain anstelle von <XXXXXX>.stackhero-network.com.

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

rm /tmp/ssh_key /tmp/ssh_key.pub

Erstellen Sie in Ihrem Git-Repository das Verzeichnis .github/workflows, falls es noch nicht existiert. Legen Sie dann eine Datei mit dem Namen deploy-to-stackhero.yml an:

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

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

on:
  push:
    # Geben Sie die Branches an, die die Deployment-Action auslösen. Stellen Sie sicher, dass für jeden Branch eine Umgebung in GitHub (unter "Settings" > "Environments") existiert.
    # 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:
        # STACKHERO_SSH_PRIVATE_KEY und STACKHERO_ENDPOINT sollten in der jeweiligen GitHub-Umgebung gesetzt sein.
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Nachdem Sie die Workflow-Datei erstellt haben, können Sie Ihre Änderungen wie folgt committen:

git add -A .
git commit -m "GitHub Actions für Deployment zu Stackhero hinzufügen"

Um einen Produktions-Branch zu erstellen, führen Sie aus:

git checkout -b production

Pushen Sie dann Ihre Änderungen zu GitHub:

git push --set-upstream origin production

Mit diesem Push wird Ihr Code in den production-Branch übertragen und GitHub Actions startet das Deployment zu Ihrem Stackhero-Service. Um das Deployment zu überprüfen, öffnen Sie Ihr Projekt auf GitHub und klicken Sie auf Actions.

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

Das war's. Ihr Code ist jetzt für das automatische Deployment in die Produktion via GitHub Actions eingerichtet.

Das Einrichten der Staging-Umgebung erfolgt nahezu identisch wie für die Produktion. Wiederholen Sie einfach die obigen Schritte und ersetzen Sie production durch staging, wo erforderlich.

Beginnen Sie mit dem Erstellen eines Staging-Branches:

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 den dafür vorgesehenen Node.js-Service deployen.

Es empfiehlt sich, die Branches production und staging zu schützen, um direkte Pushes zu verhindern. Stattdessen können Sie einen Pull Request auf den Staging-Branch erstellen und Änderungen aus Ihrem Entwicklungs-Branch mergen. Nachdem Sie die Änderungen auf der Staging-Plattform validiert haben, mergen Sie den Pull Request in den production-Branch.

Dieser Workflow stellt sicher, dass nur autorisierte Mitwirkende auf Staging und Produktion pushen können und bietet eine zusätzliche Teststufe, bevor neue Features live gehen.