# Remote Development Setup - Mac → Linux Server

## 🔄 Entwicklungsworkflow: Mac Entwicklung → Linux Testing

Optimaler Workflow für Entwicklung auf Mac mit Testing auf Linux-Server, der der späteren Produktionsumgebung entspricht.

## 🚀 Quick Start

### **Auf dem Linux-Server (via SSH):**
```bash
# 1. Repository klonen (falls nicht geschehen)
git clone https://github.com/your-repo/rezepte-klaus.git
cd rezepte-klaus

# 2. Development-Umgebung einrichten
./setup-development.sh

# 3. Entwicklungsumgebung starten
./start-development.sh
```

### **Von deinem Mac aus zugreifen:**
```bash
# Option 1: Direkter Zugriff (wenn Server öffentlich)
http://SERVER_IP:3000

# Option 2: SSH-Tunnel (sicherer)
ssh -L 3000:localhost:3000 -L 3001:localhost:3001 -L 8080:localhost:8080 user@server
# Dann: http://localhost:3000
```

## 🏗️ Architektur-Übersicht

### **Development-Pipeline:**
```
┌─────────────┐    ┌─────────────────┐    ┌──────────────────┐
│     Mac     │    │  Linux Server   │    │   Production     │
│             │    │  (Development)  │    │                  │
│ VS Code     │───▶│ Docker Compose  │───▶│ Traefik + SSL    │
│ Git         │    │ Direct Ports    │    │ Registry Images  │
│ Testing     │    │ Hot Reload      │    │ External MySQL   │
└─────────────┘    └─────────────────┘    └──────────────────┘
   Local Dev         Linux Testing        Production Deploy
```

## 🛠️ Development-Umgebung Features

### **Was wird automatisch eingerichtet:**
- ✅ **Linux-spezifische Konfiguration** (IP-Erkennung, Netzwerk)
- ✅ **Development Docker Compose** (direkte Ports, Hot Reload)
- ✅ **Eigene MySQL-Instanz** (unabhängig von Production)
- ✅ **CORS für Remote-Zugriff** konfiguriert
- ✅ **phpMyAdmin** für Datenbank-Management

### **Port-Mapping (alle Interfaces 0.0.0.0):**
- **Frontend**: `3000:80`
- **Backend**: `3001:3001`
- **phpMyAdmin**: `8080:80`
- **MySQL**: `3307:3306`

## 🔧 Entwicklungsworkflows

### **1. Code-Sync-Strategien:**

#### **A) Git-basiert (empfohlen):**
```bash
# Auf Mac: Code ändern und committen
git add .
git commit -m "Feature XYZ"
git push

# Auf Server: Pullen und neu builden
git pull
docker-compose -f docker-compose.development.yml build frontend
docker-compose -f docker-compose.development.yml restart frontend
```

#### **B) VS Code Remote-SSH:**
```bash
# VS Code Extension installieren: "Remote - SSH"
# Direkt auf Server entwickeln
code --remote ssh-remote+user@server /path/to/rezepte-klaus
```

#### **C) rsync-Sync:**
```bash
# Automatischer Sync von Mac zu Server
rsync -avz --exclude 'node_modules' ./ user@server:/path/to/rezepte-klaus/
```

### **2. Container-Rebuild-Workflows:**

#### **Frontend-Änderungen:**
```bash
# Auf Server
docker-compose -f docker-compose.development.yml build frontend
docker-compose -f docker-compose.development.yml restart frontend
```

#### **Backend-Änderungen:**
```bash
# Auf Server
docker-compose -f docker-compose.development.yml build backend
docker-compose -f docker-compose.development.yml restart backend
```

#### **Full Rebuild:**
```bash
# Auf Server
docker-compose -f docker-compose.development.yml down
docker-compose -f docker-compose.development.yml up -d --build
```

## 🔒 Sichere Zugriffsmethoden

### **1. SSH-Tunnel (empfohlen für öffentliche Server):**
```bash
# Alle Development-Ports tunneln
ssh -L 3000:localhost:3000 \
    -L 3001:localhost:3001 \
    -L 8080:localhost:8080 \
    -L 3307:localhost:3307 \
    user@your-server.com

# Dann lokal zugreifen:
# Frontend: http://localhost:3000
# API: http://localhost:3001/api
# phpMyAdmin: http://localhost:8080
```

### **2. VPN-Zugriff:**
```bash
# Wenn Server im VPN/privaten Netzwerk
http://PRIVATE_SERVER_IP:3000
```

### **3. Firewall-Konfiguration:**
```bash
# Auf Server: Ports nur für Development freigeben
sudo ufw allow from YOUR_MAC_IP to any port 3000
sudo ufw allow from YOUR_MAC_IP to any port 3001
sudo ufw allow from YOUR_MAC_IP to any port 8080
```

## 🔄 Kontinuierliche Integration

### **Development → Testing → Production Pipeline:**

#### **1. Development (Linux Server):**
```bash
# Feature entwickeln und testen
./start-development.sh
# Test: http://server:3000
```

#### **2. Registry-Build (für Staging):**
```bash
# Images für Registry builden
./build-and-push.sh
```

#### **3. Production-Deployment:**
```bash
# Mit fertigen Registry-Images
./deploy-external-db.sh  # Oder ./deploy-traefik.sh
```

## 📊 Monitoring & Debugging

### **Live-Logs verfolgen:**
```bash
# Alle Services
docker-compose -f docker-compose.development.yml logs -f

# Nur Backend
docker-compose -f docker-compose.development.yml logs -f backend

# Nur Frontend
docker-compose -f docker-compose.development.yml logs -f frontend
```

### **Container-Status prüfen:**
```bash
docker-compose -f docker-compose.development.yml ps
docker-compose -f docker-compose.development.yml top
```

### **Performance-Monitoring:**
```bash
# Resource-Verbrauch
docker stats

# Container-Details
docker inspect rezepte-backend-dev
```

## 🛠️ Troubleshooting

### **Container starten nicht:**
```bash
# Logs prüfen
docker-compose -f docker-compose.development.yml logs

# Clean restart
docker-compose -f docker-compose.development.yml down -v
docker-compose -f docker-compose.development.yml up -d --build
```

### **Netzwerk-Verbindung fehlschlägt:**
```bash
# Server-IP prüfen
ip addr show
hostname -I

# Firewall-Status
sudo ufw status

# Port-Binding prüfen
netstat -tlnp | grep :3000
```

### **MySQL-Verbindung fehlschlägt:**
```bash
# MySQL-Logs
docker-compose -f docker-compose.development.yml logs mysql

# Direkter MySQL-Zugriff
docker exec -it rezepte-mysql-dev mysql -uroot -p
```

## 💡 Pro-Tips

### **1. Auto-Rebuild bei Änderungen:**
```bash
# File-Watcher für automatischen Rebuild
sudo apt install inotify-tools

# Watch-Script erstellen
#!/bin/bash
inotifywait -m -r --format '%w %e %f' -e modify ./nodejs-version/ | while read dir event file; do
    echo "File changed: $dir$file"
    if [[ "$dir" == *"frontend"* ]]; then
        docker-compose -f docker-compose.development.yml build frontend
        docker-compose -f docker-compose.development.yml restart frontend
    elif [[ "$dir" == *"backend"* ]]; then
        docker-compose -f docker-compose.development.yml build backend
        docker-compose -f docker-compose.development.yml restart backend
    fi
done
```

### **2. Development-Database Reset:**
```bash
# Datenbank zurücksetzen
docker-compose -f docker-compose.development.yml down -v
docker-compose -f docker-compose.development.yml up -d
```

### **3. Resource-Limits für Development:**
```yaml
# In docker-compose.development.yml
services:
  backend:
    deploy:
      resources:
        limits:
          memory: 512M
        reservations:
          memory: 256M
```

## 🎯 Zusammenfassung

### **Vorteile dieses Setups:**
- ✅ **Linux-Kompatibilität** testen vor Production
- ✅ **Isolierte Development-DB** (keine Konflikte)
- ✅ **Flexible Zugriffsmethoden** (direkt/SSH-Tunnel)
- ✅ **Hot Reload** für schnelle Entwicklung
- ✅ **Production-ähnliche Umgebung**

### **Workflow-Empfehlung:**
1. **Lokal entwickeln** (Mac mit VS Code)
2. **Code synchronisieren** (Git/rsync/Remote-SSH)
3. **Auf Linux testen** (Docker Development)
4. **Registry deployen** (Staging/Production)

**🚀 Perfect für professionelle Cross-Platform-Entwicklung!**