GitHub Actions & Mittwald: So richtest du ein automatisiertes Deployment per SSH ein

Headerbild GitHub Actions & Mittwald: So richtest du ein automatisiertes Deployment per SSH ein (Quelle: adpic.de)

Ein detaillierter Leitfaden für Entwickler – inklusive Schritt-für-Schritt-Anleitung und Tipps für mehr Effizienz. Schau Dir an, wie Du mit GitHub Actions ein automatisches SSH-Deployment auf Deinen Mittwald Webspace einrichten kannst.


Worum geht es in diesem Artikel?

Falls du regelmäßig Änderungen an deiner Website (z. B. einem statischen HTML-Projekt) vornimmst und diese schnell sowie sicher auf deinen Mittwald-Webspace übertragen möchtest, dann ist dieser Artikel genau das Richtige für dich.

Denn hier lernst du, wie du mit GitHub Actions ein vollautomatisiertes Deployment einrichtest, sodass jeder git push deine Änderungen direkt live schaltetohne manuelles FTP-Hochladen und ohne Sicherheitsrisiken.

Was du am Ende erreichen wirst:

  • Kein lästiges Hochladen per FTP mehr – GitHub übernimmt das Deployment für dich.
  • Schnellere Updates, weil nur geänderte Dateien übertragen werden (rsync).
  • Mehr Sicherheit, da SSH-Schlüssel anstelle von Passwörtern verwendet werden.
  • Volle Kontrolle, weil jede Änderung in Git nachverfolgbar ist.

Was du dafür benötigst:

  • Ein GitHub-Repository, in dem dein Projekt liegt.
  • Einen Mittwald-Webspace mit SSH-Zugang.
  • Grundlegende Kenntnisse in Git, SSH und YAML (falls nicht, keine Sorge – wir erklären alles verständlich).


Warum solltest du GitHub Actions + SSH nutzen?

VorteilWarum das wichtig ist
Vollständige AutomatisierungDu musst nie wieder manuell Dateien hochladen, weil GitHub Actions das Deployment übernimmt, sobald du Änderungen pushst.
Höhere SicherheitStatt unsicherer Passwörter wird ein SSH-Schlüssel verwendet, der verschlüsselt in GitHub Secrets gespeichert wird.
Schnellere ÜbertragungDank rsync werden nur die geänderten Dateien übertragen, was Zeit und Bandbreite spart.
Bessere NachverfolgbarkeitJede Änderung ist in Git dokumentiert, sodass du jederzeit nachvollziehen kannst, was wann deployed wurde.
Wiederholbare ProzesseGleiche Umgebung für Entwicklung und Live-System, was Fehler reduziert.

Wichtig für Einsteiger: Falls du noch unsicher bist, probiere zunächst die offizielle Mittwald-Git-Integration aus, bevor du diesen Workflow einrichtest.


Schritt-für-Schritt-Anleitung für Experten

1. SSH-Zugang auf Mittwald vorbereiten

Bevor du den Workflow einrichtest, musst du sicherstellen, dass GitHub Actions sich per SSH mit deinem Mittwald-Server verbinden kann.

1.1 Einen SSH-Schlüssel generieren (lokal auf deinem Rechner)

Öffne ein Terminal und führe folgenden Befehl aus:

ssh-keygen -t ed25519 -C "deploy@deine-domain.de"
Bash

  • Speichere den Schlüssel unter .ssh/id_ed25519 (privater Schlüssel) und .ssh/id_ed25519.pub (öffentlicher Schlüssel).
  • Verwende keine Passphrase, weil GitHub Actions diese nicht eingeben kann.

1.2 Den öffentlichen Schlüssel auf Mittwald hochladen

  1. Kopiere den öffentlichen Schlüssel in deine Zwischenablage:cat ~/.ssh/id_ed25519.pub | pbcopy # Mac # Oder unter Linux: cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard
  2. Logge dich in dein Mittwald-Kundenmenü ein und gehe zu: „SSH-Zugang“ → „Öffentlichen Schlüssel hinzufügen“.
  3. Füge den kopierten Schlüssel ein und speichere die Änderungen.

1.3 Known Hosts für GitHub Actions vorbereiten

Damit GitHub Actions den Mittwald-Server als vertrauenswürdig erkennt, musst du den Host-Fingerprint hinterlegen:

ssh-keyscan ssh.mittwald-server.info >> ~/.ssh/known_hosts
Bash

  • Kopiere den Inhalt der known_hosts-Datei, denn du wirst ihn später als GitHub Secret benötigen.

2. GitHub-Repository für das Deployment vorbereiten

Jetzt richtest du dein Repository so ein, dass GitHub Actions auf die notwendigen Daten zugreifen kann – aber natürlich sicher!

2.1 GitHub Secrets hinterlegen

  1. Gehe in deinem Repository zu: „Settings“ → „Secrets“ → „Actions“ → „New repository secret“.
  2. Füge folgende Secrets hinzu:
    • SSH_PRIVATE_KEYInhalt deines privaten SSH-Schlüssels (cat ~/.ssh/id_ed25519).
    • KNOWN_HOSTSInhalt der known_hosts-Datei, den du zuvor kopiert hast.

2.2 .gitignore anpassen, um sensible Dateien auszuschließen

Einige Dateien sollten NIEMALS auf den Live-Server deployed werden, weil sie sensible Daten enthalten oder unnötig sind. Füge daher folgende Einträge zu deiner .gitignore hinzu:

# Git- und GitHub-spezifische Dateien
.git/
.github/

# Node.js-Abhängigkeiten (falls nicht benötigt)
node_modules/

# Umgebungsvariablen und Konfigurationen
.env

3. Den GitHub Actions Workflow erstellen

Jetzt kommt der wichtigste Teil: Die Workflow-Datei, die das Deployment automatisiert.

3.1 Workflow-Datei anlegen

Erstelle einen neuen Ordner und eine neue Datei in deinem Repository:

.github/workflows/deploy-via-ssh.yml
Bash

3.2 Workflow-Konfiguration (YAML) einfügen

Kopiere folgenden Code und passe ihn an deine Bedürfnisse an:

name: Deploy to Mittwald via SSH

# Der Workflow wird ausgelöst, sobald du auf den main-Branch pushst
on:
  push:
    branches: [ "main" ]

jobs:
  deploy:
    runs-on: ubuntu-latest  # Die Umgebung, in der der Workflow läuft

    steps:
      # 1. Schritt: Repository auschecken
      - name: Checkout Repository
        uses: actions/checkout@v4

      # 2. Schritt: SSH-Schlüssel einrichten
      - name: Install SSH Key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}  # Der private Schlüssel aus den Secrets
          known_hosts: ${{ secrets.KNOWN_HOSTS }}  # Der Host-Fingerprint

      # 3. Schritt: Dateien per rsync auf den Server übertragen
      - name: Deploy via rsync
        run: |
          # WICHTIG: Passe diesen Pfad an deinen Mittwald-Webspace an!
          REMOTE_PATH="/kunden/123456_789/webseiten/deine-domain.de/html/"

          # rsync überträgt nur geänderte Dateien und löscht nicht mehr benötigte
          rsync -avz --delete \
            --exclude='.git/' \
            --exclude='.github/' \
            --exclude='node_modules/' \
            --exclude='wp-config.php' \
            ./ user123456@ssh.mittwald-server.info:$REMOTE_PATH
YAML

3.3 Wichtige Anpassungen, die du vornehmen musst

ParameterWas du ändern musstBeispiel
REMOTE_PATHDer Pfad zu deinem Webspace (findest du im Mittwald-Kundenmenü unter „Webspace“)./kunden/123456_789/webseiten/meine-seite.de/html/
user123456Dein Mittwald-Benutzername (z. B. u123456-789).u765432-1
--excludeDateien/Ordner, die nicht deployed werden sollen.--exclude='composer.json'

4. Workflow testen und Fehler beheben

Jetzt ist es Zeit, den Workflow zu testen!

4.1 Eine Test-Änderung pushen

Führe folgende Befehle aus, um den Workflow zu triggern:

git add .
git commit -m "Test: Deployment per GitHub Actions"
git push origin main
Bash

4.2 Logs prüfen und Fehler analysieren

  1. Gehe in deinem Repository zu „Actions“ und klicke auf den aktuellen Workflow-Run.
  2. Typische Fehler und ihre Lösungen:
FehlermeldungMögliche UrsacheLösung
Permission denied (publickey)SSH-Schlüssel oder Benutzername falsch.Prüfe, ob der private Schlüssel korrekt in GitHub Secrets hinterlegt ist.
Host key verification failedKNOWN_HOSTS fehlt oder ist falsch.Lade den Fingerprint neu hoch und prüfe die Formatierung.
rsync: failed to set permissionsBerechtigungen auf dem Server falsch.Führe chmod 755 /pfad/zu/html auf dem Server aus.

Build-Schritt vor dem Deployment (für Node.js, Composer etc.)

Falls dein Projekt Abhängigkeiten hat, die vor dem Deployment gebündelt werden müssen (z. B. mit npm, composer oder webpack), füge einen Build-Schritt hinzu:

- name: Install dependencies and build
  run: |
    npm install
    npm run build  # Oder: composer install
- name: Deploy built files
  run: rsync -avz --delete ./dist/ user123456@ssh.mittwald-server.info:$REMOTE_PATH
YAML

Benachrichtigungen bei Fehlern (Slack, E-Mail)

Damit du sofort informiert wirst, falls das Deployment scheitert, kannst du Slack- oder E-Mail-Benachrichtigungen einrichten:

- name: Notify on failure
  if: failure()  # Nur ausführen, wenn der Workflow fehlschlägt
  uses: rtCamp/action-slack-notify@v2
  env:
    SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
    SLACK_MESSAGE: "❌ Deployment fehlgeschlagen! 🚨"
    SLACK_TITLE: "Fehler beim Deployment"
YAML

Fazit: Warum sich der Aufwand lohnt

Mit diesem GitHub Actions Workflow hast du nun ein vollautomatisiertes, sicheres und schnelles Deployment-System, das:

  • Zeit spart, weil du keine Dateien mehr manuell hochladen musst.
  • Fehler reduziert, da jeder Schritt nachvollziehbar ist.
  • Skalierbar ist – egal, ob du WordPress, eine statische Seite oder eine Custom-Applikation betreibst.

Was könntest du als Nächstes tun?

  • CI/CD erweitern (z. B. mit automatischen Tests vor dem Deployment).
  • Mehrere Umgebungen einrichten (z. B. Staging und Produktion).
  • Backups automatisieren (z. B. mit wp db export vor jedem Deployment).


Fragen oder Probleme?

Falls etwas nicht wie erwartet funktioniert oder du Anpassungen benötigst, hinterlasse einfach einen Kommentar oder öffne ein Issue auf GitHub. Ich helfe gern weiter! 🚀


Letzte Aktualisierung: Oktober 2024
Hinweis: Dieser Artikel wird regelmäßig aktualisiert, um neue Best Practices und Sicherheitsstandards abzubilden.

Leave a reply

Your email address will not be published. Required fields are marked *