Ruby: Deployment mit GitHub Actions
Wie Sie Ihren Ruby-Code mit GitHub Actions bereitstellen
👋 Willkommen bei der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Ruby 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 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 Ruby Cloud Hosting Lösung von Stackhero auszuprobieren!
GitHub Actions ermöglicht es Ihnen, Aufgaben wie das Deployment Ihres Ruby-Codes auf Ihren Produktionsservern zu automatisieren. Manuelle Schritte sind nicht erforderlich.
In dieser Anleitung erfahren Sie, wie Sie GitHub Actions sicher und zuverlässig einrichten, um Ihren Ruby-Code automatisch sowohl in Staging- als auch in Produktionsumgebungen zu deployen. Dieser Ansatz sorgt für konsistente Deployments und minimiert das Fehlerrisiko.
Zu Beginn arbeiten Sie mit zwei Branches in Ihrem GitHub-Repository: staging und production. Immer wenn Sie Code in einen dieser Branches pushen, werden Ihre Änderungen automatisch auf die entsprechende Stackhero-Instanz deployed.
Das Einrichten einer Staging-Instanz ist optional. Sie können dieser Anleitung auch nur mit einer Produktionsinstanz folgen, jedoch wird dringend empfohlen, sowohl Staging- als auch Produktionsumgebungen einzurichten. Dies gilt als Best Practice in der Branche und hilft, Fehler zu erkennen, bevor sie Ihre Produktionsnutzer erreichen.
Bevor Sie starten, stellen Sie sicher, dass Sie über ein GitHub-Konto und ein Repository mit Ihrem Ruby-Code verfügen.
Erstellen der Ruby-Services
Öffnen Sie Ihr Stackhero-Dashboard und erstellen Sie zwei Ruby-Services: einen für Staging und einen für Produktion. Zur besseren Übersicht empfiehlt es sich, diese Services in "Production" und "Staging" umzubenennen.
Sie haben noch kein Stackhero-Konto? Sie können sich in wenigen Minuten kostenlos registrieren und anschließend Ihre Ruby Cloud-Services mit nur wenigen Klicks erstellen.
Beispiel für Production- und Staging-Services
SSH-Schlüssel konfigurieren
Damit GitHub Actions Ihren Code deployen kann, müssen Sie SSH-Schlüssel einrichten. So stellen Sie sicher, dass nur autorisierte Aktionen auf Ihre Stackhero-Services zugreifen können und Ihre Deployments geschützt sind.
Sie können ein neues SSH-Schlüsselpaar auf Ihrem Rechner generieren mit:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Öffentlichen Schlüssel hinterlegen
Lesen Sie anschließend den gerade erstellten öffentlichen Schlüssel aus:
cat /tmp/ssh_key.pub
Wählen Sie im Stackhero-Dashboard Ihren "production" Ruby-Service aus und klicken Sie auf "Configure".
Service-Einstellungen abrufen
Dann:
- Unter
SSH public keysklicken Sie aufAdd a public key. - Bei
Descriptiongeben SieGitHub Actionein. - Bei
Keyfügen Sie den Inhalt Ihres öffentlichen Schlüssels von Ihrem Rechner ein.
Service-Einstellungen abrufen
Privaten Schlüssel hinterlegen
Gehen Sie nun auf die GitHub-Website und öffnen Sie Ihr Projekt.
Navigieren Sie zu Settings > Environments und klicken Sie auf New environment.
GitHub-Umgebungen konfigurieren
Geben Sie Ihrer Umgebung den Namen "production" und speichern Sie sie.
Umgebung festlegen
Klicken Sie auf den Button No restriction und wählen Sie Selected branches and tags.
Umgebungsrestriktionen festlegen
Klicken Sie auf Add deployment branch or tag rule, geben Sie als Pattern "production" ein und fügen Sie die Regel hinzu.
Umgebungs-Branch festlegen
Umgebungs-Branch festlegen
Um Ihren privaten SSH-Schlüssel sicher zu speichern, gehen Sie zu Environment secrets und klicken Sie auf Add secret.
Secret hinzufügen
Lesen Sie Ihren privaten Schlüssel von Ihrem Rechner aus:
cat /tmp/ssh_key
Für Name geben Sie STACKHERO_SSH_PRIVATE_KEY ein. Für Value fügen Sie den Inhalt Ihres privaten Schlüssels ein.
SSH Private Key Secret festlegen
Fügen Sie anschließend den Endpoint Ihres Ruby-Services als Umgebungsvariable hinzu. Klicken Sie auf Add variable unter Environment variables.
Variablen festlegen
Für Name geben Sie STACKHERO_ENDPOINT ein. Für Value fügen Sie den Endpoint Ihres Ruby-Services ein, den Sie im Stackhero-Dashboard finden.
Endpoint-Variable festlegen
Wenn Sie einen eigenen Domainnamen für Ihren Service eingerichtet haben, verwenden Sie bitte diesen anstelle von <XXXXXX>.stackhero-network.com.
Generierte Schlüssel löschen
Sobald Ihre Schlüssel in Stackhero und GitHub hinterlegt sind, können Sie sie aus Sicherheitsgründen von Ihrem Rechner löschen.
rm /tmp/ssh_key /tmp/ssh_key.pub
GitHub Actions Workflow konfigurieren
Erstellen Sie auf Ihrem lokalen Rechner im Git-Repository ein Verzeichnis namens .github/workflows. 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 das Deployment auslösen.
# Vergessen Sie nicht, eine Umgebung mit dem 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 jeweiligen 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 erstellt haben, können Sie Ihre Änderungen committen.
git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"
Erstellen Sie anschließend einen Production-Branch.
git checkout -b production
Zum Schluss pushen Sie Ihre Änderungen zu GitHub.
git push --set-upstream origin production
Mit diesem letzten git push wird Ihr Code in den production-Branch auf GitHub hochgeladen. GitHub Actions startet dann automatisch und deployed Ihren Code auf Ihre Stackhero-Instanz.
Um Ihren Workflow in Aktion zu sehen, besuchen Sie die GitHub-Seite Ihres Projekts und klicken Sie auf Actions.
GitHub Actions, die nach Production deployed haben
Herzlichen Glückwunsch, Sie haben soeben Continuous Deployment für Production mit GitHub Actions eingerichtet.
Staging-Umgebung erstellen
Das Einrichten der Staging-Umgebung erfolgt nach dem gleichen Prinzip wie für Production. Wiederholen Sie einfach die oben genannten Schritte und ersetzen Sie überall production durch staging, wo es erforderlich ist.
Sobald Ihre Staging-Umgebung eingerichtet ist, können Sie einen Staging-Branch erstellen.
git checkout -b staging
Pushen Sie Ihren Staging-Branch zu GitHub.
git push --set-upstream origin staging
GitHub Actions wird nun automatisch Ihren Staging-Branch auf die dafür vorgesehene Stackhero Ruby-Instanz für Staging deployen.
Weiterführende Hinweise
Um Ihre Deployments zusätzlich abzusichern, empfiehlt es sich, die Branches production und staging zu schützen. Das bedeutet, dass direkte Pushes eingeschränkt werden und Änderungen nur über Pull Requests erfolgen können. Teammitglieder mit den entsprechenden Berechtigungen können Pull Requests für staging prüfen und freigeben. Sobald alles passt, können die Änderungen auf die gleiche Weise in production gemerged werden.
Mit diesem Workflow erhöhen Sie die Sicherheit (nur autorisierte Nutzer können auf staging und production deployen) und die Zuverlässigkeit (alle neuen Features werden zunächst in Staging getestet, bevor sie in Produktion gehen). So stellen Sie reibungslose Deployments sicher und halten Ihre Produktionsumgebung stabil.