# 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)

```bash
# 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
ll
```

**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](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:**

```bash
# 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! 🎉

```bash
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/workflows/deploy-synology.yml) | Gitea Actions Workflow |
| [`docker-compose.synology.yml`](docker-compose.synology.yml) | Docker Compose für Deployment |
| [`scripts/deploy-synology.sh`](scripts/deploy-synology.sh) | Deployment-Script |
| [`.env.synology.example`](.env.synology.example) | Environment-Beispiel |
| [`SYNOLOGY_DEPLOYMENT.md`](SYNOLOGY_DEPLOYMENT.md) | Vollständige Deployment-Doku |
| [`GITEA_RUNNER_SETUP.md`](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:**
```bash
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

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

### Health Endpoint

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

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

## 🛠 Manuelle Befehle

### Manuelles Deployment

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

### Container verwalten

```bash
# 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

```bash
# 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:**
```bash
# 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:**
```bash
# 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:**
```bash
# Container neu starten
docker-compose -f docker-compose.synology.yml restart

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

## 📚 Weitere Dokumentation

- **Deployment Details:** [SYNOLOGY_DEPLOYMENT.md](SYNOLOGY_DEPLOYMENT.md)
- **Gitea Runner Setup:** [GITEA_RUNNER_SETUP.md](GITEA_RUNNER_SETUP.md)
- **Workflow Konfiguration:** [.gitea/workflows/deploy-synology.yml](.gitea/workflows/deploy-synology.yml)
- **Deployment Script:** [scripts/deploy-synology.sh](scripts/deploy-synology.sh)

## 🎉 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!** 🎊
