Files
AFC-Demo/CI_CD_README.md
T
cbazza 94d02736f7
Build and Deploy to Synology NAS / test (push) Failing after 1h20m56s
Build and Deploy to Synology NAS / build (push) Failing after 11m7s
Build and Deploy to Synology NAS / deploy (push) Has been cancelled
Build and Deploy to Synology NAS / notify (push) Has been cancelled
ci: add automated Gitea Actions deployment workflow for Synology NAS
- Add Gitea Actions workflow for automated build and deployment
- Add deployment script for Synology NAS
- Add Docker Compose configurations for production deployment
- Add Gitea runner setup
- Add comprehensive documentation for CI/CD setup
- Add health check endpoint for deployment verification
- Update .gitignore for CI/CD artifacts
2025-12-17 13:02:38 +01:00

6.2 KiB

CI/CD Automatisierung für Synology NAS

Dieses Projekt ist vollständig für automatisches Deployment auf deiner Synology NAS mit Gitea Actions vorbereitet.

🚀 Schnellstart

1. Gitea Runner einrichten (einmalig)

# Auf der Synology NAS
cd /volume1/docker
mkdir gitea-runner
cd gitea-runner

# Environment Datei erstellen
cat > .env << 'EOF'
GITEA_URL=http://your-synology-ip:3000
RUNNER_TOKEN=your_token_from_gitea
RUNNER_NAME=synology-runner
EOF

# Runner starten
docker-compose -f /path/to/docker-compose.gitea-runner.yml up -d

Runner Token generieren:

  1. Gitea öffnen
  2. Repository → Settings → Actions → Runners
  3. "Create new Runner" klicken
  4. Token kopieren und in .env einfügen

📖 Detaillierte Anleitung: GITEA_RUNNER_SETUP.md

2. Repository Secrets konfigurieren (einmalig)

In Gitea: Repository → Settings → Secrets

Secret Name Wert Beschreibung
SYNOLOGY_HOST 192.168.1.100 IP deiner Synology
SYNOLOGY_USER admin SSH-Benutzername
SYNOLOGY_SSH_KEY -----BEGIN... Private SSH-Key
APP_KEY base64:... Laravel APP_KEY

SSH-Key erstellen:

# Auf der Synology NAS
ssh-keygen -t ed25519 -C "gitea-deploy" -f ~/.ssh/gitea_deploy
cat ~/.ssh/gitea_deploy.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/gitea_deploy  # Diesen Key als Secret verwenden

3. Code pushen und automatisch deployen! 🎉

git add .
git commit -m "feat: meine neue Funktion"
git push origin main

Das wars! Der Rest läuft automatisch:

  • Tests werden ausgeführt
  • Docker Image wird gebaut
  • Deployment auf NAS
  • Health Check
  • Benachrichtigung bei Erfolg/Fehler

📁 Wichtige Dateien

Datei Beschreibung
.gitea/workflows/deploy-synology.yml Gitea Actions Workflow
docker-compose.synology.yml Docker Compose für Deployment
scripts/deploy-synology.sh Deployment-Script
.env.synology.example Environment-Beispiel
SYNOLOGY_DEPLOYMENT.md Vollständige Deployment-Doku
GITEA_RUNNER_SETUP.md Gitea Runner Setup-Anleitung

🔄 Workflow-Prozess

1. Developer pushed Code zu Gitea
   ↓
2. Gitea Actions Workflow startet
   ↓
3. Tests laufen (Pest)
   ↓
4. Docker Image wird gebaut
   ↓
5. Image wird zur Synology NAS übertragen
   ↓
6. Deployment-Script läuft auf NAS
   ↓
7. Container werden aktualisiert
   ↓
8. Migrationen & Cache-Optimierung
   ↓
9. Health Check
   ↓
10. ✅ Deployment erfolgreich!

🎯 Features

Automatisierte Tests

  • PHP-Tests mit Pest
  • Frontend-Build-Validierung
  • Nur erfolgreiche Builds werden deployed

Intelligentes Deployment

  • Automatisches Backup vor Deployment
  • Rollback bei Fehlern
  • Health Checks nach Deployment
  • Zero-Downtime durch Docker

Branch-spezifisches Deployment

  • main → Production (Port 8080)
  • develop → Staging (Port 8081)
  • Feature-Branches → Nur Tests

Conventional Commits

Der Workflow akzeptiert nur Conventional Commits:

  • feat: - Neue Features
  • fix: - Bugfixes
  • docs: - Dokumentation
  • chore: - Wartung
  • refactor: - Code-Refactoring
  • test: - Tests
  • ci: - CI/CD Änderungen

Beispiel:

git commit -m "feat: add user authentication"
git commit -m "fix: resolve database connection issue"

🔍 Monitoring

Workflow Status prüfen

In Gitea:

  1. Repository öffnen
  2. Tab "Actions" anklicken
  3. Alle Runs mit Status sehen

Logs ansehen:

  • Klicke auf einen Run
  • Klicke auf einen Job (test/build/deploy)
  • Sieh detaillierte Logs

Container Logs

# Auf der Synology NAS via SSH
docker logs -f laravel_app
docker logs -f laravel_postgres

Health Endpoint

curl http://your-synology-ip:8080/health

Response:

{
  "status": "healthy",
  "timestamp": "2025-12-17T10:30:00Z",
  "app": "Laravel",
  "env": "production"
}

🛠 Manuelle Befehle

Manuelles Deployment

# Auf der Synology NAS
cd /volume1/docker/laravel-app
./scripts/deploy-synology.sh

Container verwalten

# Status prüfen
docker-compose -f docker-compose.synology.yml ps

# Logs ansehen
docker-compose -f docker-compose.synology.yml logs -f

# Neustart
docker-compose -f docker-compose.synology.yml restart

# Stoppen
docker-compose -f docker-compose.synology.yml down

Laravel Artisan

# Migrationen
docker exec laravel_app php artisan migrate

# Cache leeren
docker exec laravel_app php artisan cache:clear

# Shell öffnen
docker exec -it laravel_app sh

🐛 Troubleshooting

Workflow startet nicht

Prüfen:

  1. Runner Status in Gitea → Settings → Actions → Runners
  2. Commit-Message ist Conventional Commit Format
  3. Branch ist main oder develop

Lösung:

# Runner neu starten
docker restart gitea-runner

# Runner Logs prüfen
docker logs gitea-runner

Deployment schlägt fehl

Prüfen:

  1. SSH-Verbindung zur NAS funktioniert
  2. Alle Secrets sind korrekt gesetzt
  3. Deployment-Script ist executable

Lösung:

# SSH-Key testen
ssh -i ~/.ssh/gitea_deploy admin@your-synology-ip

# Permissions prüfen
chmod +x scripts/deploy-synology.sh

Health Check fehlschlägt

Prüfen:

  1. Container läuft: docker ps | grep laravel_app
  2. Logs: docker logs laravel_app
  3. Netzwerk: curl http://localhost:8080/health

Lösung:

# Container neu starten
docker-compose -f docker-compose.synology.yml restart

# .env prüfen
docker exec laravel_app cat .env.synology

📚 Weitere Dokumentation

🎉 Das wars!

Nach der einmaligen Einrichtung läuft alles automatisch:

  1. Code schreiben
  2. Commit & Push
  3. Warten bis Deployment fertig ist
  4. Anwendung ist live! 🚀

Happy Deploying! 🎊