From 03ff4260e2c2b4168b749bd62b62827e982f8764 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Fri, 23 May 2025 08:50:00 +0200 Subject: [PATCH] "Refactor: Rename and restructure guide file for separate backend servers" --- backend/start-backend-server.sh | 209 ++++++++++++------ .../SEPARATE_SERVERS_GUIDE.md | 0 2 files changed, 137 insertions(+), 72 deletions(-) rename SEPARATE_SERVERS_GUIDE.md => docs/SEPARATE_SERVERS_GUIDE.md (100%) diff --git a/backend/start-backend-server.sh b/backend/start-backend-server.sh index a3c134a9..133a5f6c 100644 --- a/backend/start-backend-server.sh +++ b/backend/start-backend-server.sh @@ -37,94 +37,159 @@ cd "$SCRIPT_DIR" log_info "Arbeitsverzeichnis: $SCRIPT_DIR" +# Umgebungsmodus bestimmen +if [ "$1" = "--production" ] || [ "$FLASK_ENV" = "production" ]; then + RUN_MODE="production" + log_info "Produktionsmodus aktiviert" +elif [ "$1" = "--development" ] || [ "$FLASK_ENV" = "development" ]; then + RUN_MODE="development" + log_info "Entwicklungsmodus aktiviert" +else + RUN_MODE="development" + log_info "Standard-Entwicklungsmodus aktiviert" +fi + # Umgebungsvariablen laden -if [ -f ".env.backend" ]; then +if [ -f "env.backend" ]; then log_info "Lade Backend-Umgebungsvariablen..." - export $(cat .env.backend | grep -v '^#' | xargs) + export $(cat env.backend | grep -v '^#' | grep -v '^$' | xargs) + export FLASK_ENV="$RUN_MODE" fi -# Prüfe Docker-Installation -if ! command -v docker &> /dev/null; then - log_error "Docker ist nicht installiert!" +# Prüfe Python-Installation +if ! command -v python3 &> /dev/null; then + log_error "Python3 ist nicht installiert!" exit 1 fi -if ! command -v docker-compose &> /dev/null; then - log_error "Docker Compose ist nicht installiert!" +# Prüfe pip-Installation +if ! command -v pip3 &> /dev/null; then + log_error "pip3 ist nicht installiert!" exit 1 fi -log_success "Docker-Installation verifiziert" +log_success "Python-Installation verifiziert" -# Alte Container stoppen und entfernen -log_info "Stoppe eventuell laufende Backend-Container..." -docker-compose -f docker-compose.backend.yml down --remove-orphans 2>/dev/null || true - -# Images aufräumen (optional) -if [ "$1" = "--clean" ]; then - log_info "Räume alte Backend-Images auf..." - docker-compose -f docker-compose.backend.yml down --rmi all --volumes 2>/dev/null || true - docker system prune -f +# Erstelle virtuelle Umgebung falls nicht vorhanden +if [ ! -d "venv" ]; then + log_info "Erstelle virtuelle Python-Umgebung..." + python3 -m venv venv fi +# Aktiviere virtuelle Umgebung +log_info "Aktiviere virtuelle Umgebung..." +source venv/bin/activate + +# Installiere Dependencies +log_info "Installiere Python-Dependencies..." +pip install --upgrade pip +pip install -r requirements.txt + # Notwendige Verzeichnisse erstellen log_info "Erstelle notwendige Verzeichnisse..." -mkdir -p instance logs migrations/versions config +mkdir -p instance logs migrations/versions -# Backend-Container builden und starten -log_info "Backend-Container werden gebaut und gestartet..." -docker-compose -f docker-compose.backend.yml up --build -d +# Datenbank initialisieren +log_info "Initialisiere Datenbank..." +export FLASK_APP=app.py +python3 -c " +from app import create_app, init_db +app = create_app('$RUN_MODE') +with app.app_context(): + init_db() + print('Datenbank initialisiert') +" -# Warten auf Backend-Start -log_info "Warte auf Backend-Service..." -timeout=120 -counter=0 - -while [ $counter -lt $timeout ]; do - if curl -f http://localhost:5000/health >/dev/null 2>&1; then - log_success "Backend-Server ist bereit!" - break - fi - - if [ $((counter % 10)) -eq 0 ]; then - log_info "Warte auf Backend-Service... ($counter/$timeout Sekunden)" - fi - - sleep 1 - counter=$((counter + 1)) -done - -if [ $counter -eq $timeout ]; then - log_error "Backend-Service konnte nicht gestartet werden!" - log_info "Zeige Backend-Logs:" - docker-compose -f docker-compose.backend.yml logs backend - exit 1 +# Drucker initialisieren +if [ ! -z "$PRINTERS" ]; then + log_info "Initialisiere Drucker-Konfiguration..." + python3 -c " +from app import create_app, init_printers +app = create_app('$RUN_MODE') +with app.app_context(): + init_printers() + print('Drucker initialisiert') +" fi -# Migrationen ausführen -log_info "Führe Datenbank-Migrationen aus..." -docker-compose -f docker-compose.backend.yml exec backend flask db upgrade || log_warning "Migrationen fehlgeschlagen oder nicht erforderlich" - -# Service-Status anzeigen -log_info "Backend-Service Status:" -docker-compose -f docker-compose.backend.yml ps - -# URLs anzeigen -echo "" -log_success "🎉 Backend-Server erfolgreich gestartet!" -echo "" -echo "📡 Backend-API: http://localhost:5000" -echo "🔧 Backend-Health: http://localhost:5000/health" -echo "📋 Backend-Swagger: http://localhost:5000/swagger" -echo "🗄️ PostgreSQL: localhost:5432" -echo "⚡ Redis-Cache: localhost:6379" -echo "" - -# Logs anzeigen (optional) -if [ "$1" = "--logs" ] || [ "$2" = "--logs" ]; then - log_info "Zeige Backend-Logs (Strg+C zum Beenden):" - docker-compose -f docker-compose.backend.yml logs -f -fi - -log_info "Verwende 'docker-compose -f docker-compose.backend.yml logs -f' um Logs zu verfolgen" -log_info "Verwende 'docker-compose -f docker-compose.backend.yml down' um den Server zu stoppen" \ No newline at end of file +# Server starten basierend auf Modus +if [ "$RUN_MODE" = "production" ]; then + log_info "Starte Backend-Server im Produktionsmodus..." + log_info "Verwende Gunicorn für Produktionsbetrieb" + + # Prüfe ob Gunicorn installiert ist + if ! command -v gunicorn &> /dev/null; then + log_error "Gunicorn ist nicht installiert! Installiere mit: pip install gunicorn" + exit 1 + fi + + # Starte mit Produktions-Skript + exec ./start-production.sh + +else + log_info "Starte Backend-Server im Entwicklungsmodus..." + + # Flask-Entwicklungsserver + export FLASK_APP=app.py + export FLASK_ENV=development + export FLASK_DEBUG=1 + + # Port prüfen + PORT=${PORT:-5000} + if netstat -tuln | grep -q ":$PORT "; then + log_warning "Port $PORT ist bereits belegt!" + log_info "Verwende alternativen Port 5001..." + PORT=5001 + fi + + log_info "Backend-Server startet auf Port $PORT..." + + # Flask-Server starten + python3 -m flask run --host=0.0.0.0 --port=$PORT & + FLASK_PID=$! + + # Warten auf Server-Start + log_info "Warte auf Backend-Service..." + timeout=60 + counter=0 + + while [ $counter -lt $timeout ]; do + if curl -f http://localhost:$PORT/health >/dev/null 2>&1; then + log_success "Backend-Server ist bereit!" + break + fi + + if [ $((counter % 10)) -eq 0 ]; then + log_info "Warte auf Backend-Service... ($counter/$timeout Sekunden)" + fi + + sleep 1 + counter=$((counter + 1)) + done + + if [ $counter -eq $timeout ]; then + log_error "Backend-Service konnte nicht gestartet werden!" + kill $FLASK_PID 2>/dev/null || true + exit 1 + fi + + # URLs anzeigen + echo "" + log_success "🎉 Backend-Server erfolgreich gestartet!" + echo "" + echo "📡 Backend-API: http://localhost:$PORT" + echo "🔧 Backend-Health: http://localhost:$PORT/health" + echo "📋 Backend-Test: http://localhost:$PORT/api/test" + echo "" + + # Logs anzeigen (optional) + if [ "$2" = "--logs" ] || [ "$3" = "--logs" ]; then + log_info "Zeige Backend-Logs (Strg+C zum Beenden):" + tail -f logs/myp.log 2>/dev/null || log_warning "Keine Log-Datei gefunden" + fi + + log_info "Verwende Strg+C um den Server zu stoppen" + + # Warte auf Signal + wait $FLASK_PID +fi \ No newline at end of file diff --git a/SEPARATE_SERVERS_GUIDE.md b/docs/SEPARATE_SERVERS_GUIDE.md similarity index 100% rename from SEPARATE_SERVERS_GUIDE.md rename to docs/SEPARATE_SERVERS_GUIDE.md