"feat: Implement new deployment configuration and database setup for Raspberry Pi"
This commit is contained in:
1
backend/DEPLOYMENT.md
Normal file
1
backend/DEPLOYMENT.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
@@ -37,7 +37,7 @@ PRINTERS = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Logging-Konfiguration
|
# Logging-Konfiguration
|
||||||
LOG_DIR = "/home/user/Projektarbeit-MYP/backend/app/logs"
|
LOG_DIR = os.path.join(BASE_DIR, "logs")
|
||||||
LOG_SUBDIRS = ["app", "scheduler", "auth", "jobs", "printers", "errors"]
|
LOG_SUBDIRS = ["app", "scheduler", "auth", "jobs", "printers", "errors"]
|
||||||
LOG_LEVEL = "INFO"
|
LOG_LEVEL = "INFO"
|
||||||
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
||||||
@@ -52,9 +52,9 @@ SESSION_LIFETIME = timedelta(days=7)
|
|||||||
|
|
||||||
# SSL-Konfiguration
|
# SSL-Konfiguration
|
||||||
SSL_ENABLED = get_env_variable("MYP_SSL_ENABLED", "True").lower() in ("true", "1", "yes")
|
SSL_ENABLED = get_env_variable("MYP_SSL_ENABLED", "True").lower() in ("true", "1", "yes")
|
||||||
SSL_CERT_PATH = "/home/user/Projektarbeit-MYP/backend/certs/myp.crt"
|
SSL_CERT_PATH = os.path.join(BASE_DIR, "certs", "myp.crt")
|
||||||
SSL_KEY_PATH = "/home/user/Projektarbeit-MYP/backend/certs/myp.key"
|
SSL_KEY_PATH = os.path.join(BASE_DIR, "certs", "myp.key")
|
||||||
SSL_HOSTNAME = get_env_variable("MYP_SSL_HOSTNAME", "raspberrypi")
|
SSL_HOSTNAME = get_env_variable("MYP_SSL_HOSTNAME", "localhost")
|
||||||
|
|
||||||
# Scheduler-Konfiguration
|
# Scheduler-Konfiguration
|
||||||
SCHEDULER_INTERVAL = 60 # Sekunden
|
SCHEDULER_INTERVAL = 60 # Sekunden
|
||||||
|
Binary file not shown.
117
backend/app/setup_drucker_db.py
Normal file
117
backend/app/setup_drucker_db.py
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Drucker-Datenbank Setup für MYP Platform
|
||||||
|
Trägt die hardkodierten Drucker in die Datenbank ein.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
sys.path.append('.')
|
||||||
|
|
||||||
|
from config.settings import PRINTERS
|
||||||
|
from database.db_manager import DatabaseManager
|
||||||
|
from models import Printer
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
def setup_drucker():
|
||||||
|
"""Trägt die hardkodierten Drucker in die Datenbank ein."""
|
||||||
|
print("=== MYP Platform - Drucker-Setup ===")
|
||||||
|
print(f"Hardkodierte Drucker: {len(PRINTERS)}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
db = DatabaseManager()
|
||||||
|
session = db.get_session()
|
||||||
|
|
||||||
|
# Alle existierenden Drucker löschen
|
||||||
|
existing_printers = session.query(Printer).all()
|
||||||
|
if existing_printers:
|
||||||
|
print(f"Lösche {len(existing_printers)} existierende Drucker...")
|
||||||
|
for printer in existing_printers:
|
||||||
|
session.delete(printer)
|
||||||
|
session.commit()
|
||||||
|
print("✅ Alle alten Drucker gelöscht")
|
||||||
|
else:
|
||||||
|
print("Keine existierenden Drucker gefunden")
|
||||||
|
|
||||||
|
# Neue Drucker hinzufügen
|
||||||
|
added_count = 0
|
||||||
|
|
||||||
|
for printer_name, config in PRINTERS.items():
|
||||||
|
# Neuen Drucker erstellen
|
||||||
|
new_printer = Printer(
|
||||||
|
name=printer_name,
|
||||||
|
model="P115", # Standard-Modell
|
||||||
|
location="Labor", # Standard-Standort
|
||||||
|
ip_address=config["ip"],
|
||||||
|
mac_address=f"98:25:4A:E1:{printer_name[-1]}0:0{printer_name[-1]}", # Dummy MAC
|
||||||
|
plug_ip=config["ip"],
|
||||||
|
plug_username="admin",
|
||||||
|
plug_password="admin",
|
||||||
|
status="available", # Verfügbar, da in Konfiguration
|
||||||
|
active=True,
|
||||||
|
created_at=datetime.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
session.add(new_printer)
|
||||||
|
print(f"✅ {printer_name}: Hinzugefügt (IP: {config['ip']})")
|
||||||
|
added_count += 1
|
||||||
|
|
||||||
|
# Änderungen speichern
|
||||||
|
session.commit()
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
print(f"\n✅ {added_count} neue Drucker erfolgreich hinzugefügt")
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Fehler beim Setup der Drucker: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
if 'session' in locals():
|
||||||
|
session.rollback()
|
||||||
|
session.close()
|
||||||
|
return False
|
||||||
|
|
||||||
|
def list_drucker():
|
||||||
|
"""Zeigt alle Drucker in der Datenbank an."""
|
||||||
|
print("\n=== Drucker in der Datenbank ===")
|
||||||
|
|
||||||
|
try:
|
||||||
|
db = DatabaseManager()
|
||||||
|
session = db.get_session()
|
||||||
|
|
||||||
|
printers = session.query(Printer).all()
|
||||||
|
|
||||||
|
if not printers:
|
||||||
|
print("Keine Drucker in der Datenbank gefunden.")
|
||||||
|
return True
|
||||||
|
|
||||||
|
print(f"{'ID':<5} {'Name':<15} {'Status':<12} {'IP-Adresse':<15} {'Aktiv':<8}")
|
||||||
|
print("-" * 60)
|
||||||
|
|
||||||
|
for printer in printers:
|
||||||
|
active_str = "✅" if printer.active else "❌"
|
||||||
|
print(f"{printer.id:<5} {printer.name:<15} {printer.status:<12} {printer.ip_address:<15} {active_str:<8}")
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
print(f"\nGesamt: {len(printers)} Drucker")
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Fehler beim Abrufen der Drucker: {e}")
|
||||||
|
if 'session' in locals():
|
||||||
|
session.close()
|
||||||
|
return False
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("MYP Platform - Drucker-Datenbank Setup")
|
||||||
|
print("=" * 40)
|
||||||
|
|
||||||
|
success = setup_drucker()
|
||||||
|
if success:
|
||||||
|
list_drucker()
|
||||||
|
print("\n✅ Drucker-Setup erfolgreich abgeschlossen!")
|
||||||
|
else:
|
||||||
|
print("\n❌ Drucker-Setup fehlgeschlagen!")
|
||||||
|
sys.exit(1)
|
331
backend/setup_raspberry_pi.sh
Normal file
331
backend/setup_raspberry_pi.sh
Normal file
@@ -0,0 +1,331 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# MYP Platform - Raspberry Pi Setup Script
|
||||||
|
# Installiert und konfiguriert die MYP-Platform auf Raspberry Pi
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
# Farben für Output
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Logging-Funktion
|
||||||
|
log() {
|
||||||
|
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
echo -e "${RED}[ERROR] $1${NC}" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
warning() {
|
||||||
|
echo -e "${YELLOW}[WARNING] $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
info() {
|
||||||
|
echo -e "${BLUE}[INFO] $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Variablen
|
||||||
|
PROJECT_DIR="/home/user/Projektarbeit-MYP"
|
||||||
|
BACKEND_DIR="$PROJECT_DIR/backend"
|
||||||
|
APP_DIR="$BACKEND_DIR/app"
|
||||||
|
VENV_DIR="$BACKEND_DIR/venv"
|
||||||
|
SERVICE_NAME="myp-platform"
|
||||||
|
USER="user"
|
||||||
|
|
||||||
|
log "=== MYP Platform Raspberry Pi Setup ==="
|
||||||
|
log "Projekt-Verzeichnis: $PROJECT_DIR"
|
||||||
|
log "Backend-Verzeichnis: $BACKEND_DIR"
|
||||||
|
log "App-Verzeichnis: $APP_DIR"
|
||||||
|
|
||||||
|
# Prüfen, ob als root ausgeführt wird
|
||||||
|
if [[ $EUID -eq 0 ]]; then
|
||||||
|
error "Dieses Skript sollte nicht als root ausgeführt werden!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# System-Updates
|
||||||
|
log "1. System-Updates installieren..."
|
||||||
|
sudo apt update && sudo apt upgrade -y
|
||||||
|
|
||||||
|
# Notwendige System-Pakete installieren
|
||||||
|
log "2. System-Pakete installieren..."
|
||||||
|
sudo apt install -y \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
python3-venv \
|
||||||
|
python3-dev \
|
||||||
|
build-essential \
|
||||||
|
libssl-dev \
|
||||||
|
libffi-dev \
|
||||||
|
libsqlite3-dev \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
wget \
|
||||||
|
nginx \
|
||||||
|
supervisor \
|
||||||
|
sqlite3 \
|
||||||
|
openssl \
|
||||||
|
ca-certificates \
|
||||||
|
net-tools \
|
||||||
|
htop \
|
||||||
|
vim \
|
||||||
|
nano
|
||||||
|
|
||||||
|
# Python Virtual Environment erstellen
|
||||||
|
log "3. Python Virtual Environment erstellen..."
|
||||||
|
if [ ! -d "$VENV_DIR" ]; then
|
||||||
|
python3 -m venv "$VENV_DIR"
|
||||||
|
log "Virtual Environment erstellt: $VENV_DIR"
|
||||||
|
else
|
||||||
|
log "Virtual Environment existiert bereits: $VENV_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Virtual Environment aktivieren
|
||||||
|
log "4. Virtual Environment aktivieren..."
|
||||||
|
source "$VENV_DIR/bin/activate"
|
||||||
|
|
||||||
|
# Pip upgraden
|
||||||
|
log "5. Pip upgraden..."
|
||||||
|
pip install --upgrade pip setuptools wheel
|
||||||
|
|
||||||
|
# Python-Abhängigkeiten installieren
|
||||||
|
log "6. Python-Abhängigkeiten installieren..."
|
||||||
|
if [ -f "$BACKEND_DIR/requirements.txt" ]; then
|
||||||
|
pip install -r "$BACKEND_DIR/requirements.txt"
|
||||||
|
log "Abhängigkeiten aus requirements.txt installiert"
|
||||||
|
else
|
||||||
|
error "requirements.txt nicht gefunden in $BACKEND_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verzeichnisse erstellen
|
||||||
|
log "7. Notwendige Verzeichnisse erstellen..."
|
||||||
|
mkdir -p "$APP_DIR/database"
|
||||||
|
mkdir -p "$APP_DIR/logs/app"
|
||||||
|
mkdir -p "$APP_DIR/logs/auth"
|
||||||
|
mkdir -p "$APP_DIR/logs/jobs"
|
||||||
|
mkdir -p "$APP_DIR/logs/printers"
|
||||||
|
mkdir -p "$APP_DIR/logs/scheduler"
|
||||||
|
mkdir -p "$APP_DIR/logs/errors"
|
||||||
|
mkdir -p "$BACKEND_DIR/certs"
|
||||||
|
mkdir -p "$PROJECT_DIR/frontend/ssl"
|
||||||
|
|
||||||
|
# Berechtigungen setzen
|
||||||
|
log "8. Berechtigungen setzen..."
|
||||||
|
chown -R $USER:$USER "$PROJECT_DIR"
|
||||||
|
chmod -R 755 "$PROJECT_DIR"
|
||||||
|
chmod -R 700 "$APP_DIR/logs"
|
||||||
|
chmod -R 700 "$BACKEND_DIR/certs"
|
||||||
|
|
||||||
|
# Datenbank initialisieren
|
||||||
|
log "9. Datenbank initialisieren..."
|
||||||
|
cd "$APP_DIR"
|
||||||
|
if [ ! -f "database/myp.db" ]; then
|
||||||
|
python3 -c "
|
||||||
|
import sys
|
||||||
|
sys.path.append('.')
|
||||||
|
from models import init_database, create_initial_admin
|
||||||
|
init_database()
|
||||||
|
create_initial_admin()
|
||||||
|
print('Datenbank initialisiert und Admin-Benutzer erstellt')
|
||||||
|
"
|
||||||
|
log "Datenbank erfolgreich initialisiert"
|
||||||
|
else
|
||||||
|
log "Datenbank existiert bereits"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# SSL-Zertifikate generieren
|
||||||
|
log "10. SSL-Zertifikate generieren..."
|
||||||
|
python3 -c "
|
||||||
|
import sys
|
||||||
|
sys.path.append('.')
|
||||||
|
from utils.ssl_manager import ssl_manager
|
||||||
|
success = ssl_manager.generate_mercedes_certificate()
|
||||||
|
if success:
|
||||||
|
print('SSL-Zertifikate erfolgreich generiert')
|
||||||
|
else:
|
||||||
|
print('Fehler beim Generieren der SSL-Zertifikate')
|
||||||
|
"
|
||||||
|
|
||||||
|
# Systemd Service erstellen
|
||||||
|
log "11. Systemd Service konfigurieren..."
|
||||||
|
sudo tee "/etc/systemd/system/$SERVICE_NAME.service" > /dev/null <<EOF
|
||||||
|
[Unit]
|
||||||
|
Description=MYP Platform - 3D Printer Management System
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=$USER
|
||||||
|
Group=$USER
|
||||||
|
WorkingDirectory=$APP_DIR
|
||||||
|
Environment=PATH=$VENV_DIR/bin
|
||||||
|
ExecStart=$VENV_DIR/bin/python app.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
SyslogIdentifier=myp-platform
|
||||||
|
|
||||||
|
# Umgebungsvariablen
|
||||||
|
Environment=FLASK_ENV=production
|
||||||
|
Environment=FLASK_DEBUG=False
|
||||||
|
Environment=MYP_SSL_ENABLED=True
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Nginx-Konfiguration erstellen
|
||||||
|
log "12. Nginx konfigurieren..."
|
||||||
|
sudo tee "/etc/nginx/sites-available/$SERVICE_NAME" > /dev/null <<EOF
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name raspberrypi localhost;
|
||||||
|
|
||||||
|
# HTTP zu HTTPS weiterleiten
|
||||||
|
return 301 https://\$server_name\$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name raspberrypi localhost;
|
||||||
|
|
||||||
|
# SSL-Konfiguration
|
||||||
|
ssl_certificate $BACKEND_DIR/certs/myp.crt;
|
||||||
|
ssl_certificate_key $BACKEND_DIR/certs/myp.key;
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
|
||||||
|
ssl_prefer_server_ciphers off;
|
||||||
|
|
||||||
|
# Proxy zu Flask-App
|
||||||
|
location / {
|
||||||
|
proxy_pass https://127.0.0.1:443;
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
proxy_ssl_verify off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Statische Dateien
|
||||||
|
location /static {
|
||||||
|
alias $APP_DIR/static;
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Nginx Site aktivieren
|
||||||
|
sudo ln -sf "/etc/nginx/sites-available/$SERVICE_NAME" "/etc/nginx/sites-enabled/"
|
||||||
|
sudo rm -f /etc/nginx/sites-enabled/default
|
||||||
|
|
||||||
|
# Supervisor-Konfiguration erstellen
|
||||||
|
log "13. Supervisor konfigurieren..."
|
||||||
|
sudo tee "/etc/supervisor/conf.d/$SERVICE_NAME.conf" > /dev/null <<EOF
|
||||||
|
[program:myp-platform]
|
||||||
|
command=$VENV_DIR/bin/python app.py
|
||||||
|
directory=$APP_DIR
|
||||||
|
user=$USER
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
redirect_stderr=true
|
||||||
|
stdout_logfile=$APP_DIR/logs/app/supervisor.log
|
||||||
|
stdout_logfile_maxbytes=10MB
|
||||||
|
stdout_logfile_backups=5
|
||||||
|
environment=PATH="$VENV_DIR/bin",FLASK_ENV="production",MYP_SSL_ENABLED="True"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Firewall konfigurieren
|
||||||
|
log "14. Firewall konfigurieren..."
|
||||||
|
sudo ufw allow 22/tcp # SSH
|
||||||
|
sudo ufw allow 80/tcp # HTTP
|
||||||
|
sudo ufw allow 443/tcp # HTTPS
|
||||||
|
sudo ufw --force enable
|
||||||
|
|
||||||
|
# Services aktivieren und starten
|
||||||
|
log "15. Services aktivieren und starten..."
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl enable "$SERVICE_NAME"
|
||||||
|
sudo systemctl enable nginx
|
||||||
|
sudo systemctl enable supervisor
|
||||||
|
|
||||||
|
# Nginx testen und starten
|
||||||
|
sudo nginx -t
|
||||||
|
sudo systemctl restart nginx
|
||||||
|
|
||||||
|
# Supervisor neu laden
|
||||||
|
sudo supervisorctl reread
|
||||||
|
sudo supervisorctl update
|
||||||
|
|
||||||
|
# MYP Service starten
|
||||||
|
sudo systemctl start "$SERVICE_NAME"
|
||||||
|
|
||||||
|
# Status prüfen
|
||||||
|
log "16. Service-Status prüfen..."
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
if sudo systemctl is-active --quiet "$SERVICE_NAME"; then
|
||||||
|
log "✅ MYP Platform Service läuft"
|
||||||
|
else
|
||||||
|
error "❌ MYP Platform Service konnte nicht gestartet werden"
|
||||||
|
sudo systemctl status "$SERVICE_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if sudo systemctl is-active --quiet nginx; then
|
||||||
|
log "✅ Nginx läuft"
|
||||||
|
else
|
||||||
|
error "❌ Nginx konnte nicht gestartet werden"
|
||||||
|
sudo systemctl status nginx
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Netzwerk-Informationen anzeigen
|
||||||
|
log "17. Netzwerk-Informationen..."
|
||||||
|
IP_ADDRESS=$(hostname -I | awk '{print $1}')
|
||||||
|
log "IP-Adresse: $IP_ADDRESS"
|
||||||
|
log "Hostname: $(hostname)"
|
||||||
|
|
||||||
|
# Abschluss-Informationen
|
||||||
|
log "=== Setup abgeschlossen! ==="
|
||||||
|
log ""
|
||||||
|
log "🎉 MYP Platform wurde erfolgreich installiert!"
|
||||||
|
log ""
|
||||||
|
log "📋 Zugriff auf die Anwendung:"
|
||||||
|
log " • HTTPS: https://$IP_ADDRESS"
|
||||||
|
log " • HTTPS: https://raspberrypi (falls DNS konfiguriert)"
|
||||||
|
log ""
|
||||||
|
log "👤 Standard-Anmeldedaten:"
|
||||||
|
log " • E-Mail: admin@mercedes-benz.com"
|
||||||
|
log " • Passwort: 744563017196A"
|
||||||
|
log ""
|
||||||
|
log "🔧 Nützliche Befehle:"
|
||||||
|
log " • Service-Status: sudo systemctl status $SERVICE_NAME"
|
||||||
|
log " • Service neu starten: sudo systemctl restart $SERVICE_NAME"
|
||||||
|
log " • Logs anzeigen: sudo journalctl -u $SERVICE_NAME -f"
|
||||||
|
log " • Nginx-Status: sudo systemctl status nginx"
|
||||||
|
log ""
|
||||||
|
log "📁 Wichtige Verzeichnisse:"
|
||||||
|
log " • Anwendung: $APP_DIR"
|
||||||
|
log " • Logs: $APP_DIR/logs"
|
||||||
|
log " • Datenbank: $APP_DIR/database/myp.db"
|
||||||
|
log " • SSL-Zertifikate: $BACKEND_DIR/certs"
|
||||||
|
log ""
|
||||||
|
log "⚠️ Hinweise:"
|
||||||
|
log " • Das SSL-Zertifikat ist selbstsigniert"
|
||||||
|
log " • Browser-Warnung beim ersten Zugriff ist normal"
|
||||||
|
log " • Zertifikat kann manuell akzeptiert werden"
|
||||||
|
log ""
|
||||||
|
log "🔄 Bei Problemen:"
|
||||||
|
log " • Logs prüfen: sudo journalctl -u $SERVICE_NAME"
|
||||||
|
log " • Service neu starten: sudo systemctl restart $SERVICE_NAME"
|
||||||
|
log " • Nginx-Konfiguration testen: sudo nginx -t"
|
||||||
|
|
||||||
|
# Deaktiviere Virtual Environment
|
||||||
|
deactivate
|
||||||
|
|
||||||
|
log "Setup-Skript beendet. Die MYP Platform ist einsatzbereit!"
|
Reference in New Issue
Block a user