feat: Hinzufügen von Service-Management-Funktionen zum Installer-Skript für verbesserte Benutzerinteraktion und Log-Anzeige
This commit is contained in:
parent
32ec001b62
commit
dcafa1bc13
227
PYTHON311_SERVICE_UPDATE.md
Normal file
227
PYTHON311_SERVICE_UPDATE.md
Normal file
@ -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
|
||||
```
|
175
myp_installer.sh
175
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user