# Florale Emotion - Kubernetes Deployment

Dieses Dokument beschreibt das Deployment-Setup für das Florale Emotion Projekt.

## Übersicht

Das Projekt besteht aus drei Hauptkomponenten:
- **Frontend**: Angular-basierte Website
- **Backend**: Node.js API Server
- **Social Media Bot**: Automatisierte Social Media Posting

## Deployment-Umgebungen

### Development
- **URL**: https://dev.florale-emotion.de
- **API**: https://api-dev.florale-emotion.de
- **Trigger**: Feature-Branches (`feature/*`)
- **Namespace**: `florale-emotion`

### Production
- **URL**: https://florale-emotion.de, https://www.florale-emotion.de
- **API**: https://api.florale-emotion.de
- **Trigger**: Main/Master Branch
- **Namespace**: `florale-emotion`

## Pipeline-Struktur

### Gitea Workflow
Die Pipeline wird durch `.gitea/workflows/deploy.yml` definiert und umfasst:

1. **Feature Branch Deployment**
   - Baut und pushed Docker Images mit Branch-spezifischen Tags
   - Deployed auf dev.florale-emotion.de
   - Verwendet dynamische Image-Tags (kein `latest`)

2. **Production Deployment**
   - Baut und pushed sowohl versionierte als auch `latest` Tags
   - Deployed auf florale-emotion.de
   - Vollständige SSL-Konfiguration

### Docker Images
Alle Images werden in der Harbor Registry gespeichert:
- `registry.julianvollmer.de/florale-emotion/florale-emotion-frontend` (Node.js 20 + Angular 17)
- `registry.julianvollmer.de/florale-emotion/florale-emotion-backend` (Node.js 20 + Express)
- `registry.julianvollmer.de/florale-emotion/florale-emotion-bot` (Node.js 20 + Cron Jobs)

### Technische Anforderungen
- **Node.js Version:** 20+ (erforderlich für AWS SDK)
- **Angular CLI:** Wird als devDependency installiert
- **Build-Prozess:** Multi-stage Docker Build für optimale Image-Größe

## Kubernetes-Manifeste

### Frontend (`website/k8s/frontend.yaml`)
- 2 Replicas für High Availability
- Nginx-basiertes Angular Deployment
- Health Checks auf Port 80
- Resource Limits: 256Mi RAM, 200m CPU

### Backend (`website/k8s/backend.yaml`)
- 2 Replicas für Load Balancing
- Node.js API auf Port 3000
- Health Checks auf `/health` Endpoint
- Resource Limits: 512Mi RAM, 300m CPU

### Social Media Bot (`website/k8s/bot.yaml`)
- 1 Replica (Singleton Service)
- Scheduled/Cron-basierte Ausführung
- Resource Limits: 256Mi RAM, 100m CPU

### Ingress Konfiguration (Traefik)
- **Production** (`ingress.yaml`): florale-emotion.de, www.florale-emotion.de, api.florale-emotion.de
- **Development** (`ingress-dev.yaml`): dev.florale-emotion.de, api-dev.florale-emotion.de
- Traefik als Kubernetes Ingress Controller
- Automatische SSL-Zertifikate via Let's Encrypt
- HTTPS-Weiterleitung aktiviert

### DNS-Konfiguration
Folgende DNS-Einträge sind erforderlich:
```
dev.florale-emotion.de      CNAME   traefik.julianvollmer.de
api-dev.florale-emotion.de  CNAME   traefik.julianvollmer.de
api.florale-emotion.de      CNAME   traefik.julianvollmer.de
```

## Deployment-Prozess

### Automatisches Deployment
1. Code-Push auf Feature-Branch oder Main
2. Gitea Pipeline startet automatisch
3. Docker Images werden gebaut und gepushed
4. Kubernetes Deployments werden aktualisiert
5. Health Checks bestätigen erfolgreiche Bereitstellung

### Manuelle Schritte (falls nötig)
```bash
# Namespace erstellen
kubectl create namespace florale-emotion

# Harbor Registry Secret erstellen
kubectl create secret docker-registry harbor-registry-secret \
  --docker-server=registry.julianvollmer.de \
  --docker-username=admin \
  --docker-password=Harbor12345 \
  --namespace=florale-emotion

# Deployments anwenden
kubectl apply -f website/k8s/ -n florale-emotion
```

## Monitoring & Troubleshooting

### Logs anzeigen
```bash
# Frontend Logs
kubectl logs -f deployment/florale-emotion-frontend -n florale-emotion

# Backend Logs
kubectl logs -f deployment/florale-emotion-backend -n florale-emotion

# Bot Logs
kubectl logs -f deployment/florale-emotion-bot -n florale-emotion
```

### Status prüfen
```bash
# Deployment Status
kubectl get deployments -n florale-emotion

# Pod Status
kubectl get pods -n florale-emotion

# Service Status
kubectl get services -n florale-emotion

# Ingress Status
kubectl get ingress -n florale-emotion
```

## Sicherheit

- Alle Images werden aus einer privaten Harbor Registry bezogen
- Non-root Container für Backend und Bot
- Security Headers in Nginx-Konfiguration
- HTTPS-Erzwingung für alle Domains
- Resource Limits für alle Container

## Skalierung

Die Anwendung kann horizontal skaliert werden:
```bash
# Frontend skalieren
kubectl scale deployment florale-emotion-frontend --replicas=3 -n florale-emotion

# Backend skalieren
kubectl scale deployment florale-emotion-backend --replicas=3 -n florale-emotion
```

## Backup & Recovery

- Kubernetes-Manifeste sind in Git versioniert
- Docker Images sind in Harbor Registry gespeichert
- Datenbank-Backups (falls vorhanden) sollten separat konfiguriert werden