# Portfolio Deployment Guide ## Übersicht Dieses Portfolio verwendet ein **optimiertes CI/CD-System** mit Docker für Production-Deployment. Das System ist darauf ausgelegt, hohen Traffic zu bewältigen und automatische Tests vor dem Deployment durchzuführen. ## 🚀 Features ### ✅ **CI/CD Pipeline** - **Automatische Tests** vor jedem Deployment - **Security Scanning** mit Trivy - **Multi-Architecture Docker Builds** (AMD64 + ARM64) - **Health Checks** und Deployment-Verifikation - **Automatische Cleanup** alter Images ### ⚡ **Performance-Optimierungen** - **Multi-Stage Docker Build** für kleinere Images - **Nginx Load Balancer** mit Caching - **Gzip Compression** und optimierte Headers - **Rate Limiting** für API-Endpoints - **Resource Limits** für Container ### 🔒 **Sicherheit** - **Non-root User** im Container - **Security Headers** (HSTS, CSP, etc.) - **SSL/TLS Termination** mit Nginx - **Vulnerability Scanning** in CI/CD ## 📁 Dateistruktur ``` ├── .github/workflows/ │ └── ci-cd.yml # CI/CD Pipeline ├── scripts/ │ ├── deploy.sh # Deployment-Skript │ └── monitor.sh # Monitoring-Skript ├── docker-compose.prod.yml # Production Docker Compose ├── nginx.conf # Nginx Konfiguration ├── Dockerfile # Optimiertes Dockerfile └── env.example # Environment Template ``` ## 🛠️ Setup ### 1. **Environment Variables** ```bash # Kopiere die Beispiel-Datei cp env.example .env # Bearbeite die .env Datei mit deinen Werten nano .env ``` ### 2. **GitHub Secrets & Variables** Konfiguriere in deinem GitHub Repository: **Secrets:** - `GITHUB_TOKEN` (automatisch verfügbar) - `GHOST_API_KEY` - `MY_PASSWORD` - `MY_INFO_PASSWORD` **Variables:** - `NEXT_PUBLIC_BASE_URL` - `GHOST_API_URL` - `MY_EMAIL` - `MY_INFO_EMAIL` ### 3. **SSL-Zertifikate** ```bash # Erstelle SSL-Verzeichnis mkdir -p ssl # Kopiere deine SSL-Zertifikate cp your-cert.pem ssl/cert.pem cp your-key.pem ssl/key.pem ``` ## 🚀 Deployment ### **Automatisches Deployment** Das System deployt automatisch bei Push auf den `production` Branch: ```bash # Code auf production Branch pushen git push origin production ``` ### **Manuelles Deployment** ```bash # Lokales Deployment ./scripts/deploy.sh production # Oder mit npm npm run deploy ``` ### **Docker Commands** ```bash # Container starten npm run docker:compose # Container stoppen npm run docker:down # Health Check npm run health ``` ## 📊 Monitoring ### **Container Status** ```bash # Status anzeigen ./scripts/monitor.sh status # Oder mit npm npm run monitor status ``` ### **Health Check** ```bash # Application Health ./scripts/monitor.sh health # Oder direkt curl http://localhost:3000/api/health ``` ### **Logs anzeigen** ```bash # Letzte 50 Zeilen ./scripts/monitor.sh logs 50 # Live-Logs folgen ./scripts/monitor.sh logs 100 ``` ### **Metriken** ```bash # Detaillierte Metriken ./scripts/monitor.sh metrics ``` ## 🔧 Wartung ### **Container neustarten** ```bash ./scripts/monitor.sh restart ``` ### **Cleanup** ```bash # Docker-Ressourcen bereinigen ./scripts/monitor.sh cleanup ``` ### **Updates** ```bash # Neues Image pullen und deployen ./scripts/deploy.sh production ``` ## 📈 Performance-Tuning ### **Nginx Optimierungen** - **Gzip Compression** aktiviert - **Static Asset Caching** (1 Jahr) - **API Rate Limiting** (10 req/s) - **Load Balancing** bereit für Skalierung ### **Docker Optimierungen** - **Multi-Stage Build** für kleinere Images - **Non-root User** für Sicherheit - **Health Checks** für automatische Recovery - **Resource Limits** (512MB RAM, 0.5 CPU) ### **Next.js Optimierungen** - **Standalone Output** für Docker - **Image Optimization** (WebP, AVIF) - **CSS Optimization** aktiviert - **Package Import Optimization** ## 🚨 Troubleshooting ### **Container startet nicht** ```bash # Logs prüfen ./scripts/monitor.sh logs # Status prüfen ./scripts/monitor.sh status # Neustarten ./scripts/monitor.sh restart ``` ### **Health Check schlägt fehl** ```bash # Manueller Health Check curl -v http://localhost:3000/api/health # Container-Logs prüfen docker compose -f docker-compose.prod.yml logs portfolio ``` ### **Performance-Probleme** ```bash # Resource-Usage prüfen ./scripts/monitor.sh metrics # Nginx-Logs prüfen docker compose -f docker-compose.prod.yml logs nginx ``` ### **SSL-Probleme** ```bash # SSL-Zertifikate prüfen openssl x509 -in ssl/cert.pem -text -noout # Nginx-Konfiguration testen docker compose -f docker-compose.prod.yml exec nginx nginx -t ``` ## 📋 CI/CD Pipeline ### **Workflow-Schritte** 1. **Test** - Linting, Tests, Build 2. **Security** - Trivy Vulnerability Scan 3. **Build** - Multi-Arch Docker Image 4. **Deploy** - Automatisches Deployment ### **Trigger** - **Push auf `main`** - Build nur - **Push auf `production`** - Build + Deploy - **Pull Request** - Test + Security ### **Monitoring** - **GitHub Actions** - Pipeline-Status - **Container Health** - Automatische Checks - **Resource Usage** - Monitoring-Skript ## 🔄 Skalierung ### **Horizontal Scaling** ```yaml # In nginx.conf - weitere Backend-Server hinzufügen upstream portfolio_backend { least_conn; server portfolio:3000 max_fails=3 fail_timeout=30s; server portfolio-2:3000 max_fails=3 fail_timeout=30s; server portfolio-3:3000 max_fails=3 fail_timeout=30s; } ``` ### **Vertical Scaling** ```yaml # In docker-compose.prod.yml - Resource-Limits erhöhen deploy: resources: limits: memory: 1G cpus: '1.0' ``` ## 📞 Support Bei Problemen: 1. **Logs prüfen**: `./scripts/monitor.sh logs` 2. **Status prüfen**: `./scripts/monitor.sh status` 3. **Health Check**: `./scripts/monitor.sh health` 4. **Container neustarten**: `./scripts/monitor.sh restart`