Files
Rezepte/REMOTE_DEVELOPMENT.md

7.5 KiB

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):

# 1. Repository klonen (falls nicht geschehen)
git clone https://github.com/your-repo/rezepte.git
cd rezepte

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

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

Von deinem Mac aus zugreifen:

# 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):

# 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:

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

C) rsync-Sync:

# Automatischer Sync von Mac zu Server
rsync -avz --exclude 'node_modules' ./ user@server:/path/to/rezepte/

2. Container-Rebuild-Workflows:

Frontend-Änderungen:

# Auf Server
docker-compose -f docker-compose.development.yml build frontend
docker-compose -f docker-compose.development.yml restart frontend

Backend-Änderungen:

# Auf Server
docker-compose -f docker-compose.development.yml build backend
docker-compose -f docker-compose.development.yml restart backend

Full Rebuild:

# 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):

# 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:

# Wenn Server im VPN/privaten Netzwerk
http://PRIVATE_SERVER_IP:3000

3. Firewall-Konfiguration:

# 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):

# Feature entwickeln und testen
./start-development.sh
# Test: http://server:3000

2. Registry-Build (für Staging):

# Images für Registry builden
./build-and-push.sh

3. Production-Deployment:

# Mit fertigen Registry-Images
./deploy-external-db.sh  # Oder ./deploy-traefik.sh

📊 Monitoring & Debugging

Live-Logs verfolgen:

# 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:

docker-compose -f docker-compose.development.yml ps
docker-compose -f docker-compose.development.yml top

Performance-Monitoring:

# Resource-Verbrauch
docker stats

# Container-Details
docker inspect rezepte-backend-dev

🛠️ Troubleshooting

Container starten nicht:

# 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:

# 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:

# 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:

# 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:

# 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:

# 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!