Automatisiertes Deployment mit GitHub Actions – So funktioniert’s
In diesem Beitrag zeige ich, wie du den manuellen Deployment-Prozess deines Symfony-Projekts automatisieren kannst. Anstatt dich jedes Mal manuell per SSH einzuloggen und Befehle wie git pull, composer install --no-dev --optimize-autoloader und php bin/console cache:clear --env=prod auszuführen, übernimmt GitHub Actions diesen Prozess für dich.
Der manuelle Ablauf
Stell dir vor, du müsstest dich jedes Mal per SSH in deinen Produktionsserver einloggen und dort Folgendes tun:
- In das Projektverzeichnis wechseln:
cd /home/www/mein-projekt - Den Code aktualisieren:
git pull - Abhängigkeiten installieren:
composer install --no-dev --optimize-autoloader - Den Symfony-Cache leeren:
php bin/console cache:clear --env=prod
Diese Befehle führst du aktuell manuell aus – nun soll dieser Ablauf automatisiert werden.
Deployment via GitHub Actions
Mit GitHub Actions kannst du einen Workflow erstellen, der diese Schritte automatisch per SSH auf deinem Produktionsserver ausführt. Hier ein Beispiel-Workflow:
name: Deploy to Production
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
path: mein-projekt # Hier wird der Code in den Ordner "mein-projekt" geklont
- name: Deploy via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.PRODUCTION_HOST }}
username: ${{ secrets.PRODUCTION_USER }}
password: ${{ secrets.PRODUCTION_PASSWORD }}
port: 22
script: |
cd /home/www/mein-projekt
git pull
composer install --no-dev --optimize-autoloader
php bin/console cache:clear --env=prod
Diesen Workflow am besten unter .github/workflows/deploy.yml speichern und zum Repository mit add und push hochladen. Dann schnappt sich github diesen Workflow von selbst und führt ihn sofort aus.
Was passiert in diesem Workflow?
- Checkout:
Mit deractions/checkout@v3-Action wird dein Repository in einen Ordner (hiermein-projekt) im Runner geladen. - Deployment via SSH:
Die appleboy/ssh-action baut eine SSH-Verbindung zu deinem Produktionsserver auf. Imscript-Block werden genau jene Befehle ausgeführt, die du auch manuell ausführen würdest:- Wechsel in das richtige Verzeichnis (
cd /home/www/mein-projekt) - Aktualisierung des Codes (
git pull) - Installation der Abhängigkeiten (
composer install --no-dev --optimize-autoloader) - Leeren des Symfony-Caches (
php bin/console cache:clear --env=prod)
- Wechsel in das richtige Verzeichnis (
Einsatz von Secrets in GitHub Actions
Sensible Informationen wie der Server-Hostname, der SSH-Benutzername und das Passwort sollten nicht im Code stehen. Stattdessen legst du diese in den Repository-Einstellungen unter Settings > Secrets and variables > Actions an. Zum Beispiel:
PRODUCTION_HOST– der Hostname oder die IP deines ProduktionsserversPRODUCTION_USER– dein SSH-BenutzernamePRODUCTION_PASSWORD– das Passwort zur SSH-Authentifizierung
Im Workflow werden diese Secrets über die Syntax ${{ secrets.DEIN_SECRET }} referenziert, sodass sie sicher bleiben.
Mit diesem automatisierten Deployment-Workflow musst du dich nicht mehr manuell in deinen Server einloggen und Befehle ausführen. Der Workflow übernimmt den kompletten Ablauf – von der Aktualisierung des Codes über die Installation der Abhängigkeiten bis hin zum Leeren des Caches. Das reduziert mögliche Fehlerquellen und spart Zeit.
Als Referenz und weiterführende Informationen empfehle ich die offizielle Dokumentation von GitHub Actions zum Deployment:
Deploying with GitHub Actions
0 Kommentare