"Refactor script files using Conventional Commits (feat)"

This commit is contained in:
Till Tomczak 2025-05-23 08:02:52 +02:00
parent 0ad5597df3
commit aa4ec84a44
4 changed files with 332 additions and 184 deletions

View File

@ -1,50 +1,79 @@
Write-Host "MYP-Umgebung wird bereinigt..." -ForegroundColor Cyan
# 🧹 MYP - Manage your Printer (Hauptbereinigungsskript)
# Weiterleitung an das optimierte Infrastructure-Bereinigungsskript
# Stoppen der Debug-Server, falls sie laufen
if (Test-Path -Path "logs\backend-debug.jobid") {
Write-Host "Stoppe Backend Debug-Server..." -ForegroundColor Yellow
$jobId = Get-Content "logs\backend-debug.jobid"
Stop-Job -Id $jobId -ErrorAction SilentlyContinue
Remove-Job -Id $jobId -Force -ErrorAction SilentlyContinue
Remove-Item "logs\backend-debug.jobid" -Force
param(
[switch]$Force,
[switch]$Help,
[switch]$All
)
# Farbdefinitionen für bessere Ausgabe
$Colors = @{
Info = "Cyan"
Success = "Green"
Warning = "Yellow"
Error = "Red"
Header = "Magenta"
}
if (Test-Path -Path "logs\frontend-debug.jobid") {
Write-Host "Stoppe Frontend Debug-Server..." -ForegroundColor Yellow
$jobId = Get-Content "logs\frontend-debug.jobid"
Stop-Job -Id $jobId -ErrorAction SilentlyContinue
Remove-Job -Id $jobId -Force -ErrorAction SilentlyContinue
Remove-Item "logs\frontend-debug.jobid" -Force
function Write-ColorOutput {
param([string]$Message, [string]$Color = "White")
Write-Host $Message -ForegroundColor $Colors[$Color]
}
# Stoppen und Entfernen aller Docker-Container
Write-Host "Stoppe und entferne alle MYP-Container..." -ForegroundColor Yellow
docker-compose down
# Header anzeigen
Write-ColorOutput "🧹 MYP - Manage your Printer (Bereinigung)" "Header"
Write-ColorOutput "═══════════════════════════════════════════" "Header"
# Entfernen aller MYP-Container, auch die bereits gestoppten
Write-Host "Entferne alle MYP-Container..." -ForegroundColor Yellow
$containers = docker ps -a --filter "name=myp-" -q
if ($containers) {
docker rm -f $containers
# Hilfe anzeigen
if ($Help) {
Write-ColorOutput "`n📖 Verwendung:" "Info"
Write-ColorOutput " .\cleanup.ps1 [Optionen]" "White"
Write-ColorOutput "`n⚙️ Optionen:" "Info"
Write-ColorOutput " -Force - Bereinigung ohne Bestätigung durchführen" "White"
Write-ColorOutput " -All - Vollständige Bereinigung (inkl. Volumes)" "White"
Write-ColorOutput " -Help - Diese Hilfe anzeigen" "White"
Write-ColorOutput "`n📚 Beispiele:" "Info"
Write-ColorOutput " .\cleanup.ps1 # Interaktive Bereinigung" "White"
Write-ColorOutput " .\cleanup.ps1 -Force # Automatische Bereinigung" "White"
Write-ColorOutput " .\cleanup.ps1 -All -Force # Vollständige Bereinigung" "White"
exit 0
}
# Entfernen aller MYP-Images
Write-Host "Entferne alle MYP-Images..." -ForegroundColor Yellow
$images = docker images --filter "reference=*myp*" -q
if ($images) {
docker rmi -f $images
# Prüfe ob Infrastructure-Skript existiert
$InfraScript = ".\infrastructure\scripts\cleanup.ps1"
if (-not (Test-Path $InfraScript)) {
Write-ColorOutput "`n❌ Infrastructure-Bereinigungsskript nicht gefunden: $InfraScript" "Error"
Write-ColorOutput " Bitte stellen Sie sicher, dass die Projektstruktur vollständig ist." "Error"
exit 1
}
# Entfernen von nicht verwendeten Volumes (optional)
Write-Host "Entferne nicht verwendete Volumes..." -ForegroundColor Yellow
docker volume prune -f
# Parameter für Infrastructure-Skript vorbereiten
$InfraParams = @()
if ($Force) { $InfraParams += "-Force" }
if ($All) { $InfraParams += "-All" }
# Entfernen von nicht verwendeten Netzwerken (optional)
Write-Host "Entferne nicht verwendete Netzwerke..." -ForegroundColor Yellow
docker network prune -f
# Weiterleitung an Infrastructure-Skript
Write-ColorOutput "`n🔄 Weiterleitung an Infrastructure-Bereinigungsskript..." "Info"
# Entfernen von Build-Cache (optional)
Write-Host "Entferne Docker Build-Cache..." -ForegroundColor Yellow
docker builder prune -f
Write-Host "Bereinigung abgeschlossen. Sie können nun 'start.ps1' ausführen, um eine frische Installation zu starten." -ForegroundColor Green
try {
if ($InfraParams.Count -gt 0) {
& $InfraScript @InfraParams
} else {
& $InfraScript
}
$ExitCode = $LASTEXITCODE
if ($ExitCode -eq 0) {
Write-ColorOutput "`n🎉 Bereinigung erfolgreich abgeschlossen!" "Success"
} else {
Write-ColorOutput "`n❌ Bereinigung fehlgeschlagen (Exit Code: $ExitCode)" "Error"
}
exit $ExitCode
} catch {
Write-ColorOutput "`n💥 Unerwarteter Fehler bei der Bereinigung:" "Error"
Write-ColorOutput " $($_.Exception.Message)" "Error"
exit 1
}

View File

@ -1,42 +1,115 @@
#!/bin/bash
# 🧹 MYP - Manage your Printer (Hauptbereinigungsskript)
# Weiterleitung an das optimierte Infrastructure-Bereinigungsskript
echo "MYP-Umgebung wird bereinigt..."
set -euo pipefail
# Stoppen der Debug-Server, falls sie laufen
if [ -f logs/backend-debug.pid ]; then
echo "Stoppe Backend Debug-Server..."
kill $(cat logs/backend-debug.pid) 2>/dev/null || true
rm logs/backend-debug.pid
# Farbdefinitionen für bessere Ausgabe
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly MAGENTA='\033[0;35m'
readonly CYAN='\033[0;36m'
readonly WHITE='\033[1;37m'
readonly NC='\033[0m' # No Color
# Logging-Funktionen
log_info() { echo -e "${CYAN} $1${NC}"; }
log_success() { echo -e "${GREEN}$1${NC}"; }
log_warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
log_error() { echo -e "${RED}$1${NC}"; }
log_header() { echo -e "${MAGENTA}$1${NC}"; }
# Standard-Parameter
FORCE_MODE=false
ALL_MODE=false
SHOW_HELP=false
# Hilfe-Funktion
show_help() {
log_header "🧹 MYP - Manage your Printer (Bereinigung)"
log_header "═══════════════════════════════════════════"
echo
log_info "📖 Verwendung:"
echo " ./cleanup.sh [Optionen]"
echo
log_info "⚙️ Optionen:"
echo " -f, --force - Bereinigung ohne Bestätigung durchführen"
echo " -a, --all - Vollständige Bereinigung (inkl. Volumes)"
echo " -h, --help - Diese Hilfe anzeigen"
echo
log_info "📚 Beispiele:"
echo " ./cleanup.sh # Interaktive Bereinigung"
echo " ./cleanup.sh --force # Automatische Bereinigung"
echo " ./cleanup.sh --all --force # Vollständige Bereinigung"
echo
}
# Parameter-Parsing
while [[ $# -gt 0 ]]; do
case $1 in
-f|--force)
FORCE_MODE=true
shift
;;
-a|--all)
ALL_MODE=true
shift
;;
-h|--help)
SHOW_HELP=true
shift
;;
*)
log_error "Unbekannter Parameter: $1"
echo "Verwenden Sie --help für Hilfe."
exit 1
;;
esac
done
# Hilfe anzeigen
if [[ "$SHOW_HELP" == true ]]; then
show_help
exit 0
fi
if [ -f logs/frontend-debug.pid ]; then
echo "Stoppe Frontend Debug-Server..."
kill $(cat logs/frontend-debug.pid) 2>/dev/null || true
rm logs/frontend-debug.pid
# Header anzeigen
log_header "🧹 MYP - Manage your Printer (Bereinigung)"
log_header "═══════════════════════════════════════════"
# Prüfe ob Infrastructure-Skript existiert
INFRA_SCRIPT="./infrastructure/scripts/cleanup.sh"
if [[ ! -f "$INFRA_SCRIPT" ]]; then
log_error "❌ Infrastructure-Bereinigungsskript nicht gefunden: $INFRA_SCRIPT"
log_error " Bitte stellen Sie sicher, dass die Projektstruktur vollständig ist."
exit 1
fi
# Stoppen und Entfernen aller Docker-Container
echo "Stoppe und entferne alle MYP-Container..."
docker-compose down
# Prüfe Ausführungsrechte
if [[ ! -x "$INFRA_SCRIPT" ]]; then
log_warning "⚠️ Setze Ausführungsrechte für Infrastructure-Skript..."
chmod +x "$INFRA_SCRIPT"
fi
# Entfernen aller MYP-Container, auch die bereits gestoppten
echo "Entferne alle MYP-Container..."
docker ps -a --filter "name=myp-" -q | xargs -r docker rm -f
# Parameter für Infrastructure-Skript vorbereiten
INFRA_PARAMS=()
if [[ "$FORCE_MODE" == true ]]; then
INFRA_PARAMS+=("--force")
fi
if [[ "$ALL_MODE" == true ]]; then
INFRA_PARAMS+=("--all")
fi
# Entfernen aller MYP-Images
echo "Entferne alle MYP-Images..."
docker images | grep "myp-" | awk '{print $3}' | xargs -r docker rmi -f
# Weiterleitung an Infrastructure-Skript
log_info "🔄 Weiterleitung an Infrastructure-Bereinigungsskript..."
# Entfernen von nicht verwendeten Volumes (optional)
echo "Entferne nicht verwendete Volumes..."
docker volume prune -f
# Entfernen von nicht verwendeten Netzwerken (optional)
echo "Entferne nicht verwendete Netzwerke..."
docker network prune -f
# Entfernen von Build-Cache (optional)
echo "Entferne Docker Build-Cache..."
docker builder prune -f
echo "Bereinigung abgeschlossen. Sie können nun 'start.sh' ausführen, um eine frische Installation zu starten."
if "${INFRA_SCRIPT}" "${INFRA_PARAMS[@]}"; then
log_success "🎉 Bereinigung erfolgreich abgeschlossen!"
exit 0
else
EXIT_CODE=$?
log_error "❌ Bereinigung fehlgeschlagen (Exit Code: $EXIT_CODE)"
exit $EXIT_CODE
fi

View File

@ -26,22 +26,22 @@ function Write-ColorOutput {
}
# Header anzeigen
Write-ColorOutput "🖨️ MYP - Manage your Printer" "Header"
Write-ColorOutput "═══════════════════════════════════════" "Header"
Write-ColorOutput "MYP - Manage your Printer" "Header"
Write-ColorOutput "=======================================" "Header"
# Hilfe anzeigen
if ($Help) {
Write-ColorOutput "`n📖 Verwendung:" "Info"
Write-ColorOutput "`nVerwendung:" "Info"
Write-ColorOutput " .\start.ps1 [Environment] [Optionen]" "White"
Write-ColorOutput "`n🌍 Verfügbare Umgebungen:" "Info"
Write-ColorOutput "`nVerfügbare Umgebungen:" "Info"
Write-ColorOutput " dev, development - Entwicklungsumgebung (Standard)" "White"
Write-ColorOutput " prod, production - Produktionsumgebung" "White"
Write-ColorOutput " test - Testumgebung" "White"
Write-ColorOutput "`n⚙️ Optionen:" "Info"
Write-ColorOutput "`nOptionen:" "Info"
Write-ColorOutput " -Help - Diese Hilfe anzeigen" "White"
Write-ColorOutput " -Version - Versionsinformationen anzeigen" "White"
Write-ColorOutput " -Clean - System vor Start bereinigen" "White"
Write-ColorOutput "`n📚 Beispiele:" "Info"
Write-ColorOutput "`nBeispiele:" "Info"
Write-ColorOutput " .\start.ps1 # Entwicklungsumgebung starten" "White"
Write-ColorOutput " .\start.ps1 prod # Produktionsumgebung starten" "White"
Write-ColorOutput " .\start.ps1 dev -Clean # Mit Bereinigung starten" "White"
@ -50,7 +50,7 @@ if ($Help) {
# Version anzeigen
if ($Version) {
Write-ColorOutput "`n📋 Systeminformationen:" "Info"
Write-ColorOutput "`nSysteminformationen:" "Info"
Write-ColorOutput " MYP Version: 2.0.0" "White"
Write-ColorOutput " PowerShell: $($PSVersionTable.PSVersion)" "White"
Write-ColorOutput " OS: $($PSVersionTable.OS)" "White"
@ -60,25 +60,25 @@ if ($Version) {
# Bereinigung falls gewünscht
if ($Clean) {
Write-ColorOutput "`n🧹 System wird bereinigt..." "Warning"
Write-ColorOutput "`nSystem wird bereinigt..." "Warning"
& ".\infrastructure\scripts\cleanup.ps1" -Force
if ($LASTEXITCODE -ne 0) {
Write-ColorOutput "Bereinigung fehlgeschlagen!" "Error"
Write-ColorOutput "Bereinigung fehlgeschlagen!" "Error"
exit 1
}
Write-ColorOutput "System erfolgreich bereinigt!" "Success"
Write-ColorOutput "System erfolgreich bereinigt!" "Success"
}
# Prüfe ob Infrastructure-Skript existiert
$InfraScript = ".\infrastructure\scripts\start.ps1"
if (-not (Test-Path $InfraScript)) {
Write-ColorOutput "`nInfrastructure-Startskript nicht gefunden: $InfraScript" "Error"
Write-ColorOutput "`nInfrastructure-Startskript nicht gefunden: $InfraScript" "Error"
Write-ColorOutput " Bitte stellen Sie sicher, dass die Projektstruktur vollständig ist." "Error"
exit 1
}
# Weiterleitung an Infrastructure-Skript
Write-ColorOutput "`n🔄 Weiterleitung an Infrastructure-Startskript..." "Info"
Write-ColorOutput "`nWeiterleitung an Infrastructure-Startskript..." "Info"
Write-ColorOutput " Umgebung: $Environment" "White"
try {
@ -86,15 +86,15 @@ try {
$ExitCode = $LASTEXITCODE
if ($ExitCode -eq 0) {
Write-ColorOutput "`n🎉 MYP erfolgreich gestartet!" "Success"
Write-ColorOutput "`nMYP erfolgreich gestartet!" "Success"
Write-ColorOutput " Zugriff über: http://localhost" "Info"
} else {
Write-ColorOutput "`nStart fehlgeschlagen (Exit Code: $ExitCode)" "Error"
Write-ColorOutput "`nStart fehlgeschlagen (Exit Code: $ExitCode)" "Error"
}
exit $ExitCode
} catch {
Write-ColorOutput "`n💥 Unerwarteter Fehler beim Start:" "Error"
Write-ColorOutput "`nUnerwarteter Fehler beim Start:" "Error"
Write-ColorOutput " $($_.Exception.Message)" "Error"
exit 1
}

244
start.sh
View File

@ -1,111 +1,157 @@
#!/bin/bash
# Projektarbeit-MYP Startskript für Linux
# Dieses Skript startet alle notwendigen Dienste für das MYP-Projekt
# 🚀 MYP - Manage your Printer (Hauptstartskript)
# Weiterleitung an das optimierte Infrastructure-Startskript
echo -e "\e[32mStarte MYP-Projekt...\e[0m"
set -euo pipefail
# SSH-Server prüfen und aktivieren
echo -e "\e[33mPrüfe SSH-Server-Status...\e[0m"
if command -v systemctl > /dev/null; then
# Prüfen, ob SSH-Server installiert ist
if ! systemctl list-unit-files | grep -q ssh.service; then
echo -e "\e[33mSSH-Server scheint nicht installiert zu sein. Versuche zu installieren...\e[0m"
if command -v apt-get > /dev/null; then
sudo apt-get update && sudo apt-get install -y openssh-server
elif command -v yum > /dev/null; then
sudo yum install -y openssh-server
else
echo -e "\e[31mPacket-Manager nicht gefunden. Bitte installieren Sie openssh-server manuell.\e[0m"
fi
fi
# SSH-Server aktivieren und starten
echo -e "\e[33mAktiviere SSH-Server beim Systemstart...\e[0m"
sudo systemctl enable ssh.service || sudo systemctl enable sshd.service
# SSH-Server starten, falls nicht bereits läuft
if ! systemctl is-active --quiet ssh.service && ! systemctl is-active --quiet sshd.service; then
echo -e "\e[33mStarte SSH-Server...\e[0m"
sudo systemctl start ssh.service || sudo systemctl start sshd.service
else
echo -e "\e[32mSSH-Server läuft bereits.\e[0m"
fi
else
echo -e "\e[31mSystemctl nicht gefunden. Bitte aktivieren Sie den SSH-Server manuell.\e[0m"
# Farbdefinitionen für bessere Ausgabe
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly MAGENTA='\033[0;35m'
readonly CYAN='\033[0;36m'
readonly WHITE='\033[1;37m'
readonly NC='\033[0m' # No Color
# Logging-Funktionen
log_info() { echo -e "${CYAN} $1${NC}"; }
log_success() { echo -e "${GREEN}$1${NC}"; }
log_warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
log_error() { echo -e "${RED}$1${NC}"; }
log_header() { echo -e "${MAGENTA}$1${NC}"; }
# Standard-Umgebung
ENVIRONMENT="dev"
CLEAN_MODE=false
SHOW_HELP=false
SHOW_VERSION=false
# Hilfe-Funktion
show_help() {
log_header "🖨️ MYP - Manage your Printer"
log_header "═══════════════════════════════════════"
echo
log_info "📖 Verwendung:"
echo " ./start.sh [Environment] [Optionen]"
echo
log_info "🌍 Verfügbare Umgebungen:"
echo " dev, development - Entwicklungsumgebung (Standard)"
echo " prod, production - Produktionsumgebung"
echo " test - Testumgebung"
echo
log_info "⚙️ Optionen:"
echo " -h, --help - Diese Hilfe anzeigen"
echo " -v, --version - Versionsinformationen anzeigen"
echo " -c, --clean - System vor Start bereinigen"
echo
log_info "📚 Beispiele:"
echo " ./start.sh # Entwicklungsumgebung starten"
echo " ./start.sh prod # Produktionsumgebung starten"
echo " ./start.sh dev --clean # Mit Bereinigung starten"
echo
}
# Versions-Funktion
show_version() {
log_header "🖨️ MYP - Manage your Printer"
log_header "═══════════════════════════════════════"
echo
log_info "📋 Systeminformationen:"
echo " MYP Version: 2.0.0"
echo " Bash Version: ${BASH_VERSION}"
echo " OS: $(uname -s)"
echo " Architektur: $(uname -m)"
echo " Kernel: $(uname -r)"
echo
}
# Parameter-Parsing
while [[ $# -gt 0 ]]; do
case $1 in
dev|development)
ENVIRONMENT="dev"
shift
;;
prod|production)
ENVIRONMENT="prod"
shift
;;
test)
ENVIRONMENT="test"
shift
;;
-h|--help)
SHOW_HELP=true
shift
;;
-v|--version)
SHOW_VERSION=true
shift
;;
-c|--clean)
CLEAN_MODE=true
shift
;;
*)
log_error "Unbekannter Parameter: $1"
echo "Verwenden Sie --help für Hilfe."
exit 1
;;
esac
done
# Hilfe anzeigen
if [[ "$SHOW_HELP" == true ]]; then
show_help
exit 0
fi
# Überprüfen, ob Docker läuft
if ! docker info > /dev/null 2>&1; then
echo -e "\e[33mDocker scheint nicht zu laufen. Versuche Docker zu starten...\e[0m"
# Versuchen, Docker zu starten (funktioniert auf Systemen mit systemd)
if command -v systemctl > /dev/null; then
sudo systemctl start docker
sleep 5
if ! docker info > /dev/null 2>&1; then
echo -e "\e[31mDocker konnte nicht gestartet werden. Bitte starten Sie Docker manuell und führen Sie dieses Skript erneut aus.\e[0m"
exit 1
fi
# Version anzeigen
if [[ "$SHOW_VERSION" == true ]]; then
show_version
exit 0
fi
# Header anzeigen
log_header "🖨️ MYP - Manage your Printer"
log_header "═══════════════════════════════════════"
# Bereinigung falls gewünscht
if [[ "$CLEAN_MODE" == true ]]; then
log_warning "🧹 System wird bereinigt..."
if ./infrastructure/scripts/cleanup.sh --force; then
log_success "✅ System erfolgreich bereinigt!"
else
echo -e "\e[31mDocker ist nicht gestartet und konnte nicht automatisch gestartet werden.\e[0m"
echo -e "\e[31mBitte starten Sie Docker manuell und führen Sie dieses Skript erneut aus.\e[0m"
log_error "❌ Bereinigung fehlgeschlagen!"
exit 1
fi
echo -e "\e[32mDocker wurde erfolgreich gestartet.\e[0m"
fi
# Überprüfen, ob die Container bereits laufen
RUNNING_CONTAINERS=$(docker ps --format "{{.Names}}" | grep -E "myp-backend|myp-rp|myp-caddy" | wc -l)
# Prüfe ob Infrastructure-Skript existiert
INFRA_SCRIPT="./infrastructure/scripts/start.sh"
if [[ ! -f "$INFRA_SCRIPT" ]]; then
log_error "❌ Infrastructure-Startskript nicht gefunden: $INFRA_SCRIPT"
log_error " Bitte stellen Sie sicher, dass die Projektstruktur vollständig ist."
exit 1
fi
if [ "$RUNNING_CONTAINERS" -eq 3 ]; then
echo -e "\e[32mAlle MYP-Container laufen bereits.\e[0m"
# Prüfe Ausführungsrechte
if [[ ! -x "$INFRA_SCRIPT" ]]; then
log_warning "⚠️ Setze Ausführungsrechte für Infrastructure-Skript..."
chmod +x "$INFRA_SCRIPT"
fi
# Weiterleitung an Infrastructure-Skript
log_info "🔄 Weiterleitung an Infrastructure-Startskript..."
echo " Umgebung: $ENVIRONMENT"
if "$INFRA_SCRIPT" "$ENVIRONMENT"; then
log_success "🎉 MYP erfolgreich gestartet!"
log_info " Zugriff über: http://localhost"
exit 0
else
# Container starten
echo -e "\e[33mStarte MYP-Container...\e[0m"
# Ins Projektverzeichnis wechseln
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Docker-Compose ausführen
docker-compose up -d
# Warten, bis alle Container laufen
echo -e "\e[33mWarte, bis alle Container bereit sind...\e[0m"
ALL_RUNNING=false
RETRY_COUNT=0
MAX_RETRIES=30
while [ "$ALL_RUNNING" = false ] && [ "$RETRY_COUNT" -lt "$MAX_RETRIES" ]; do
sleep 5
RETRY_COUNT=$((RETRY_COUNT + 1))
BACKEND_HEALTH=$(docker inspect --format='{{.State.Health.Status}}' myp-backend 2>/dev/null)
FRONTEND_HEALTH=$(docker inspect --format='{{.State.Health.Status}}' myp-rp 2>/dev/null)
if [ "$BACKEND_HEALTH" = "healthy" ] && [ "$FRONTEND_HEALTH" = "healthy" ]; then
ALL_RUNNING=true
fi
done
if [ "$ALL_RUNNING" = true ]; then
echo -e "\e[32mAlle MYP-Container sind bereit und laufen.\e[0m"
else
echo -e "\e[33mZeitüberschreitung beim Warten auf Container. Bitte überprüfen Sie den Status mit 'docker ps'.\e[0m"
fi
fi
# Informationen zur Anwendung anzeigen
echo -e "\n\e[36mMYP-Anwendung ist jetzt verfügbar unter:\e[0m"
echo -e " * http://localhost"
echo -e " * http://192.168.0.5:5000 (Backend API direkt)"
echo -e "\n\e[36mDas Backend ist unter der festen IP 192.168.0.5 erreichbar.\e[0m"
echo -e "\e[36mDie API kann über http://localhost/api/ angesprochen werden.\e[0m"
echo -e "\n\e[36mSSH-Server ist aktiviert und wird beim Systemstart automatisch gestartet.\e[0m"
echo -e "\n\e[33mZum Beenden der Anwendung verwenden Sie: docker-compose down\e[0m"
# Ausführbare Rechte setzen
chmod +x "$0"
EXIT_CODE=$?
log_error "❌ Start fehlgeschlagen (Exit Code: $EXIT_CODE)"
exit $EXIT_CODE
fi