# Rezepte - Docker Deployment

Dieses Projekt kann komplett über Docker containerisiert betrieben werden.

## Voraussetzungen

- Docker Desktop installiert und gestartet
- mindestens 4GB freier RAM
- mindestens 2GB freier Festplattenspeicher

## Quick Start

```bash
# 1. Repository klonen/herunterladen
git clone <repository-url>
cd Rezepte_Klaus

# 2. Docker Deployment starten
./docker-deploy.sh

# 3. Warten bis alle Services bereit sind
# Das Script zeigt den Fortschritt an

# 4. Services nutzen:
# - Frontend: http://localhost:3000
# - Backend API: http://localhost:3001  
# - phpMyAdmin: http://localhost:8080
# - Legacy PHP: http://localhost:8090 (optional)
```

## Services stoppen

```bash
./docker-stop.sh
```

## Architektur

Das Docker-Setup besteht aus folgenden Services:

### Frontend (Port 3000)
- React/TypeScript Anwendung
- Nginx Web Server
- Optimiert für Produktion mit Caching

### Backend (Port 3001)  
- Node.js/Express API
- Prisma ORM für Database
- Multer für File Uploads
- Health Checks

### Database (Port 3306)
- MySQL 8.0
- Persistente Datenspeicherung
- Automatische Health Checks

### phpMyAdmin (Port 8080)
- Web-Interface für MySQL
- Benutzer: recipes_user
- Passwort: recipes_password_2024

### Legacy PHP (Port 8090) - Optional
- Bestehende PHP-Anwendung
- Für Migration und Kompatibilität

## Volumes & Persistenz

```bash
docker-data/
├── mysql/          # Database Dateien
├── uploads/        # Hochgeladene Bilder
└── logs/           # Application Logs
```

## Environment Configuration

Die Konfiguration erfolgt über `.env` Dateien:

- `.env.docker` - Produktion (Docker)
- `.env.development` - Entwicklung (lokal)

## Debugging

```bash
# Container Logs anzeigen
docker-compose -f docker-compose.modern.yml logs -f

# Specific Service Logs
docker-compose -f docker-compose.modern.yml logs -f backend
docker-compose -f docker-compose.modern.yml logs -f frontend

# In Container einloggen  
docker-compose -f docker-compose.modern.yml exec backend bash
docker-compose -f docker-compose.modern.yml exec frontend sh

# Container Status prüfen
docker-compose -f docker-compose.modern.yml ps

# Services neustarten
docker-compose -f docker-compose.modern.yml restart backend
```

## Development

Für lokale Entwicklung:

```bash
# Development Environment nutzen
cp .env.development .env

# Backend starten
cd backend
npm install
npm run dev

# Frontend starten  
cd frontend
npm install
npm run dev
```

## Migration von Legacy System

Das Docker-Setup migriert automatisch:

1. Bestehende Uploads aus `upload/` nach `docker-data/uploads/`
2. Database Schema über Prisma Migrations
3. Legacy PHP bleibt parallel verfügbar

## Security Features

- Non-root Container User
- Security Headers (CSP, HSTS, etc.)
- File Upload Validation
- Network Isolation
- Health Checks für alle Services

## Performance Optimization

- Multi-stage Docker Builds
- Nginx Gzip Compression
- Static Asset Caching
- Database Connection Pooling
- Upload Size Limits

## Troubleshooting

### Port bereits belegt
```bash
# Prüfe welche Ports belegt sind
lsof -i :3000
lsof -i :3001

# Ändere Ports in .env wenn nötig
FRONTEND_PORT=3010
BACKEND_PORT=3011
```

### Upload Probleme
```bash
# Prüfe Upload-Berechtigungen
ls -la docker-data/uploads/

# Upload Ordner neu erstellen
docker-compose -f docker-compose.modern.yml exec backend mkdir -p /app/uploads
```

### Database Connection
```bash
# MySQL Health Check
docker-compose -f docker-compose.modern.yml exec mysql mysqladmin ping

# Database Reset (⚠️ VORSICHT - löscht alle Daten)
docker-compose -f docker-compose.modern.yml down -v
```

## Backup & Restore

### Database Backup
```bash
docker-compose -f docker-compose.modern.yml exec mysql mysqldump -u recipes_user -p rezepte > backup.sql
```

### Upload Backup
```bash
tar -czf uploads-backup.tar.gz docker-data/uploads/
```

### Restore
```bash
# Database
docker-compose -f docker-compose.modern.yml exec -T mysql mysql -u recipes_user -p rezepte < backup.sql

# Uploads
tar -xzf uploads-backup.tar.gz
```