6.3 KiB
Gitea Webhook Setup - Automatisches Deployment
Diese Anleitung erklärt, wie du einen Gitea-Webhook einrichtest, um automatisch zu deployen, wenn Code gepusht wird.
Übersicht
Der Webhook funktioniert folgendermaßen:
- Push auf Gitea → Gitea sendet Webhook-Event an deinen Server
- Webhook-Handler empfängt das Event und verifiziert die Signatur
- Deployment-Skript wird ausgeführt:
- Git Pull (falls auf Server)
- Frontend Build (
npm run build) - Upload auf Production-Server (via SCP/SSH)
- Backend Neustart (optional, via PM2)
Voraussetzungen
- ✅ Gitea-Repository mit deinem Code
- ✅ Production-Server mit SSH-Zugriff
- ✅ Node.js auf dem Server installiert
- ✅ PM2 installiert (optional, für Backend-Neustart)
Schritt 1: Webhook-Secret generieren
Generiere ein sicheres Secret für die Webhook-Signatur-Verification:
# Generiere ein zufälliges Secret (32 Zeichen)
node -e "console.log(require('crypto').randomBytes(16).toString('hex'))"
Wichtig: Speichere dieses Secret sicher - du brauchst es in Schritt 3 und 4.
Schritt 2: Environment Variables konfigurieren
Füge folgende Variablen zu deiner server/.env Datei hinzu:
# Gitea Webhook Secret (aus Schritt 1)
GITEA_WEBHOOK_SECRET=dein_generiertes_secret_hier
# Optional: Authorization Header Token
GITEA_WEBHOOK_AUTH_TOKEN=dein_auth_token_hier
# Server-Deployment (optional, nur wenn automatischer Upload gewünscht)
DEPLOY_SERVER_HOST=91.99.156.85
DEPLOY_SERVER_USER=root
DEPLOY_SERVER_PATH=/var/www/emailsorter
DEPLOY_SSH_KEY=/path/to/ssh/private/key # Optional, falls SSH-Key benötigt wird
DEPLOY_FRONTEND_PATH=/var/www/emailsorter/client/dist
DEPLOY_BACKEND_PATH=/var/www/emailsorter/server
# PM2 für Backend-Neustart (optional)
USE_PM2=true
Schritt 3: Webhook in Gitea konfigurieren
-
Öffne dein Repository in Gitea
-
Gehe zu Settings → Webhooks
-
Klicke auf Add Webhook → Gitea
-
Fülle die Felder aus:
-
Target URL:
https://emailsorter.webklar.com/api/webhook/gitea(Ersetze mit deiner tatsächlichen Domain)
-
HTTP Method:
POST -
Post Content Type:
application/json -
Secret:
dein_generiertes_secret_hier(Das gleiche Secret wie in Schritt 1)
-
Authorization Header: (Optional)
Bearer dein_auth_token_hier -
Trigger On:
- ✅ Push Events (wichtig!)
- Optional: Create, Delete (falls gewünscht)
-
Branch Filter:
mainodermaster(je nach deinem Standard-Branch)
-
-
Klicke auf Add Webhook
Schritt 4: Webhook testen
Option A: Test über Gitea UI
- Gehe zurück zu Settings → Webhooks
- Klicke auf deinen Webhook
- Klicke auf Test Delivery → Push Events
- Prüfe die Antwort:
- ✅ Status 202 = Webhook empfangen, Deployment gestartet
- ❌ Status 401 = Secret falsch
- ❌ Status 500 = Server-Fehler (prüfe Server-Logs)
Option B: Test über Git Push
- Mache eine kleine Änderung (z.B. Kommentar in einer Datei)
- Committe und pushe:
git add . git commit -m "test: Webhook test" git push - Prüfe die Server-Logs:
# Auf dem Server pm2 logs emailsorter-backend # Oder tail -f /var/log/emailsorter/webhook.log - Du solltest sehen:
📥 Gitea Webhook empfangen 🚀 Starte Deployment... 📦 Baue Frontend... ✅ Deployment erfolgreich abgeschlossen
Schritt 5: Deployment-Logs prüfen
Die Webhook-Handler loggen alle Schritte. Prüfe die Logs:
# PM2 Logs
pm2 logs emailsorter-backend
# Oder direkt im Server
tail -f server/logs/webhook.log
Fehlerbehebung
Webhook wird nicht ausgelöst
- ✅ Prüfe, ob die Target URL korrekt ist
- ✅ Prüfe, ob der Server erreichbar ist (
curl https://emailsorter.webklar.com/api/webhook/status) - ✅ Prüfe Gitea-Logs: Settings → Webhooks → Delivery Log
"Ungültige Webhook-Signatur" (401)
- ✅ Prüfe, ob
GITEA_WEBHOOK_SECRETinserver/.envgesetzt ist - ✅ Prüfe, ob das Secret in Gitea genau gleich ist (keine Leerzeichen!)
- ✅ Prüfe, ob der Webhook "application/json" als Content-Type verwendet
Deployment schlägt fehl
- ✅ Prüfe Server-Logs für detaillierte Fehlermeldungen
- ✅ Prüfe, ob SSH-Zugriff funktioniert:
ssh root@91.99.156.85 - ✅ Prüfe, ob
npmundnodeauf dem Server installiert sind - ✅ Prüfe, ob die Pfade (
DEPLOY_SERVER_PATH) korrekt sind
Frontend-Build fehlgeschlagen
- ✅ Prüfe, ob alle Dependencies installiert sind:
cd client && npm install - ✅ Prüfe, ob
.env.productionkorrekt konfiguriert ist - ✅ Prüfe Build-Logs für TypeScript/ESLint-Fehler
Backend startet nicht neu
- ✅ Prüfe, ob PM2 installiert ist:
pm2 --version - ✅ Prüfe, ob
USE_PM2=truein.envgesetzt ist - ✅ Prüfe PM2-Status:
pm2 list
Sicherheit
Best Practices
- Webhook-Secret: Verwende immer ein starkes, zufälliges Secret
- HTTPS: Stelle sicher, dass dein Server HTTPS verwendet (Let's Encrypt)
- Firewall: Beschränke Webhook-Endpoint auf Gitea-IPs (optional)
- Rate Limiting: Der Webhook-Endpoint ist bereits rate-limited
- Logs: Prüfe regelmäßig die Webhook-Logs auf verdächtige Aktivitäten
Alternative: Lokales Deployment ohne Server-Upload
Falls du den automatischen Upload auf den Server nicht möchtest, kannst du:
DEPLOY_SERVER_HOSTnicht setzen- Das Deployment-Skript erstellt nur den Build lokal
- Du lädst die Dateien manuell hoch oder verwendest ein anderes Tool
Der Webhook wird trotzdem ausgelöst und erstellt den Build, aber überspringt den Upload-Schritt.
Manuelles Deployment auslösen
Du kannst das Deployment auch manuell auslösen:
# Auf dem Server
cd /var/www/emailsorter
node scripts/deploy-to-server.mjs
Nächste Schritte
Nach erfolgreichem Setup:
- ✅ Teste den Webhook mit einem kleinen Push
- ✅ Prüfe, ob die Website aktualisiert wurde
- ✅ Überwache die Logs für die ersten Deployments
- ✅ Dokumentiere deine spezifische Konfiguration
Support
Bei Problemen:
- Prüfe die Server-Logs
- Prüfe Gitea Webhook Delivery Logs
- Prüfe die Environment Variables
- Teste SSH-Verbindung manuell