🚀 Add automatic deployment system
- Add auto-deploy.sh script with full CI/CD pipeline - Add quick-deploy.sh for fast development deployments - Add Git post-receive hook for automatic deployment on push - Add comprehensive deployment documentation - Add npm scripts for easy deployment management - Include health checks, logging, and cleanup - Support for automatic rollback on failures
This commit is contained in:
272
DEPLOYMENT.md
Normal file
272
DEPLOYMENT.md
Normal file
@@ -0,0 +1,272 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user