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.
Node.js-Services erstellen
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-Services
SSH-Schlüssel konfigurieren
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 ""
Öffentlichen Schlüssel hinterlegen
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 abrufen
Fahren Sie mit diesen Schritten fort:
- Unter SSH public keys klicken Sie auf Add a public key.
- Geben Sie bei Description
GitHub Actionein. - Fügen Sie bei Key den zuvor kopierten öffentlichen Schlüssel ein.
Service-Einstellungen abrufen
Privaten Schlüssel hinterlegen
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 konfigurieren
Geben Sie "production" als Name ein und bestätigen Sie.
Umgebung festlegen
Klicken Sie auf No restriction und wählen Sie dann Selected branches and tags.
Umgebungsrestriktionen 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 festlegen
Umgebungs-Branch festlegen
Unter Environment secrets klicken Sie auf Add secret.
Secret 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 festlegen
Anschließend klicken Sie unter Environment variables auf Add variable.
Variablen 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 festlegen
Wenn Sie einen eigenen Domainnamen für Ihren Service eingerichtet haben, verwenden Sie Ihre eigene Domain anstelle von <XXXXXX>.stackhero-network.com.
Generierte Schlüssel löschen
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
GitHub Actions Workflow konfigurieren
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 haben
Das war's. Ihr Code ist jetzt für das automatische Deployment in die Produktion via GitHub Actions eingerichtet.
Staging-Umgebung erstellen
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.
Weiterführende Hinweise
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.