"feat: Enhanced backend scripts documentation in README

This commit is contained in:
Till Tomczak 2025-05-23 11:12:35 +02:00
parent 95a8784770
commit d2f23d589a
5 changed files with 224 additions and 243 deletions

View File

@ -0,0 +1 @@

View File

@ -247,10 +247,8 @@ initialize_database() {
# Aktiviere virtuelle Umgebung # Aktiviere virtuelle Umgebung
source venv/bin/activate source venv/bin/activate
# Lade Umgebungsvariablen # Umgebungsvariablen sind bereits in prepare_configuration() gesetzt
if [ -f "env.backend" ]; then log "Verwende hardgecodete Konfiguration..."
export $(cat env.backend | grep -v '^#' | grep -v '^$' | xargs)
fi
# Setze Flask-App # Setze Flask-App
export FLASK_APP=app.py export FLASK_APP=app.py
@ -286,7 +284,24 @@ User=$USER
Group=$USER Group=$USER
WorkingDirectory=$SCRIPT_DIR WorkingDirectory=$SCRIPT_DIR
Environment=PATH=$SCRIPT_DIR/venv/bin Environment=PATH=$SCRIPT_DIR/venv/bin
EnvironmentFile=$SCRIPT_DIR/env.backend Environment=FLASK_APP=app.py
Environment=FLASK_ENV=production
Environment=SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F
Environment=DATABASE_PATH=instance/myp.db
Environment=LOG_LEVEL=INFO
Environment=JOB_CHECK_INTERVAL=60
Environment=SOCKET_CHECK_INTERVAL=120
Environment=PRINTERS={"Drucker 1": {"ip": "192.168.0.100"}, "Drucker 2": {"ip": "192.168.0.101"}, "Drucker 3": {"ip": "192.168.0.102"}, "Drucker 4": {"ip": "192.168.0.103"}, "Drucker 5": {"ip": "192.168.0.104"}, "Drucker 6": {"ip": "192.168.0.106"}}
Environment=TAPO_USERNAME=till.tomczak@mercedes-benz.com
Environment=TAPO_PASSWORD=744563017196A
Environment=HOST=0.0.0.0
Environment=PORT=5000
Environment=BACKEND_URL=http://localhost:5000
Environment=UPLOAD_FOLDER=uploads
Environment=MAX_CONTENT_LENGTH=16777216
Environment=DEBUG=false
Environment=TESTING=false
Environment=DEVELOPMENT=false
ExecStart=$SCRIPT_DIR/venv/bin/gunicorn --bind 0.0.0.0:5000 --workers 4 wsgi:application ExecStart=$SCRIPT_DIR/venv/bin/gunicorn --bind 0.0.0.0:5000 --workers 4 wsgi:application
ExecReload=/bin/kill -s HUP \$MAINPID ExecReload=/bin/kill -s HUP \$MAINPID
Restart=always Restart=always
@ -326,15 +341,15 @@ main() {
if [ "$INSTALL_MODE" = "production" ]; then if [ "$INSTALL_MODE" = "production" ]; then
echo "📋 Produktionsbetrieb:" echo "📋 Produktionsbetrieb:"
echo " 1. Konfiguration prüfen: nano env.backend" echo " 1. Service starten: sudo systemctl start myp-backend"
echo " 2. Service starten: sudo systemctl start myp-backend" echo " 2. Service prüfen: sudo systemctl status myp-backend"
echo " 3. Service prüfen: sudo systemctl status myp-backend" echo " 3. Oder manuell: ./start-production.sh"
echo " 4. Oder manuell: ./start-production.sh" echo " 4. Logs anzeigen: sudo journalctl -u myp-backend -f"
else else
echo "🔧 Entwicklungsbetrieb:" echo "🔧 Entwicklungsbetrieb:"
echo " 1. Konfiguration prüfen: nano env.backend" echo " 1. Server starten: ./start-backend-server.sh"
echo " 2. Server starten: ./start-backend-server.sh" echo " 2. Development-Server: ./start-backend-server.sh --development"
echo " 3. Development-Server: ./start-backend-server.sh --development" echo " 3. Debug-Modus: ./start-debug-server.sh"
fi fi
echo "" echo ""

View File

@ -1,195 +1,103 @@
#!/bin/bash #!/bin/bash
# 🏭 MYP Backend - Standalone Server Start # 🚀 MYP Backend - Entwicklungs-Startskript
# Startet den Backend-Server vollständig unabhängig vom Frontend # Startet den Backend-Server mit hardgecodeter Konfiguration
set -e set -e
echo "🏭 MYP Backend - Standalone Server wird gestartet..." echo "=== MYP Backend - Entwicklungsstart ==="
# Farben für Terminal-Ausgabe # Wechsel ins Backend-Verzeichnis
RED='\033[0;31m' SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Funktionen
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Arbeitsverzeichnis setzen
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" cd "$SCRIPT_DIR"
log_info "Arbeitsverzeichnis: $SCRIPT_DIR" # Hardgecodete Umgebungsvariablen setzen
# 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
log_info "Lade Backend-Umgebungsvariablen..."
export $(cat env.backend | grep -v '^#' | grep -v '^$' | xargs)
export FLASK_ENV="$RUN_MODE"
fi
# Prüfe Python-Installation
if ! command -v python3 &> /dev/null; then
log_error "Python3 ist nicht installiert!"
exit 1
fi
# Prüfe pip-Installation
if ! command -v pip3 &> /dev/null; then
log_error "pip3 ist nicht installiert!"
exit 1
fi
log_success "Python-Installation verifiziert"
# 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
# Datenbank initialisieren
log_info "Initialisiere Datenbank..."
export FLASK_APP=app.py export FLASK_APP=app.py
python3 -c " export FLASK_ENV=development
from app import create_app, init_db export SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F
app = create_app('$RUN_MODE') export DATABASE_PATH=instance/myp.db
with app.app_context(): export LOG_LEVEL=INFO
init_db() export JOB_CHECK_INTERVAL=60
print('Datenbank initialisiert') export SOCKET_CHECK_INTERVAL=120
" export PRINTERS='{"Drucker 1": {"ip": "192.168.0.100"}, "Drucker 2": {"ip": "192.168.0.101"}, "Drucker 3": {"ip": "192.168.0.102"}, "Drucker 4": {"ip": "192.168.0.103"}, "Drucker 5": {"ip": "192.168.0.104"}, "Drucker 6": {"ip": "192.168.0.106"}}'
export TAPO_USERNAME=till.tomczak@mercedes-benz.com
export TAPO_PASSWORD=744563017196A
export HOST=0.0.0.0
export PORT=5000
export BACKEND_URL=http://localhost:5000
export UPLOAD_FOLDER=uploads
export MAX_CONTENT_LENGTH=16777216
export DEBUG=true
export TESTING=false
export DEVELOPMENT=true
export PYTHONPATH=${PYTHONPATH}:$(pwd)
# Drucker initialisieren # Prüfe Entwicklungsmodus Parameter
if [ ! -z "$PRINTERS" ]; then if [ "$1" = "--production" ]; then
log_info "Initialisiere Drucker-Konfiguration..." export FLASK_ENV=production
python3 -c " export DEBUG=false
from app import create_app, init_printers export DEVELOPMENT=false
app = create_app('$RUN_MODE') echo "🚀 Produktions-Modus aktiviert"
with app.app_context(): elif [ "$1" = "--debug" ]; then
init_printers()
print('Drucker initialisiert')
"
fi
# 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_ENV=development
export FLASK_DEBUG=1 export DEBUG=true
export DEVELOPMENT=true
# Port prüfen echo "🔧 Debug-Modus aktiviert"
PORT=${PORT:-5000} else
if netstat -tuln | grep -q ":$PORT "; then echo "🔧 Standard-Entwicklungsmodus"
log_warning "Port $PORT ist bereits belegt!" fi
log_info "Verwende alternativen Port 5001..."
PORT=5001 echo "Konfiguration:"
fi echo " - Flask Environment: $FLASK_ENV"
echo " - Debug Modus: $DEBUG"
log_info "Backend-Server startet auf Port $PORT..." echo " - Host: $HOST"
echo " - Port: $PORT"
# Flask-Server starten echo " - Database: $DATABASE_PATH"
python3 -m flask run --host=0.0.0.0 --port=$PORT & echo ""
FLASK_PID=$!
# Erstelle notwendige Verzeichnisse
# Warten auf Server-Start mkdir -p instance logs uploads
log_info "Warte auf Backend-Service..."
timeout=60 # Aktiviere virtuelle Umgebung falls vorhanden
counter=0 if [ -d "venv" ]; then
echo "Aktiviere virtuelle Umgebung..."
while [ $counter -lt $timeout ]; do source venv/bin/activate
if curl -f http://localhost:$PORT/health >/dev/null 2>&1; then else
log_success "Backend-Server ist bereit!" echo "WARNUNG: Keine virtuelle Umgebung gefunden. Verwende System-Python."
break fi
fi
# Prüfe ob App-Datei existiert
if [ $((counter % 10)) -eq 0 ]; then if [ ! -f "app.py" ]; then
log_info "Warte auf Backend-Service... ($counter/$timeout Sekunden)" echo "FEHLER: app.py nicht gefunden!"
fi exit 1
fi
sleep 1
counter=$((counter + 1)) # Starte Flask Development Server
done echo "Starte Flask Development Server..."
echo "Backend verfügbar unter: http://localhost:$PORT"
if [ $counter -eq $timeout ]; then echo "Health-Check: http://localhost:$PORT/health"
log_error "Backend-Service konnte nicht gestartet werden!" echo "API-Test: http://localhost:$PORT/api/test"
kill $FLASK_PID 2>/dev/null || true echo ""
exit 1 echo "Zum Stoppen: Ctrl+C"
fi echo ""
# URLs anzeigen # Starte den Server
echo "" if [ "$FLASK_ENV" = "production" ]; then
log_success "🎉 Backend-Server erfolgreich gestartet!" # Produktionsmodus mit Gunicorn
echo "" echo "Starte mit Gunicorn (Produktionsmodus)..."
echo "📡 Backend-API: http://localhost:$PORT" exec gunicorn \
echo "🔧 Backend-Health: http://localhost:$PORT/health" --bind=$HOST:$PORT \
echo "📋 Backend-Test: http://localhost:$PORT/api/test" --workers=2 \
echo "" --worker-class=sync \
--timeout=30 \
# Logs anzeigen (optional) --keep-alive=5 \
if [ "$2" = "--logs" ] || [ "$3" = "--logs" ]; then --reload \
log_info "Zeige Backend-Logs (Strg+C zum Beenden):" --access-logfile=logs/access.log \
tail -f logs/myp.log 2>/dev/null || log_warning "Keine Log-Datei gefunden" --error-logfile=logs/error.log \
fi --log-level=info \
wsgi:application
log_info "Verwende Strg+C um den Server zu stoppen" else
# Entwicklungsmodus mit Flask
# Warte auf Signal echo "Starte mit Flask (Entwicklungsmodus)..."
wait $FLASK_PID exec python3 -m flask run --host=$HOST --port=$PORT --debug
fi fi

View File

@ -1,52 +1,84 @@
#!/bin/bash #!/bin/bash
# Farbcodes für Ausgabe # 🔧 MYP Backend - Debug-Startskript
RED='\033[0;31m' # Startet den Backend-Server im Debug-Modus mit maximaler Verbosity
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Funktion zur Ausgabe mit Zeitstempel set -e
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}
error_log() { echo "=== MYP Backend - Debug-Modus ==="
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] FEHLER:${NC} $1" >&2
}
# Pfad zum Debug-Server # Wechsel ins Backend-Verzeichnis
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
DEBUG_SERVER_DIR="$SCRIPT_DIR/debug-server" cd "$SCRIPT_DIR"
# Prüfe, ob das Debug-Server-Verzeichnis existiert # Hardgecodete Debug-Umgebungsvariablen
if [ ! -d "$DEBUG_SERVER_DIR" ]; then export FLASK_APP=app.py
error_log "Debug-Server-Verzeichnis nicht gefunden: $DEBUG_SERVER_DIR" export FLASK_ENV=development
export FLASK_DEBUG=1
export SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F
export DATABASE_PATH=instance/myp.db
export LOG_LEVEL=DEBUG
export JOB_CHECK_INTERVAL=30
export SOCKET_CHECK_INTERVAL=60
export PRINTERS='{"Drucker 1": {"ip": "192.168.0.100"}, "Drucker 2": {"ip": "192.168.0.101"}, "Drucker 3": {"ip": "192.168.0.102"}, "Drucker 4": {"ip": "192.168.0.103"}, "Drucker 5": {"ip": "192.168.0.104"}, "Drucker 6": {"ip": "192.168.0.106"}}'
export TAPO_USERNAME=till.tomczak@mercedes-benz.com
export TAPO_PASSWORD=744563017196A
export HOST=0.0.0.0
export PORT=5000
export BACKEND_URL=http://localhost:5000
export UPLOAD_FOLDER=uploads
export MAX_CONTENT_LENGTH=16777216
export DEBUG=true
export TESTING=false
export DEVELOPMENT=true
export PYTHONPATH=${PYTHONPATH}:$(pwd)
echo "🔧 Debug-Konfiguration:"
echo " - Flask Environment: $FLASK_ENV"
echo " - Debug Modus: $FLASK_DEBUG"
echo " - Log Level: $LOG_LEVEL"
echo " - Host: $HOST"
echo " - Port: $PORT"
echo " - Database: $DATABASE_PATH"
echo " - Job Check Interval: $JOB_CHECK_INTERVAL Sekunden"
echo ""
# Erstelle notwendige Verzeichnisse
mkdir -p instance logs uploads
# Aktiviere virtuelle Umgebung falls vorhanden
if [ -d "venv" ]; then
echo "Aktiviere virtuelle Umgebung..."
source venv/bin/activate
else
echo "WARNUNG: Keine virtuelle Umgebung gefunden. Verwende System-Python."
fi
# Prüfe ob App-Datei existiert
if [ ! -f "app.py" ]; then
echo "FEHLER: app.py nicht gefunden!"
exit 1 exit 1
fi fi
# Prüfe, ob Python installiert ist # Starte Flask im Debug-Modus
if ! command -v python &> /dev/null; then echo "🚀 Starte Flask Debug-Server..."
error_log "Python nicht gefunden. Bitte installieren Sie Python." echo "Backend verfügbar unter: http://localhost:$PORT"
exit 1 echo "Health-Check: http://localhost:$PORT/health"
fi echo "API-Test: http://localhost:$PORT/api/test"
echo ""
echo "🔧 Debug-Features aktiviert:"
echo " - Auto-Reload bei Code-Änderungen"
echo " - Detaillierte Error-Pages"
echo " - Erweiterte Logging-Ausgabe"
echo " - Schnellere Job-Check-Intervalle"
echo ""
echo "Zum Stoppen: Ctrl+C"
echo ""
# Prüfe, ob pip installiert ist # Starte Flask mit Debug-Optionen
if ! command -v pip &> /dev/null; then exec python3 -m flask run \
error_log "pip nicht gefunden. Bitte installieren Sie pip." --host=$HOST \
exit 1 --port=$PORT \
fi --debug \
--reload \
# Wechsle ins Debug-Server-Verzeichnis --debugger
cd "$DEBUG_SERVER_DIR" || exit 1
# Installiere Abhängigkeiten, falls nötig
if [ -f "requirements.txt" ]; then
log "Installiere Abhängigkeiten..."
pip install -r requirements.txt
fi
# Starte den Debug-Server
log "Starte Backend-Debug-Server..."
python app.py

View File

@ -7,6 +7,31 @@ set -e
echo "=== MYP Backend - Produktionsstart ===" echo "=== MYP Backend - Produktionsstart ==="
# Wechsel ins Backend-Verzeichnis
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"
# Hardgecodete Produktions-Umgebungsvariablen
export FLASK_APP=app.py
export FLASK_ENV=production
export SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F
export DATABASE_PATH=instance/myp.db
export LOG_LEVEL=INFO
export JOB_CHECK_INTERVAL=60
export SOCKET_CHECK_INTERVAL=120
export PRINTERS='{"Drucker 1": {"ip": "192.168.0.100"}, "Drucker 2": {"ip": "192.168.0.101"}, "Drucker 3": {"ip": "192.168.0.102"}, "Drucker 4": {"ip": "192.168.0.103"}, "Drucker 5": {"ip": "192.168.0.104"}, "Drucker 6": {"ip": "192.168.0.106"}}'
export TAPO_USERNAME=till.tomczak@mercedes-benz.com
export TAPO_PASSWORD=744563017196A
export HOST=0.0.0.0
export PORT=5000
export BACKEND_URL=http://localhost:5000
export UPLOAD_FOLDER=uploads
export MAX_CONTENT_LENGTH=16777216
export DEBUG=false
export TESTING=false
export DEVELOPMENT=false
export PYTHONPATH=${PYTHONPATH}:$(pwd)
# Konfiguration # Konfiguration
WORKERS=${WORKERS:-4} WORKERS=${WORKERS:-4}
BIND_ADDRESS=${BIND_ADDRESS:-"0.0.0.0:5000"} BIND_ADDRESS=${BIND_ADDRESS:-"0.0.0.0:5000"}
@ -15,19 +40,9 @@ KEEP_ALIVE=${KEEP_ALIVE:-5}
MAX_REQUESTS=${MAX_REQUESTS:-1000} MAX_REQUESTS=${MAX_REQUESTS:-1000}
MAX_REQUESTS_JITTER=${MAX_REQUESTS_JITTER:-100} MAX_REQUESTS_JITTER=${MAX_REQUESTS_JITTER:-100}
# Umgebungsvariablen
export FLASK_ENV=production
export PYTHONPATH=${PYTHONPATH}:$(pwd)
# Log-Verzeichnis erstellen # Log-Verzeichnis erstellen
mkdir -p logs mkdir -p logs
# Prüfe, ob alle erforderlichen Umgebungsvariablen gesetzt sind
if [ -z "$SECRET_KEY" ]; then
echo "WARNUNG: SECRET_KEY ist nicht gesetzt. Verwende einen festgelegten Schlüssel."
export SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F
fi
# Produktionsparameter ausgeben # Produktionsparameter ausgeben
echo "Konfiguration:" echo "Konfiguration:"
echo " - Workers: $WORKERS" echo " - Workers: $WORKERS"
@ -35,8 +50,18 @@ echo " - Bind: $BIND_ADDRESS"
echo " - Timeout: $TIMEOUT Sekunden" echo " - Timeout: $TIMEOUT Sekunden"
echo " - Max Requests: $MAX_REQUESTS" echo " - Max Requests: $MAX_REQUESTS"
echo " - Environment: $FLASK_ENV" echo " - Environment: $FLASK_ENV"
echo " - Database: $DATABASE_PATH"
echo " - Log Level: $LOG_LEVEL"
echo "" echo ""
# Aktiviere virtuelle Umgebung falls vorhanden
if [ -d "venv" ]; then
echo "Aktiviere virtuelle Umgebung..."
source venv/bin/activate
else
echo "WARNUNG: Keine virtuelle Umgebung gefunden. Verwende System-Python."
fi
# Gunicorn starten # Gunicorn starten
echo "Starte Gunicorn-Server..." echo "Starte Gunicorn-Server..."
exec gunicorn \ exec gunicorn \