# Produktions-Deployment für Stargirlnails Kiel Diese Anleitung beschreibt das Deployment der Stargirlnails Kiel Buchungsanwendung in einer produktiven Umgebung mit SSL-Zertifikaten. ## 🏗️ Architektur ``` Internet → Nginx (Port 80/443) → Stargirlnails App (Port 3000) ↓ Certbot (SSL-Zertifikate) ``` ### Services: - **stargirlnails**: Hauptanwendung - **nginx**: Reverse Proxy mit SSL-Terminierung - **certbot**: Automatische SSL-Zertifikat-Verwaltung ## 📋 Voraussetzungen ### Server-Anforderungen: - **OS**: Linux (Ubuntu 20.04+ empfohlen) - **RAM**: Mindestens 2GB - **CPU**: Mindestens 1 Core - **Speicher**: Mindestens 10GB freier Speicher - **Ports**: 80, 443 müssen erreichbar sein ### Software: - Docker & Docker Compose installiert - Git installiert ### Domain-Konfiguration: - Domain muss auf Server-IP zeigen - DNS-A-Eintrag korrekt konfiguriert ## 🚀 Deployment ### 1. Repository klonen ```bash git clone cd mybeautybooking ``` ### 2. Umgebungsvariablen konfigurieren ```bash cp .env.example .env nano .env ``` **Wichtige Variablen für Produktion:** ```env # Domain-Konfiguration (ERFORDERLICH für SSL) DOMAIN=stargirlnails.de # Admin-Konfiguration (ERFORDERLICH für SSL) ADMIN_EMAIL=admin@stargirlnails.de # E-Mail-Konfiguration RESEND_API_KEY=your_resend_api_key_here EMAIL_FROM=noreply@stargirlnails.de # Produktionsmodus NODE_ENV=production ``` ### 3. SSL-Setup und Deployment ```bash # Linux/macOS chmod +x scripts/setup-ssl.sh ./scripts/setup-ssl.sh # Windows (PowerShell) .\scripts\setup-ssl.ps1 ``` Das Script: - ✅ Erstellt Docker Volumes - ✅ Konfiguriert Nginx mit der Domain - ✅ Erstellt SSL-Zertifikat via Let's Encrypt - ✅ Startet alle Services ### 4. Verifikation ```bash # Service-Status prüfen docker-compose -f docker-compose-prod.yml ps # Logs anzeigen docker-compose -f docker-compose-prod.yml logs -f # SSL-Zertifikat prüfen curl -I https://your-domain.com ``` ## 🔧 Verwaltung ### Service-Befehle ```bash # Services starten docker-compose -f docker-compose-prod.yml up -d # Services stoppen docker-compose -f docker-compose-prod.yml down # Logs anzeigen docker-compose -f docker-compose-prod.yml logs -f # Einzelnen Service neu starten docker-compose -f docker-compose-prod.yml restart stargirlnails ``` ### SSL-Zertifikat-Verwaltung ```bash # Zertifikat manuell erneuern docker-compose -f docker-compose-prod.yml run --rm certbot certbot renew # Zertifikat-Status prüfen docker-compose -f docker-compose-prod.yml run --rm certbot certbot certificates ``` **Automatische Erneuerung**: Certbot erneuert Zertifikate automatisch alle 12 Stunden. ### Updates ```bash # Code aktualisieren git pull origin main # Neues Image bauen und starten docker-compose -f docker-compose-prod.yml up -d --build # Alte Images aufräumen docker image prune -f ``` ## 🔒 Sicherheit ### Nginx-Sicherheitsfeatures: - ✅ **SSL/TLS**: TLS 1.2+ mit modernen Ciphern - ✅ **HSTS**: Strict Transport Security Header - ✅ **Rate Limiting**: API-Endpunkte geschützt - ✅ **Security Headers**: XSS, CSRF, Clickjacking-Schutz - ✅ **Gzip-Kompression**: Optimierte Performance ### Rate Limits: - **API-Endpunkte**: 10 Anfragen/Sekunde - **Login-Endpunkte**: 5 Anfragen/Minute ### Firewall-Empfehlung: ```bash # UFW (Ubuntu) sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enable ``` ## 📊 Monitoring ### Health Checks: ```bash # Anwendungs-Health-Check curl https://your-domain.com/health # SSL-Zertifikat-Status openssl s_client -connect your-domain.com:443 -servername your-domain.com ``` ### Logs überwachen: ```bash # Alle Logs docker-compose -f docker-compose-prod.yml logs -f # Nur Anwendungs-Logs docker-compose -f docker-compose-prod.yml logs -f stargirlnails # Nur Nginx-Logs docker-compose -f docker-compose-prod.yml logs -f nginx ``` ### Ressourcen-Monitoring: ```bash # Container-Ressourcen docker stats # Disk-Usage docker system df ``` ## 🚨 Troubleshooting ### Häufige Probleme: #### SSL-Zertifikat kann nicht erstellt werden ```bash # Prüfe Domain-Erreichbarkeit curl -I http://your-domain.com # Prüfe DNS-Einträge nslookup your-domain.com # Prüfe Port 80 telnet your-domain.com 80 ``` #### Services starten nicht ```bash # Detaillierte Logs docker-compose -f docker-compose-prod.yml logs # Container-Status docker-compose -f docker-compose-prod.yml ps # Volumes prüfen docker volume ls ``` #### Performance-Probleme ```bash # Ressourcen-Check docker stats # Nginx-Logs prüfen docker-compose -f docker-compose-prod.yml logs nginx | grep -i error ``` ### Log-Dateien: - **Anwendung**: `docker-compose logs stargirlnails` - **Nginx**: `docker-compose logs nginx` - **Certbot**: `docker-compose logs certbot` ## 🔄 Backup & Wiederherstellung ### Daten-Backup: ```bash # Storage-Daten sichern tar -czf backup-$(date +%Y%m%d).tar.gz .storage/ # SSL-Zertifikate sichern docker run --rm -v certbot-certs:/data -v $(pwd):/backup alpine tar czf /backup/ssl-backup-$(date +%Y%m%d).tar.gz -C /data . ``` ### Wiederherstellung: ```bash # Storage-Daten wiederherstellen tar -xzf backup-YYYYMMDD.tar.gz # SSL-Zertifikate wiederherstellen docker run --rm -v certbot-certs:/data -v $(pwd):/backup alpine tar xzf /backup/ssl-backup-YYYYMMDD.tar.gz -C /data ``` ## 📞 Support Bei Problemen: 1. Prüfe die Logs: `docker-compose -f docker-compose-prod.yml logs` 2. Prüfe den Service-Status: `docker-compose -f docker-compose-prod.yml ps` 3. Prüfe die Dokumentation in `docs/` 4. Erstelle ein Issue im Repository --- **Wichtiger Hinweis**: Diese Konfiguration ist für Produktionsumgebungen optimiert. Für Entwicklung verwende `docker-compose.yml`.