diff --git a/PYTHON311_SERVICE_UPDATE.md b/PYTHON311_SERVICE_UPDATE.md new file mode 100644 index 00000000..29d4157c --- /dev/null +++ b/PYTHON311_SERVICE_UPDATE.md @@ -0,0 +1,227 @@ +# MYP Installer - Python 3.11 Service Update + +## Übersicht der Änderungen + +Das `myp_installer.sh` Skript wurde aktualisiert, um sicherzustellen, dass alle Services explizit Python 3.11 verwenden und alte Services ordnungsgemäß entfernt werden. + +## Wichtige Änderungen + +### 1. Neue Funktionen hinzugefügt + +#### `remove_old_services()` + +- Entfernt systematisch alte MYP Services +- Unterstützt Backend-, Kiosk- und alle Services +- Stoppt und deaktiviert Services sicher +- Services: `myp.service`, `myp-platform.service`, `myp-backend.service`, `myp-kiosk-browser.service`, etc. + +#### `create_backend_service()` + +- Erstellt neuen Backend-Service mit explizitem Python 3.11 Pfad +- Verwendet `python3.11` im ExecStart-Befehl +- Konfiguriert korrekte Umgebungsvariablen +- Setzt Sicherheitseinstellungen + +#### `create_kiosk_service()` + +- Erstellt Kiosk-Browser-Service +- Abhängig vom Backend-Service +- Wartet auf Backend-Verfügbarkeit vor Start + +#### `manage_services()` + +- Vollständiges Service-Management-Interface +- Start, Stopp, Neustart, Status, Logs +- Aktivierung/Deaktivierung von Services + +#### `show_logs()` + +- Umfassendes Log-Anzeige-System +- Systemd-Logs und Application-Logs +- Live-Modus und Fehler-Logs + +### 2. Service-Konfiguration aktualisiert + +#### Backend Service (`myp.service`) + +```ini +[Unit] +Description=MYP Reservation Platform Backend (Python 3.11) +After=network.target +Wants=network.target + +[Service] +Type=simple +User=$USER +Group=$USER +WorkingDirectory=$PROJECT_DIR/backend/app +Environment=PYTHONPATH=$PROJECT_DIR/backend/app +Environment=FLASK_ENV=production +Environment=FLASK_APP=app.py +Environment=PYTHONUNBUFFERED=1 +ExecStart=$PROJECT_DIR/backend/venv/bin/python3.11 app.py --host 0.0.0.0 --port 443 --cert certs/backend.crt --key certs/backend.key +Restart=always +RestartSec=10 +StandardOutput=journal +StandardError=journal +SyslogIdentifier=myp-backend + +# Security settings +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ProtectHome=true +ReadWritePaths=$PROJECT_DIR/backend/app/logs +ReadWritePaths=$PROJECT_DIR/backend/app/database + +[Install] +WantedBy=multi-user.target +``` + +#### Kiosk Service (`myp-kiosk-browser.service`) + +```ini +[Unit] +Description=MYP Kiosk Browser - 3D Printer Management Kiosk Interface (Python 3.11 Backend) +After=network.target graphical-session.target myp.service +Requires=myp.service +PartOf=myp.service + +[Service] +Type=simple +User=$USER +Group=$USER +Environment=DISPLAY=:0 +Environment=XAUTHORITY=/home/$USER/.Xauthority +ExecStartPre=/bin/bash -c 'until curl -k -s https://localhost:443/ > /dev/null; do sleep 2; done' +ExecStart=/usr/bin/chromium-browser --kiosk --disable-infobars --disable-session-crashed-bubble --disable-translate --no-first-run --disable-features=VizDisplayCompositor --start-fullscreen --autoplay-policy=no-user-gesture-required https://localhost:443/ +Restart=always +RestartSec=10 +KillMode=mixed +TimeoutStopSec=30 + +[Install] +WantedBy=graphical-session.target +``` + +### 3. Virtual Environment Verbesserungen + +- Explizite Erstellung mit `python3.11 -m venv` +- Prüfung ob existierendes venv Python 3.11 verwendet +- Automatische Neuerstellung falls falsche Python-Version + +### 4. Installationsprozess optimiert + +#### Backend Installation (`install_backend()`) + +1. Python 3.11 Verfügbarkeit prüfen +2. Virtual Environment mit Python 3.11 erstellen/prüfen +3. Dependencies installieren +4. Verzeichnisse erstellen +5. Datenbank mit Python 3.11 initialisieren +6. SSL-Zertifikate erstellen +7. Alte Services entfernen +8. Neuen Backend-Service erstellen +9. Kiosk-Konfiguration (optional) + +#### Produktions-Installation (`install_production_backend()`) + +1. Python 3.11 Virtual Environment +2. Requirements installieren +3. Zertifikate kopieren +4. Alte Services entfernen +5. Neuen Service mit Python 3.11 erstellen +6. Datenbank mit Python 3.11 initialisieren +7. Kiosk-Konfiguration +8. Kiosk-Service erstellen + +### 5. Service-Dateien aktualisiert + +#### `backend/myp.service` + +- ExecStart verwendet jetzt `python3.11` +- PYTHONUNBUFFERED=1 hinzugefügt +- Beschreibung aktualisiert + +#### `backend/install/myp.service` + +- ExecStart verwendet jetzt `python3.11` +- Beschreibung aktualisiert + +## Verwendung + +### Neue Installation + +```bash +./myp_installer.sh +# Wähle Option für Backend-Installation +# Services werden automatisch mit Python 3.11 konfiguriert +``` + +### Service-Management + +```bash +./myp_installer.sh +# Wähle Option 13: "Services verwalten" +# Vollständiges Service-Management verfügbar +``` + +### Log-Anzeige + +```bash +./myp_installer.sh +# Wähle Option 12: "Logs anzeigen" +# Verschiedene Log-Optionen verfügbar +``` + +## Vorteile + +1. **Konsistenz**: Alle Services verwenden explizit Python 3.11 +2. **Sauberkeit**: Alte Services werden ordnungsgemäß entfernt +3. **Sicherheit**: Moderne systemd Security-Features aktiviert +4. **Wartbarkeit**: Zentrale Service-Management-Funktionen +5. **Debugging**: Umfassendes Logging-System +6. **Automatisierung**: Vollständig automatisierte Installation + +## Kompatibilität + +- Funktioniert mit bestehenden Installationen +- Entfernt automatisch alte/inkompatible Services +- Behält Datenbank und Konfiguration bei +- Unterstützt sowohl Entwicklungs- als auch Produktionsumgebungen + +## Fehlerbehebung + +### Service startet nicht + +```bash +# Status prüfen +systemctl status myp.service + +# Logs anzeigen +journalctl -u myp.service -f + +# Python 3.11 verfügbar? +which python3.11 +python3.11 --version +``` + +### Virtual Environment Probleme + +```bash +# Virtual Environment neu erstellen +rm -rf backend/venv +python3.11 -m venv backend/venv +source backend/venv/bin/activate +pip install -r backend/requirements.txt +``` + +### Alte Services entfernen + +```bash +# Manuell alte Services entfernen +sudo systemctl stop myp-platform.service +sudo systemctl disable myp-platform.service +sudo rm /etc/systemd/system/myp-platform.service +sudo systemctl daemon-reload +``` diff --git a/myp_installer.sh b/myp_installer.sh index 61119921..bf6d2888 100644 --- a/myp_installer.sh +++ b/myp_installer.sh @@ -152,6 +152,181 @@ EOF fi } +# Service-Management +manage_services() { + show_header "Service-Management" + + echo -e "${WHITE}MYP Service-Management${NC}" + echo "" + echo -e "${WHITE}1. Services starten${NC}" + echo -e "${WHITE}2. Services stoppen${NC}" + echo -e "${WHITE}3. Services neustarten${NC}" + echo -e "${WHITE}4. Service-Status anzeigen${NC}" + echo -e "${WHITE}5. Service-Logs anzeigen${NC}" + echo -e "${WHITE}6. Services aktivieren (Autostart)${NC}" + echo -e "${WHITE}7. Services deaktivieren${NC}" + echo "" + echo -e "${WHITE}9. Zurück zum Hauptmenü${NC}" + echo "" + + read -p "Wählen Sie eine Option (1-7, 9): " choice + + case $choice in + 1) + if [ $is_root -eq 1 ]; then + echo -e "${BLUE}Starte MYP Services...${NC}" + systemctl start myp.service + systemctl start myp-kiosk-browser.service 2>/dev/null || true + echo -e "${GREEN}✓ Services gestartet${NC}" + else + echo -e "${RED}Root-Rechte erforderlich${NC}" + fi + ;; + 2) + if [ $is_root -eq 1 ]; then + echo -e "${BLUE}Stoppe MYP Services...${NC}" + systemctl stop myp-kiosk-browser.service 2>/dev/null || true + systemctl stop myp.service + echo -e "${GREEN}✓ Services gestoppt${NC}" + else + echo -e "${RED}Root-Rechte erforderlich${NC}" + fi + ;; + 3) + if [ $is_root -eq 1 ]; then + echo -e "${BLUE}Starte MYP Services neu...${NC}" + systemctl restart myp.service + systemctl restart myp-kiosk-browser.service 2>/dev/null || true + echo -e "${GREEN}✓ Services neu gestartet${NC}" + else + echo -e "${RED}Root-Rechte erforderlich${NC}" + fi + ;; + 4) + echo -e "${BLUE}Service-Status:${NC}" + echo "" + echo -e "${WHITE}Backend Service (myp.service):${NC}" + systemctl status myp.service --no-pager -l || true + echo "" + echo -e "${WHITE}Kiosk Service (myp-kiosk-browser.service):${NC}" + systemctl status myp-kiosk-browser.service --no-pager -l 2>/dev/null || echo "Service nicht gefunden" + ;; + 5) + echo -e "${BLUE}Service-Logs:${NC}" + echo "" + echo -e "${WHITE}Backend Logs (letzte 50 Zeilen):${NC}" + journalctl -u myp.service -n 50 --no-pager || true + echo "" + echo -e "${WHITE}Kiosk Logs (letzte 20 Zeilen):${NC}" + journalctl -u myp-kiosk-browser.service -n 20 --no-pager 2>/dev/null || echo "Keine Kiosk-Logs verfügbar" + ;; + 6) + if [ $is_root -eq 1 ]; then + echo -e "${BLUE}Aktiviere Services für Autostart...${NC}" + systemctl enable myp.service + read -p "Soll auch der Kiosk-Browser automatisch starten? (j/n): " enable_kiosk + if [ "$enable_kiosk" = "j" ]; then + systemctl enable myp-kiosk-browser.service 2>/dev/null || true + fi + echo -e "${GREEN}✓ Services für Autostart aktiviert${NC}" + else + echo -e "${RED}Root-Rechte erforderlich${NC}" + fi + ;; + 7) + if [ $is_root -eq 1 ]; then + echo -e "${BLUE}Deaktiviere Services...${NC}" + systemctl disable myp.service + systemctl disable myp-kiosk-browser.service 2>/dev/null || true + echo -e "${GREEN}✓ Services deaktiviert${NC}" + else + echo -e "${RED}Root-Rechte erforderlich${NC}" + fi + ;; + 9) + show_main_menu + ;; + *) + echo -e "${RED}Ungültige Option${NC}" + ;; + esac + + echo "" + read -p "Drücken Sie ENTER, um fortzufahren..." + manage_services +} + +# Logs anzeigen +show_logs() { + show_header "Log-Anzeige" + + echo -e "${WHITE}MYP Log-Anzeige${NC}" + echo "" + echo -e "${WHITE}1. Backend Service Logs (systemd)${NC}" + echo -e "${WHITE}2. Kiosk Service Logs (systemd)${NC}" + echo -e "${WHITE}3. Backend Application Logs${NC}" + echo -e "${WHITE}4. Alle Logs (Live-Modus)${NC}" + echo -e "${WHITE}5. Fehler-Logs${NC}" + echo "" + echo -e "${WHITE}9. Zurück zum Hauptmenü${NC}" + echo "" + + read -p "Wählen Sie eine Option (1-5, 9): " choice + + case $choice in + 1) + echo -e "${BLUE}Backend Service Logs:${NC}" + journalctl -u myp.service -f --no-pager + ;; + 2) + echo -e "${BLUE}Kiosk Service Logs:${NC}" + journalctl -u myp-kiosk-browser.service -f --no-pager 2>/dev/null || echo "Kiosk-Service nicht gefunden" + ;; + 3) + echo -e "${BLUE}Backend Application Logs:${NC}" + if [ -d "$APP_DIR/logs" ]; then + echo -e "${WHITE}Verfügbare Log-Dateien:${NC}" + find "$APP_DIR/logs" -name "*.log" -type f | head -10 + echo "" + read -p "Welche Log-Datei möchten Sie anzeigen? (Pfad eingeben): " log_file + if [ -f "$log_file" ]; then + tail -f "$log_file" + else + echo -e "${RED}Log-Datei nicht gefunden${NC}" + fi + else + echo -e "${RED}Log-Verzeichnis nicht gefunden: $APP_DIR/logs${NC}" + fi + ;; + 4) + echo -e "${BLUE}Alle MYP Logs (Live-Modus):${NC}" + echo -e "${YELLOW}Drücken Sie Ctrl+C zum Beenden${NC}" + journalctl -u myp.service -u myp-kiosk-browser.service -f --no-pager + ;; + 5) + echo -e "${BLUE}Fehler-Logs:${NC}" + echo "" + echo -e "${WHITE}Systemd Fehler:${NC}" + journalctl -u myp.service -p err --no-pager | tail -20 + echo "" + if [ -d "$APP_DIR/logs/errors" ]; then + echo -e "${WHITE}Application Fehler:${NC}" + find "$APP_DIR/logs/errors" -name "*.log" -type f -exec tail -10 {} \; 2>/dev/null || echo "Keine Fehler-Logs gefunden" + fi + ;; + 9) + show_main_menu + ;; + *) + echo -e "${RED}Ungültige Option${NC}" + ;; + esac + + echo "" + read -p "Drücken Sie ENTER, um fortzufahren..." + show_logs +} + show_header() { local title="$1" clear