📝 'feat(infrastructure): Cleanup scripts and service files'

This commit is contained in:
Till Tomczak 2025-05-23 08:43:12 +02:00
parent b98e33f28f
commit 1ce3b5fc91
11 changed files with 0 additions and 1674 deletions

View File

@ -1,80 +0,0 @@
# MYP-Projekt Service-Installation
Diese Anleitung beschreibt, wie der MYP-Projektservice als systemd-Dienst eingerichtet wird, damit das System beim Booten automatisch startet.
## Voraussetzungen
- Docker und Docker Compose sind installiert
- sudo-Rechte auf dem System
## Installation des Services
1. Bearbeiten Sie die Datei `myp-service.service` und passen Sie die Pfade an:
- Ersetzen Sie `/path/to/Projektarbeit-MYP` mit dem tatsächlichen Pfad zum Projektverzeichnis
2. Kopieren Sie die Service-Datei in das systemd-Verzeichnis:
```bash
sudo cp myp-service.service /etc/systemd/system/
```
3. Aktualisieren Sie die systemd-Konfiguration:
```bash
sudo systemctl daemon-reload
```
4. Aktivieren Sie den Service, damit er beim Booten startet:
```bash
sudo systemctl enable myp-service
```
5. Starten Sie den Service:
```bash
sudo systemctl start myp-service
```
## Überprüfen des Service-Status
Um den Status des Services zu überprüfen:
```bash
sudo systemctl status myp-service
```
## Stoppen des Services
Um den Service zu stoppen:
```bash
sudo systemctl stop myp-service
```
## Deaktivieren des Autostart
Um den automatischen Start zu deaktivieren:
```bash
sudo systemctl disable myp-service
```
## Fehlerbehebung
Überprüfen Sie die Logs bei Problemen:
```bash
journalctl -u myp-service
```
## Hinweis für Windows-Systeme
Für Windows-Systeme empfehlen wir die Verwendung des Task-Schedulers:
1. Öffnen Sie den Task-Scheduler (taskschd.msc)
2. Erstellen Sie eine neue Aufgabe:
- Trigger: "Bei Start"
- Aktion: "Programm starten"
- Programm/Skript: `powershell.exe`
- Argumente: `-ExecutionPolicy Bypass -File "C:\Pfad\zu\Projektarbeit-MYP\start.ps1"`
- "Mit höchsten Privilegien ausführen" aktivieren
Dadurch wird das MYP-Projekt automatisch beim Systemstart gestartet.

View File

@ -1,58 +0,0 @@
#!/bin/bash
# MYP-Projekt systemd-Service Installationsskript
# Überprüfen, ob das Skript mit Root-Rechten ausgeführt wird
if [ "$EUID" -ne 0 ]; then
echo "Bitte führen Sie dieses Skript mit Root-Rechten aus (sudo)."
exit 1
fi
# Ermitteln des Projektpfads
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
echo "MYP-Projekt Service-Installation"
echo "================================"
echo "Projektpfad: $PROJECT_DIR"
# Kopieren der Service-Datei mit angepasstem Pfad
echo "Erstelle systemd-Service-Datei..."
cp "$SCRIPT_DIR/myp-service.service" /tmp/myp-service.service
sed -i "s|/path/to/Projektarbeit-MYP|$PROJECT_DIR|g" /tmp/myp-service.service
# Kopieren der Service-Datei in das systemd-Verzeichnis
echo "Installiere systemd-Service..."
cp /tmp/myp-service.service /etc/systemd/system/
rm /tmp/myp-service.service
# Setze Ausführungsrechte für das Start-Skript
chmod +x "$PROJECT_DIR/start.sh"
# Systemd aktualisieren
echo "Aktualisiere systemd..."
systemctl daemon-reload
# Service aktivieren
echo "Aktiviere Service für Autostart..."
systemctl enable myp-service
echo
echo "Installation abgeschlossen."
echo "Möchten Sie den Service jetzt starten? (j/n)"
read -r ANTWORT
if [[ "$ANTWORT" =~ ^[Jj]$ ]]; then
echo "Starte MYP-Projekt Service..."
systemctl start myp-service
# Status anzeigen
echo
echo "Service-Status:"
systemctl status myp-service --no-pager
fi
echo
echo "Sie können den Service-Status jederzeit mit folgendem Befehl überprüfen:"
echo " sudo systemctl status myp-service"
echo
echo "Der MYP-Projekt Service wird nun bei jedem Systemstart automatisch gestartet."

View File

@ -1,66 +0,0 @@
@echo off
echo MYP-Projekt Autostart-Einrichtung
echo =================================
REM Erfordert Admin-Rechte
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 (
echo Bitte führen Sie dieses Skript mit Administratorrechten aus.
echo Klicken Sie mit der rechten Maustaste und wählen Sie "Als Administrator ausführen".
pause
exit /b 1
)
REM Pfad zum Projektverzeichnis ermitteln
set SCRIPT_DIR=%~dp0
set PROJECT_DIR=%SCRIPT_DIR%..
cd %PROJECT_DIR%
set PROJECT_PATH=%CD%
echo.
echo Projektpfad: %PROJECT_PATH%
REM Erstellung der PowerShell-Skriptdatei für den Task
echo Erstelle PowerShell-Skriptdatei für den Windows Task...
set PS_SCRIPT=%PROJECT_PATH%\config\secure\myp-autostart.ps1
if not exist "%PROJECT_PATH%\config\secure" mkdir "%PROJECT_PATH%\config\secure"
echo $ErrorActionPreference = "Stop" > "%PS_SCRIPT%"
echo try { >> "%PS_SCRIPT%"
echo Write-Host "Starte MYP-Projekt..." >> "%PS_SCRIPT%"
echo Set-Location -Path "%PROJECT_PATH%" >> "%PS_SCRIPT%"
echo Start-Process -FilePath "powershell.exe" -ArgumentList "-ExecutionPolicy Bypass -File '%PROJECT_PATH%\start.ps1'" >> "%PS_SCRIPT%"
echo Write-Host "MYP-Projekt erfolgreich gestartet" >> "%PS_SCRIPT%"
echo } catch { >> "%PS_SCRIPT%"
echo $ErrorMessage = $_.Exception.Message >> "%PS_SCRIPT%"
echo Write-Host "Fehler beim Starten des MYP-Projekts: $ErrorMessage" >> "%PS_SCRIPT%"
echo Add-Content -Path "%PROJECT_PATH%\logs\autostart_error.log" -Value "$(Get-Date) - Fehler: $ErrorMessage" >> "%PS_SCRIPT%"
echo exit 1 >> "%PS_SCRIPT%"
echo } >> "%PS_SCRIPT%"
REM Erstellung des geplanten Tasks
echo Erstelle geplanten Windows Task...
schtasks /create /tn "MYP-Projekt Autostart" /sc onstart /delay 0000:30 /ru "System" /rl highest /tr "powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File \"%PS_SCRIPT%\"" /f
if %ERRORLEVEL% NEQ 0 (
echo Fehler bei der Erstellung des geplanten Tasks.
pause
exit /b 1
)
echo.
echo Der MYP-Projekt Autostart wurde erfolgreich eingerichtet.
echo Das System wird nun bei jedem Systemstart automatisch das MYP-Projekt starten.
echo.
echo Möchten Sie das Projekt jetzt starten?
choice /c JN /m "Projekt jetzt starten (J/N)?"
if %ERRORLEVEL% EQU 1 (
echo Starte MYP-Projekt...
powershell.exe -ExecutionPolicy Bypass -File "%PROJECT_PATH%\start.ps1"
)
echo.
echo Installation abgeschlossen.
pause

View File

@ -1,14 +0,0 @@
[Unit]
Description=MYP Projektarbeit Service
After=docker.service network.target
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/path/to/Projektarbeit-MYP
ExecStart=/path/to/Projektarbeit-MYP/start.sh
ExecStop=/usr/bin/docker-compose -f /path/to/Projektarbeit-MYP/docker-compose.yml down
[Install]
WantedBy=multi-user.target

View File

@ -1,63 +0,0 @@
# 🔧 MYP Entwicklungsumgebung
# Konfigurationsdatei für lokale Entwicklung
# === Anwendungseinstellungen ===
NODE_ENV=development
FLASK_ENV=development
FLASK_DEBUG=true
NEXT_TELEMETRY_DISABLED=1
# === Datenbankeinstellungen ===
DATABASE_PATH=instance/myp_dev.db
DATABASE_URL=sqlite:///instance/myp_dev.db
# === Sicherheitseinstellungen ===
SECRET_KEY=development-key-DO-NOT-USE-IN-PRODUCTION-7445630171969
JWT_SECRET=dev-jwt-secret-change-in-production
SESSION_SECRET=dev-session-secret-change-in-production
# === API-Konfiguration ===
BACKEND_URL=http://backend:5000
FRONTEND_URL=http://frontend:3000
API_BASE_URL=http://localhost:5000/api
NEXT_PUBLIC_API_URL=http://localhost:5000/api
# === Drucker-Konfiguration ===
# Testdrucker für Entwicklungsumgebung
PRINTERS={"Drucker Test 1": {"ip": "192.168.0.100", "model": "UltiMaker S3"}, "Drucker Test 2": {"ip": "192.168.0.101", "model": "UltiMaker S5"}, "Drucker Test 3": {"ip": "192.168.0.102", "model": "UltiMaker S7"}}
# === TAPO Smart Plug Einstellungen ===
TAPO_USERNAME=till.tomczak@mercedes-benz.com
TAPO_PASSWORD=744563017196A
# === Logging-Konfiguration ===
LOG_LEVEL=DEBUG
LOG_FILE=logs/myp_dev.log
ENABLE_SQL_LOGGING=true
# === Entwicklungs-Features ===
ENABLE_DEBUG_TOOLBAR=true
ENABLE_HOT_RELOAD=true
MOCK_EXTERNAL_SERVICES=true
ENABLE_CORS=true
# === Monitoring ===
ENABLE_PROMETHEUS=true
PROMETHEUS_PORT=9090
GRAFANA_PORT=3001
# === Docker-Konfiguration ===
COMPOSE_PROJECT_NAME=myp-dev
DOCKER_BUILDKIT=1
COMPOSE_DOCKER_CLI_BUILD=1
# === Netzwerk-Einstellungen ===
BACKEND_PORT=5000
FRONTEND_PORT=3000
PROXY_HTTP_PORT=80
PROXY_HTTPS_PORT=443
# === Entwicklungstools ===
ENABLE_LIVE_RELOAD=true
WATCH_FILES=true
AUTO_RESTART=true

View File

@ -1,81 +0,0 @@
# 🧪 MYP Testumgebung
# Konfigurationsdatei für automatisierte Tests
# === Anwendungseinstellungen ===
NODE_ENV=test
FLASK_ENV=testing
FLASK_DEBUG=false
NEXT_TELEMETRY_DISABLED=1
# === Datenbankeinstellungen ===
DATABASE_PATH=:memory:
DATABASE_URL=sqlite:///:memory:
TEST_DATABASE_PATH=instance/test.db
# === Sicherheitseinstellungen ===
SECRET_KEY=test-secret-key-for-testing-only
JWT_SECRET=test-jwt-secret
SESSION_SECRET=test-session-secret
# === API-Konfiguration ===
BACKEND_URL=http://backend:5000
FRONTEND_URL=http://frontend:3000
API_BASE_URL=http://localhost:5000/api
NEXT_PUBLIC_API_URL=http://localhost:5000/api
# === Test-Drucker-Konfiguration ===
# Mock-Drucker für Tests
PRINTERS={"Test Drucker 1": {"ip": "127.0.0.1", "model": "Mock UltiMaker"}, "Test Drucker 2": {"ip": "127.0.0.2", "model": "Mock UltiMaker"}}
# === TAPO Mock Einstellungen ===
TAPO_USERNAME=test@example.com
TAPO_PASSWORD=test-password
# === Logging-Konfiguration ===
LOG_LEVEL=WARNING
LOG_FILE=logs/test.log
ENABLE_SQL_LOGGING=false
# === Test-Features ===
ENABLE_DEBUG_TOOLBAR=false
ENABLE_HOT_RELOAD=false
MOCK_EXTERNAL_SERVICES=true
ENABLE_CORS=true
# === Test-Monitoring ===
ENABLE_PROMETHEUS=false
PROMETHEUS_PORT=9090
GRAFANA_PORT=3001
# === Docker-Test-Konfiguration ===
COMPOSE_PROJECT_NAME=myp-test
DOCKER_BUILDKIT=1
COMPOSE_DOCKER_CLI_BUILD=1
# === Test-Netzwerk-Einstellungen ===
BACKEND_PORT=5000
FRONTEND_PORT=3000
PROXY_HTTP_PORT=80
PROXY_HTTPS_PORT=443
# === Test-Optimierungen ===
ENABLE_LIVE_RELOAD=false
WATCH_FILES=false
AUTO_RESTART=false
# === Test-spezifische Einstellungen ===
TEST_TIMEOUT=30
TEST_RETRY_COUNT=3
ENABLE_TEST_FIXTURES=true
RESET_DB_BETWEEN_TESTS=true
# === Geschwindigkeit-Optimierungen für Tests ===
DISABLE_MIGRATIONS=true
USE_FAST_HASH=true
SKIP_SLOW_TESTS=false
# === Coverage und Reporting ===
ENABLE_COVERAGE=true
COVERAGE_THRESHOLD=80
GENERATE_TEST_REPORTS=true
TEST_REPORT_FORMAT=junit

View File

@ -1,256 +0,0 @@
# 🧹 MYP Bereinigungs-Skript (Windows PowerShell)
# Vollständige Bereinigung aller Docker-Ressourcen
param(
[switch]$Force,
[switch]$KeepVolumes,
[switch]$Verbose
)
$ErrorActionPreference = "Stop"
# Farbkodierte Ausgabe
function Write-ColoredOutput {
param(
[string]$Message,
[string]$Color = "White"
)
Write-Host $Message -ForegroundColor $Color
}
function Write-Step {
param([string]$Message)
Write-ColoredOutput "🔧 $Message" "Cyan"
}
function Write-Success {
param([string]$Message)
Write-ColoredOutput "$Message" "Green"
}
function Write-Warning {
param([string]$Message)
Write-ColoredOutput "⚠️ $Message" "Yellow"
}
function Write-Error {
param([string]$Message)
Write-ColoredOutput "$Message" "Red"
}
# Header
Write-ColoredOutput @"
🧹 MYP Bereinigung
Docker-Ressourcen aufräumen
"@ "Magenta"
# Bestätigung anfordern (außer bei -Force)
if (-not $Force) {
Write-Warning "WARNUNG: Diese Aktion wird alle MYP-Container, Images und Netzwerke entfernen!"
if (-not $KeepVolumes) {
Write-Warning "Auch alle Volumes (einschließlich Datenbanken) werden gelöscht!"
}
$confirm = Read-Host "Möchten Sie fortfahren? (j/N)"
if ($confirm -ne "j" -and $confirm -ne "J") {
Write-Host "Bereinigung abgebrochen."
exit 0
}
}
# Docker Verfügbarkeit prüfen
try {
$dockerInfo = docker info 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Error "Docker ist nicht verfügbar oder läuft nicht."
exit 1
}
}
catch {
Write-Error "Fehler beim Zugriff auf Docker: $_"
exit 1
}
# Aktuelle Docker Compose Services stoppen
Write-Step "Stoppe Docker Compose Services..."
try {
$composeFiles = @("docker-compose.yml")
if (Test-Path "docker-compose.dev.yml") {
$composeFiles += "docker-compose.dev.yml"
}
if (Test-Path "docker-compose.override.yml") {
$composeFiles += "docker-compose.override.yml"
}
$composeArgs = $composeFiles | ForEach-Object { "-f", $_ }
docker-compose @composeArgs down --remove-orphans 2>$null
Write-Success "Services gestoppt"
}
catch {
Write-Warning "Fehler beim Stoppen der Services: $_"
}
# MYP-spezifische Container entfernen
Write-Step "Entferne MYP-Container..."
try {
$mypContainers = docker ps -a --filter "name=myp-" --format "{{.Names}}" 2>$null
if ($mypContainers) {
docker rm -f $mypContainers 2>$null
Write-Success "MYP-Container entfernt: $($mypContainers -join ', ')"
} else {
Write-Host "Keine MYP-Container gefunden"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Container: $_"
}
# MYP-spezifische Images entfernen
Write-Step "Entferne MYP-Images..."
try {
$mypImages = docker images --filter "reference=*myp*" --format "{{.Repository}}:{{.Tag}}" 2>$null
if ($mypImages) {
docker rmi -f $mypImages 2>$null
Write-Success "MYP-Images entfernt: $($mypImages -join ', ')"
} else {
Write-Host "Keine MYP-Images gefunden"
}
# Auch projektspezifische Images entfernen
$projectImages = docker images --filter "reference=projektarbeit-myp*" --format "{{.Repository}}:{{.Tag}}" 2>$null
if ($projectImages) {
docker rmi -f $projectImages 2>$null
Write-Success "Projekt-Images entfernt: $($projectImages -join ', ')"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Images: $_"
}
# MYP-Netzwerke entfernen
Write-Step "Entferne MYP-Netzwerke..."
try {
$mypNetworks = docker network ls --filter "name=myp" --format "{{.Name}}" 2>$null
if ($mypNetworks) {
docker network rm $mypNetworks 2>$null
Write-Success "MYP-Netzwerke entfernt: $($mypNetworks -join ', ')"
} else {
Write-Host "Keine MYP-Netzwerke gefunden"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Netzwerke: $_"
}
# Volumes entfernen (nur wenn nicht explizit ausgeschlossen)
if (-not $KeepVolumes) {
Write-Step "Entferne MYP-Volumes..."
try {
$mypVolumes = docker volume ls --filter "name=myp" --format "{{.Name}}" 2>$null
if ($mypVolumes) {
docker volume rm $mypVolumes 2>$null
Write-Success "MYP-Volumes entfernt: $($mypVolumes -join ', ')"
} else {
Write-Host "Keine MYP-Volumes gefunden"
}
# Auch projektspezifische Volumes
$projectVolumes = docker volume ls --filter "name=projektarbeit-myp" --format "{{.Name}}" 2>$null
if ($projectVolumes) {
docker volume rm $projectVolumes 2>$null
Write-Success "Projekt-Volumes entfernt: $($projectVolumes -join ', ')"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Volumes: $_"
}
} else {
Write-Warning "Volumes werden beibehalten (--KeepVolumes gesetzt)"
}
# Unbenutzte Ressourcen bereinigen
Write-Step "Bereinige unbenutzte Docker-Ressourcen..."
try {
docker system prune -f 2>$null
Write-Success "System-Bereinigung abgeschlossen"
}
catch {
Write-Warning "Fehler bei der System-Bereinigung: $_"
}
# Build-Cache bereinigen
Write-Step "Bereinige Build-Cache..."
try {
docker builder prune -f 2>$null
Write-Success "Build-Cache bereinigt"
}
catch {
Write-Warning "Fehler beim Bereinigen des Build-Caches: $_"
}
# Lokale Dateien bereinigen
Write-Step "Bereinige lokale temporäre Dateien..."
try {
# Logs bereinigen
if (Test-Path "logs") {
Get-ChildItem "logs" -File -Recurse | Remove-Item -Force -ErrorAction SilentlyContinue
Write-Host " Logs bereinigt"
}
# Backend instance bereinigen (außer bei KeepVolumes)
if (-not $KeepVolumes -and (Test-Path "backend/instance")) {
Get-ChildItem "backend/instance" -File -Recurse | Remove-Item -Force -ErrorAction SilentlyContinue
Write-Host " Backend-Instance bereinigt"
}
# Frontend build artifacts bereinigen
if (Test-Path "frontend/.next") {
Remove-Item "frontend/.next" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host " Frontend-Build-Artifacts bereinigt"
}
if (Test-Path "frontend/out") {
Remove-Item "frontend/out" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host " Frontend-Output bereinigt"
}
Write-Success "Lokale Dateien bereinigt"
}
catch {
Write-Warning "Fehler beim Bereinigen lokaler Dateien: $_"
}
# Übersicht der verbliebenen Ressourcen (wenn Verbose)
if ($Verbose) {
Write-Step "Verbliebene Docker-Ressourcen:"
Write-Host "Container:"
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" 2>$null | Out-Host
Write-Host "`nImages:"
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" 2>$null | Out-Host
Write-Host "`nVolumes:"
docker volume ls --format "table {{.Name}}\t{{.Driver}}" 2>$null | Out-Host
Write-Host "`nNetzwerke:"
docker network ls --format "table {{.Name}}\t{{.Driver}}" 2>$null | Out-Host
}
Write-Success "🎉 Bereinigung erfolgreich abgeschlossen!"
Write-Step "Empfohlene nächste Schritte:"
Write-Host " 1. Neustart mit: .\infrastructure\scripts\start.ps1"
Write-Host " 2. Oder bei Problemen: .\infrastructure\scripts\start.ps1 dev --clean --no-cache"
# Speicherplatz-Ersparnis anzeigen
Write-Step "Führe Docker System-Analyse durch..."
try {
docker system df 2>$null | Out-Host
}
catch {
Write-Warning "System-Analyse fehlgeschlagen"
}

View File

@ -1,289 +0,0 @@
#!/bin/bash
# 🧹 MYP Bereinigungs-Skript (Linux/macOS)
# Vollständige Bereinigung aller Docker-Ressourcen
set -e
# Parameter
FORCE_FLAG=""
KEEP_VOLUMES_FLAG=""
VERBOSE_FLAG=""
# Farbkodierte Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
print_colored() {
local color="$1"
local message="$2"
echo -e "${color}${message}${NC}"
}
print_step() {
print_colored "$CYAN" "🔧 $1"
}
print_success() {
print_colored "$GREEN" "$1"
}
print_warning() {
print_colored "$YELLOW" "⚠️ $1"
}
print_error() {
print_colored "$RED" "$1"
}
# Hilfefunktion
show_help() {
echo "Verwendung: $0 [OPTIONEN]"
echo ""
echo "OPTIONEN:"
echo " --force Keine Bestätigung anfordern"
echo " --keep-volumes Volumes (Datenbanken) beibehalten"
echo " --verbose Ausführliche Ausgabe"
echo " --help Diese Hilfe anzeigen"
echo ""
echo "Beispiele:"
echo " $0 --force"
echo " $0 --keep-volumes --verbose"
}
# Parameter verarbeiten
while [[ $# -gt 0 ]]; do
case $1 in
--force)
FORCE_FLAG="--force"
;;
--keep-volumes)
KEEP_VOLUMES_FLAG="--keep-volumes"
;;
--verbose)
VERBOSE_FLAG="--verbose"
;;
--help)
show_help
exit 0
;;
*)
print_error "Unbekannter Parameter: $1"
show_help
exit 1
;;
esac
shift
done
# Header
print_colored "$MAGENTA" "╔═══════════════════════════════════════════════════════╗"
print_colored "$MAGENTA" "║ 🧹 MYP Bereinigung ║"
print_colored "$MAGENTA" "║ Docker-Ressourcen aufräumen ║"
print_colored "$MAGENTA" "╚═══════════════════════════════════════════════════════╝"
# Bestätigung anfordern (außer bei --force)
if [[ -z "$FORCE_FLAG" ]]; then
print_warning "WARNUNG: Diese Aktion wird alle MYP-Container, Images und Netzwerke entfernen!"
if [[ -z "$KEEP_VOLUMES_FLAG" ]]; then
print_warning "Auch alle Volumes (einschließlich Datenbanken) werden gelöscht!"
fi
read -p "Möchten Sie fortfahren? (j/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Jj]$ ]]; then
echo "Bereinigung abgebrochen."
exit 0
fi
fi
# Docker Verfügbarkeit prüfen
if ! docker info &> /dev/null; then
print_error "Docker ist nicht verfügbar oder läuft nicht."
exit 1
fi
# Aktuelle Docker Compose Services stoppen
print_step "Stoppe Docker Compose Services..."
{
COMPOSE_FILES=("docker-compose.yml")
if [[ -f "docker-compose.dev.yml" ]]; then
COMPOSE_FILES+=("docker-compose.dev.yml")
fi
if [[ -f "docker-compose.override.yml" ]]; then
COMPOSE_FILES+=("docker-compose.override.yml")
fi
COMPOSE_ARGS=()
for file in "${COMPOSE_FILES[@]}"; do
COMPOSE_ARGS+=("-f" "$file")
done
docker-compose "${COMPOSE_ARGS[@]}" down --remove-orphans &> /dev/null
print_success "Services gestoppt"
} || {
print_warning "Fehler beim Stoppen der Services"
}
# MYP-spezifische Container entfernen
print_step "Entferne MYP-Container..."
{
MYP_CONTAINERS=$(docker ps -a --filter "name=myp-" --format "{{.Names}}" 2>/dev/null || true)
if [[ -n "$MYP_CONTAINERS" ]]; then
echo "$MYP_CONTAINERS" | xargs docker rm -f &> /dev/null
print_success "MYP-Container entfernt: $MYP_CONTAINERS"
else
echo "Keine MYP-Container gefunden"
fi
} || {
print_warning "Fehler beim Entfernen der Container"
}
# MYP-spezifische Images entfernen
print_step "Entferne MYP-Images..."
{
MYP_IMAGES=$(docker images --filter "reference=*myp*" --format "{{.Repository}}:{{.Tag}}" 2>/dev/null || true)
if [[ -n "$MYP_IMAGES" ]]; then
echo "$MYP_IMAGES" | xargs docker rmi -f &> /dev/null
print_success "MYP-Images entfernt: $MYP_IMAGES"
else
echo "Keine MYP-Images gefunden"
fi
# Auch projektspezifische Images entfernen
PROJECT_IMAGES=$(docker images --filter "reference=projektarbeit-myp*" --format "{{.Repository}}:{{.Tag}}" 2>/dev/null || true)
if [[ -n "$PROJECT_IMAGES" ]]; then
echo "$PROJECT_IMAGES" | xargs docker rmi -f &> /dev/null
print_success "Projekt-Images entfernt: $PROJECT_IMAGES"
fi
} || {
print_warning "Fehler beim Entfernen der Images"
}
# MYP-Netzwerke entfernen
print_step "Entferne MYP-Netzwerke..."
{
MYP_NETWORKS=$(docker network ls --filter "name=myp" --format "{{.Name}}" 2>/dev/null || true)
if [[ -n "$MYP_NETWORKS" ]]; then
echo "$MYP_NETWORKS" | xargs docker network rm &> /dev/null
print_success "MYP-Netzwerke entfernt: $MYP_NETWORKS"
else
echo "Keine MYP-Netzwerke gefunden"
fi
} || {
print_warning "Fehler beim Entfernen der Netzwerke"
}
# Volumes entfernen (nur wenn nicht explizit ausgeschlossen)
if [[ -z "$KEEP_VOLUMES_FLAG" ]]; then
print_step "Entferne MYP-Volumes..."
{
MYP_VOLUMES=$(docker volume ls --filter "name=myp" --format "{{.Name}}" 2>/dev/null || true)
if [[ -n "$MYP_VOLUMES" ]]; then
echo "$MYP_VOLUMES" | xargs docker volume rm &> /dev/null
print_success "MYP-Volumes entfernt: $MYP_VOLUMES"
else
echo "Keine MYP-Volumes gefunden"
fi
# Auch projektspezifische Volumes
PROJECT_VOLUMES=$(docker volume ls --filter "name=projektarbeit-myp" --format "{{.Name}}" 2>/dev/null || true)
if [[ -n "$PROJECT_VOLUMES" ]]; then
echo "$PROJECT_VOLUMES" | xargs docker volume rm &> /dev/null
print_success "Projekt-Volumes entfernt: $PROJECT_VOLUMES"
fi
} || {
print_warning "Fehler beim Entfernen der Volumes"
}
else
print_warning "Volumes werden beibehalten (--keep-volumes gesetzt)"
fi
# Unbenutzte Ressourcen bereinigen
print_step "Bereinige unbenutzte Docker-Ressourcen..."
{
docker system prune -f &> /dev/null
print_success "System-Bereinigung abgeschlossen"
} || {
print_warning "Fehler bei der System-Bereinigung"
}
# Build-Cache bereinigen
print_step "Bereinige Build-Cache..."
{
docker builder prune -f &> /dev/null
print_success "Build-Cache bereinigt"
} || {
print_warning "Fehler beim Bereinigen des Build-Caches"
}
# Lokale Dateien bereinigen
print_step "Bereinige lokale temporäre Dateien..."
{
# Logs bereinigen
if [[ -d "logs" ]]; then
find logs -type f -delete 2>/dev/null || true
echo " Logs bereinigt"
fi
# Backend instance bereinigen (außer bei keep-volumes)
if [[ -z "$KEEP_VOLUMES_FLAG" && -d "backend/instance" ]]; then
find backend/instance -type f -delete 2>/dev/null || true
echo " Backend-Instance bereinigt"
fi
# Frontend build artifacts bereinigen
if [[ -d "frontend/.next" ]]; then
rm -rf frontend/.next 2>/dev/null || true
echo " Frontend-Build-Artifacts bereinigt"
fi
if [[ -d "frontend/out" ]]; then
rm -rf frontend/out 2>/dev/null || true
echo " Frontend-Output bereinigt"
fi
# Node modules cache bereinigen (optional)
if [[ -d "frontend/node_modules/.cache" ]]; then
rm -rf frontend/node_modules/.cache 2>/dev/null || true
echo " Frontend-Cache bereinigt"
fi
print_success "Lokale Dateien bereinigt"
} || {
print_warning "Fehler beim Bereinigen lokaler Dateien"
}
# Übersicht der verbliebenen Ressourcen (wenn Verbose)
if [[ -n "$VERBOSE_FLAG" ]]; then
print_step "Verbliebene Docker-Ressourcen:"
echo "Container:"
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" 2>/dev/null || echo "Keine Container"
echo -e "\nImages:"
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" 2>/dev/null || echo "Keine Images"
echo -e "\nVolumes:"
docker volume ls --format "table {{.Name}}\t{{.Driver}}" 2>/dev/null || echo "Keine Volumes"
echo -e "\nNetzwerke:"
docker network ls --format "table {{.Name}}\t{{.Driver}}" 2>/dev/null || echo "Keine Netzwerke"
fi
print_success "🎉 Bereinigung erfolgreich abgeschlossen!"
print_step "Empfohlene nächste Schritte:"
echo " 1. Neustart mit: ./infrastructure/scripts/start.sh"
echo " 2. Oder bei Problemen: ./infrastructure/scripts/start.sh dev --clean --no-cache"
# Speicherplatz-Ersparnis anzeigen
print_step "Docker System-Analyse:"
{
docker system df 2>/dev/null || print_warning "System-Analyse fehlgeschlagen"
}

View File

@ -1,242 +0,0 @@
# 🚀 MYP Starter-Skript (Windows PowerShell)
# Automatisierte Bereitstellung des MYP-Systems
param(
[Parameter(Position = 0)]
[ValidateSet("dev", "prod", "test")]
[string]$Environment = "dev",
[switch]$Clean,
[switch]$Verbose,
[switch]$NoCache
)
$ErrorActionPreference = "Stop"
# Farbkodierte Ausgabe
function Write-ColoredOutput {
param(
[string]$Message,
[string]$Color = "White"
)
Write-Host $Message -ForegroundColor $Color
}
function Write-Step {
param([string]$Message)
Write-ColoredOutput "🔧 $Message" "Cyan"
}
function Write-Success {
param([string]$Message)
Write-ColoredOutput "$Message" "Green"
}
function Write-Warning {
param([string]$Message)
Write-ColoredOutput "⚠️ $Message" "Yellow"
}
function Write-Error {
param([string]$Message)
Write-ColoredOutput "$Message" "Red"
}
# Header
Write-ColoredOutput @"
🖨 MYP - Manage your Printer
Starter-Skript
Umgebung: $($Environment.ToUpper().PadRight(12))
"@ "Magenta"
# Systemvoraussetzungen prüfen
Write-Step "Überprüfe Systemvoraussetzungen..."
# Docker prüfen
if (-not (Get-Command docker -ErrorAction SilentlyContinue)) {
Write-Error "Docker ist nicht installiert oder nicht im PATH verfügbar."
Write-Host "Bitte installieren Sie Docker Desktop: https://docs.docker.com/desktop/windows/"
exit 1
}
# Docker Daemon prüfen
try {
$dockerInfo = docker info 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Error "Docker Daemon läuft nicht. Bitte starten Sie Docker Desktop."
exit 1
}
}
catch {
Write-Error "Fehler beim Zugriff auf Docker: $_"
exit 1
}
Write-Success "Docker ist verfügbar und läuft"
# Git prüfen (für Entwicklungsumgebung)
if ($Environment -eq "dev" -and -not (Get-Command git -ErrorAction SilentlyContinue)) {
Write-Warning "Git ist nicht installiert. Empfohlen für Entwicklungsumgebung."
}
# Umgebungskonfiguration laden
$envFile = "infrastructure/environments/$Environment.env"
if (Test-Path $envFile) {
Write-Step "Lade Umgebungskonfiguration: $envFile"
Get-Content $envFile | ForEach-Object {
if ($_ -match '^([^#][^=]*?)=(.*)$') {
[Environment]::SetEnvironmentVariable($matches[1], $matches[2], "Process")
if ($Verbose) {
Write-Host " $($matches[1])=$($matches[2])"
}
}
}
} else {
Write-Warning "Umgebungsdatei nicht gefunden: $envFile"
Write-Host "Verwende Standardkonfiguration..."
}
# Bereinigung wenn angefordert
if ($Clean) {
Write-Step "Führe Bereinigung durch..."
& "infrastructure/scripts/cleanup.ps1" -Force
if ($LASTEXITCODE -ne 0) {
Write-Error "Bereinigung fehlgeschlagen"
exit 1
}
}
# SSH-Server aktivieren (Windows)
Write-Step "Konfiguriere SSH-Server..."
try {
# OpenSSH Server Feature prüfen und installieren
$sshFeature = Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
if ($sshFeature.State -ne 'Installed') {
Write-Step "Installiere OpenSSH Server..."
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
}
# SSH Service konfigurieren
Set-Service -Name sshd -StartupType Automatic
Start-Service sshd
# Firewall-Regel erstellen
$firewallRule = Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -ErrorAction SilentlyContinue
if (-not $firewallRule) {
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (TCP-In)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
}
Write-Success "SSH-Server aktiviert und konfiguriert"
} catch {
Write-Warning "SSH-Server Konfiguration fehlgeschlagen: $_"
}
# Docker Compose Datei bestimmen
$composeFiles = @("docker-compose.yml")
if ($Environment -eq "dev") {
$composeFiles += "docker-compose.dev.yml"
}
if (Test-Path "docker-compose.override.yml") {
$composeFiles += "docker-compose.override.yml"
}
$composeArgs = $composeFiles | ForEach-Object { "-f", $_ }
# Build Parameter
$buildArgs = @()
if ($NoCache) {
$buildArgs += "--no-cache"
}
# Container erstellen und starten
Write-Step "Erstelle und starte Container..."
Write-Host "Verwende Compose-Dateien: $($composeFiles -join ', ')"
try {
# Images bauen
if ($buildArgs.Count -gt 0) {
docker-compose @composeArgs build @buildArgs
} else {
docker-compose @composeArgs build
}
if ($LASTEXITCODE -ne 0) {
Write-Error "Docker Build fehlgeschlagen"
exit 1
}
# Services starten
docker-compose @composeArgs up -d
if ($LASTEXITCODE -ne 0) {
Write-Error "Docker Compose Start fehlgeschlagen"
exit 1
}
Write-Success "Container erfolgreich gestartet"
} catch {
Write-Error "Fehler beim Starten der Container: $_"
exit 1
}
# Warten auf Service-Bereitschaft
Write-Step "Warte auf Service-Bereitschaft..."
$maxWaitTime = 120 # Sekunden
$waitInterval = 5
$elapsed = 0
while ($elapsed -lt $maxWaitTime) {
try {
$backendHealth = Invoke-RestMethod -Uri "http://localhost:5000/health" -TimeoutSec 5 -ErrorAction SilentlyContinue
$frontendHealth = Invoke-WebRequest -Uri "http://localhost:3000" -TimeoutSec 5 -ErrorAction SilentlyContinue
if ($backendHealth -and $frontendHealth) {
Write-Success "Alle Services sind bereit!"
break
}
} catch {
# Services noch nicht bereit
}
Write-Host "." -NoNewline
Start-Sleep $waitInterval
$elapsed += $waitInterval
}
if ($elapsed -ge $maxWaitTime) {
Write-Warning "Timeout beim Warten auf Services erreicht"
Write-Host "Überprüfen Sie die Container-Logs mit: docker-compose logs"
}
# Status-Ausgabe
Write-Step "Container-Status:"
docker-compose @composeArgs ps
Write-Step "Service-URLs:"
Write-ColoredOutput "🌐 Web Interface: http://localhost (oder https://localhost)" "Green"
Write-ColoredOutput "🔧 Backend API: http://localhost:5000" "Green"
Write-ColoredOutput "⚛️ Frontend: http://localhost:3000" "Green"
if ($Environment -eq "dev") {
Write-ColoredOutput "📊 Monitoring: http://localhost:9090 (Prometheus)" "Blue"
Write-ColoredOutput "📈 Dashboards: http://localhost:3001 (Grafana)" "Blue"
}
Write-Step "Nützliche Befehle:"
Write-Host " Logs anzeigen: docker-compose logs -f"
Write-Host " Services stoppen: docker-compose down"
Write-Host " Status prüfen: docker-compose ps"
Write-Host " Neustart: docker-compose restart"
Write-Success "MYP-System erfolgreich gestartet! 🎉"
# Optional: Automatisch Browser öffnen
if ($Environment -eq "dev") {
$openBrowser = Read-Host "Browser öffnen? (j/N)"
if ($openBrowser -eq "j" -or $openBrowser -eq "J") {
Start-Process "http://localhost"
}
}

View File

@ -1,296 +0,0 @@
#!/bin/bash
# 🚀 MYP Starter-Skript (Linux/macOS)
# Automatisierte Bereitstellung des MYP-Systems
set -e
# Standardwerte
ENVIRONMENT="${1:-dev}"
CLEAN_FLAG=""
VERBOSE_FLAG=""
NO_CACHE_FLAG=""
# Farbkodierte Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
print_colored() {
local color="$1"
local message="$2"
echo -e "${color}${message}${NC}"
}
print_step() {
print_colored "$CYAN" "🔧 $1"
}
print_success() {
print_colored "$GREEN" "$1"
}
print_warning() {
print_colored "$YELLOW" "⚠️ $1"
}
print_error() {
print_colored "$RED" "$1"
}
# Hilfefunktion
show_help() {
echo "Verwendung: $0 [UMGEBUNG] [OPTIONEN]"
echo ""
echo "UMGEBUNG:"
echo " dev Entwicklungsumgebung (Standard)"
echo " prod Produktionsumgebung"
echo " test Testumgebung"
echo ""
echo "OPTIONEN:"
echo " --clean Bereinigung vor Start"
echo " --verbose Ausführliche Ausgabe"
echo " --no-cache Docker Build ohne Cache"
echo " --help Diese Hilfe anzeigen"
echo ""
echo "Beispiele:"
echo " $0 dev --clean"
echo " $0 prod --no-cache"
}
# Parameter verarbeiten
while [[ $# -gt 0 ]]; do
case $1 in
dev|prod|test)
ENVIRONMENT="$1"
;;
--clean)
CLEAN_FLAG="--clean"
;;
--verbose)
VERBOSE_FLAG="--verbose"
;;
--no-cache)
NO_CACHE_FLAG="--no-cache"
;;
--help)
show_help
exit 0
;;
*)
print_error "Unbekannter Parameter: $1"
show_help
exit 1
;;
esac
shift
done
# Umgebung validieren
if [[ ! "$ENVIRONMENT" =~ ^(dev|prod|test)$ ]]; then
print_error "Ungültige Umgebung: $ENVIRONMENT"
show_help
exit 1
fi
# Header
print_colored "$MAGENTA" "╔═══════════════════════════════════════════════════════╗"
print_colored "$MAGENTA" "║ 🖨️ MYP - Manage your Printer ║"
print_colored "$MAGENTA" "║ Starter-Skript ║"
print_colored "$MAGENTA" "║ Umgebung: $(printf "%-12s" "${ENVIRONMENT^^}")"
print_colored "$MAGENTA" "╚═══════════════════════════════════════════════════════╝"
# Systemvoraussetzungen prüfen
print_step "Überprüfe Systemvoraussetzungen..."
# Docker prüfen
if ! command -v docker &> /dev/null; then
print_error "Docker ist nicht installiert oder nicht im PATH verfügbar."
echo "Installation:"
echo " Ubuntu/Debian: sudo apt-get install docker.io"
echo " CentOS/RHEL: sudo yum install docker"
echo " macOS: brew install docker oder Docker Desktop"
exit 1
fi
# Docker Daemon prüfen
if ! docker info &> /dev/null; then
print_error "Docker Daemon läuft nicht."
echo "Starten Sie den Docker Service:"
echo " Linux: sudo systemctl start docker"
echo " macOS: Docker Desktop starten"
exit 1
fi
print_success "Docker ist verfügbar und läuft"
# Docker Compose prüfen
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose ist nicht installiert."
echo "Installation: https://docs.docker.com/compose/install/"
exit 1
fi
# Git prüfen (für Entwicklungsumgebung)
if [[ "$ENVIRONMENT" == "dev" ]] && ! command -v git &> /dev/null; then
print_warning "Git ist nicht installiert. Empfohlen für Entwicklungsumgebung."
fi
# Berechtigung für ausführende Skripte setzen
chmod +x infrastructure/scripts/*.sh 2>/dev/null || true
# Umgebungskonfiguration laden
ENV_FILE="infrastructure/environments/${ENVIRONMENT}.env"
if [[ -f "$ENV_FILE" ]]; then
print_step "Lade Umgebungskonfiguration: $ENV_FILE"
set -a # Automatisch alle Variablen exportieren
source "$ENV_FILE"
set +a
if [[ -n "$VERBOSE_FLAG" ]]; then
echo "Geladene Umgebungsvariablen:"
grep -E '^[^#].*=' "$ENV_FILE" | sed 's/^/ /'
fi
else
print_warning "Umgebungsdatei nicht gefunden: $ENV_FILE"
echo "Verwende Standardkonfiguration..."
fi
# Bereinigung wenn angefordert
if [[ -n "$CLEAN_FLAG" ]]; then
print_step "Führe Bereinigung durch..."
if [[ -f "infrastructure/scripts/cleanup.sh" ]]; then
bash infrastructure/scripts/cleanup.sh --force
else
print_warning "Bereinigungs-Skript nicht gefunden"
fi
fi
# SSH-Server aktivieren (Linux)
print_step "Konfiguriere SSH-Server..."
if command -v systemctl &> /dev/null; then
# SystemD-basierte Systeme
if systemctl is-enabled ssh &> /dev/null || systemctl is-enabled sshd &> /dev/null; then
sudo systemctl enable ssh 2>/dev/null || sudo systemctl enable sshd 2>/dev/null || true
sudo systemctl start ssh 2>/dev/null || sudo systemctl start sshd 2>/dev/null || true
print_success "SSH-Server aktiviert"
else
print_warning "SSH-Server ist nicht installiert"
echo "Installation:"
echo " Ubuntu/Debian: sudo apt-get install openssh-server"
echo " CentOS/RHEL: sudo yum install openssh-server"
fi
elif [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
if sudo systemsetup -getremotelogin | grep -q "On"; then
print_success "SSH-Server ist bereits aktiviert"
else
sudo systemsetup -setremotelogin on
print_success "SSH-Server aktiviert"
fi
else
print_warning "SSH-Server Konfiguration für dieses System nicht unterstützt"
fi
# Docker Compose Dateien bestimmen
COMPOSE_FILES=("docker-compose.yml")
if [[ "$ENVIRONMENT" == "dev" ]]; then
COMPOSE_FILES+=("docker-compose.dev.yml")
fi
if [[ -f "docker-compose.override.yml" ]]; then
COMPOSE_FILES+=("docker-compose.override.yml")
fi
# Compose-Argumente erstellen
COMPOSE_ARGS=()
for file in "${COMPOSE_FILES[@]}"; do
COMPOSE_ARGS+=("-f" "$file")
done
# Build-Parameter
BUILD_ARGS=()
if [[ -n "$NO_CACHE_FLAG" ]]; then
BUILD_ARGS+=("--no-cache")
fi
# Container erstellen und starten
print_step "Erstelle und starte Container..."
echo "Verwende Compose-Dateien: ${COMPOSE_FILES[*]}"
# Images bauen
if [[ ${#BUILD_ARGS[@]} -gt 0 ]]; then
docker-compose "${COMPOSE_ARGS[@]}" build "${BUILD_ARGS[@]}"
else
docker-compose "${COMPOSE_ARGS[@]}" build
fi
# Services starten
docker-compose "${COMPOSE_ARGS[@]}" up -d
print_success "Container erfolgreich gestartet"
# Warten auf Service-Bereitschaft
print_step "Warte auf Service-Bereitschaft..."
MAX_WAIT_TIME=120 # Sekunden
WAIT_INTERVAL=5
ELAPSED=0
while [[ $ELAPSED -lt $MAX_WAIT_TIME ]]; do
if curl -s http://localhost:5000/health > /dev/null 2>&1 && \
curl -s http://localhost:3000 > /dev/null 2>&1; then
echo ""
print_success "Alle Services sind bereit!"
break
fi
echo -n "."
sleep $WAIT_INTERVAL
ELAPSED=$((ELAPSED + WAIT_INTERVAL))
done
if [[ $ELAPSED -ge $MAX_WAIT_TIME ]]; then
echo ""
print_warning "Timeout beim Warten auf Services erreicht"
echo "Überprüfen Sie die Container-Logs mit: docker-compose logs"
fi
# Status-Ausgabe
print_step "Container-Status:"
docker-compose "${COMPOSE_ARGS[@]}" ps
print_step "Service-URLs:"
print_colored "$GREEN" "🌐 Web Interface: http://localhost (oder https://localhost)"
print_colored "$GREEN" "🔧 Backend API: http://localhost:5000"
print_colored "$GREEN" "⚛️ Frontend: http://localhost:3000"
if [[ "$ENVIRONMENT" == "dev" ]]; then
print_colored "$BLUE" "📊 Monitoring: http://localhost:9090 (Prometheus)"
print_colored "$BLUE" "📈 Dashboards: http://localhost:3001 (Grafana)"
fi
print_step "Nützliche Befehle:"
echo " Logs anzeigen: docker-compose logs -f"
echo " Services stoppen: docker-compose down"
echo " Status prüfen: docker-compose ps"
echo " Neustart: docker-compose restart"
print_success "MYP-System erfolgreich gestartet! 🎉"
# Optional: Automatisch Browser öffnen
if [[ "$ENVIRONMENT" == "dev" ]]; then
read -p "Browser öffnen? (j/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Jj]$ ]]; then
if command -v xdg-open &> /dev/null; then
xdg-open http://localhost
elif command -v open &> /dev/null; then
open http://localhost
else
print_warning "Kein Befehl zum Öffnen des Browsers gefunden"
fi
fi
fi

View File

@ -1,229 +0,0 @@
# 🔄 MYP Reverse Proxy Konfiguration
# Caddy Server für Load Balancing und SSL Termination
{
# Globale Optionen
debug
auto_https off
email admin@mercedes-benz.com
# Lokale Zertifikate für Entwicklung
local_certs
}
# Hauptdomain-Konfiguration
{$CADDY_HOST:localhost}, {$CADDY_DOMAIN:myp.local} {
# === API-Routen ===
# Backend API Endpunkte
@api {
path /api/*
path /health
path /auth/*
path /swagger/*
path /docs/*
}
handle @api {
# API-Prefix entfernen für Backend-Weiterleitung
uri strip_prefix /api
# Backend-Server (Load Balancing für Hochverfügbarkeit)
reverse_proxy {
to backend:5000
# Health Checks
health_uri /health
health_interval 30s
health_timeout 10s
# Load Balancing
lb_policy round_robin
# Fehlerbehandlung
fail_duration 30s
max_fails 3
# Header-Weiterleitung
header_up Host {upstream_hostport}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
header_up X-Forwarded-Host {host}
}
}
# === OAuth und Authentifizierung ===
@oauth {
path /auth/login/callback*
path /auth/logout*
path /auth/verify*
}
handle @oauth {
# Keine Caches für Auth-Endpunkte
header Cache-Control "no-cache, no-store, must-revalidate"
header Pragma "no-cache"
header Expires "0"
reverse_proxy frontend:3000
}
# === Statische Assets ===
@static {
path *.js *.css *.png *.jpg *.jpeg *.gif *.svg *.ico *.woff *.woff2 *.ttf *.eot
path /_next/static/*
path /static/*
path /assets/*
}
handle @static {
# Aggressive Caching für statische Inhalte
header Cache-Control "public, max-age=31536000, immutable"
header Vary "Accept-Encoding"
# Kompression
encode gzip zstd
reverse_proxy frontend:3000
}
# === Frontend-Anwendung ===
handle {
# Dynamische Inhalte
header Cache-Control "no-cache, no-store, must-revalidate"
header Pragma "no-cache"
# Frontend-Server
reverse_proxy {
to frontend:3000
# Health Checks
health_uri /
health_interval 30s
health_timeout 10s
# Header-Weiterleitung
header_up Host {upstream_hostport}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
header_up X-Forwarded-Host {host}
}
}
# === Sicherheitsheader ===
header {
# HTTPS Durchsetzung
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Content Security Policy
Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' ws: wss:; frame-src 'none'; object-src 'none'; base-uri 'self'"
# XSS-Schutz
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
X-XSS-Protection "1; mode=block"
# Referrer Policy
Referrer-Policy "strict-origin-when-cross-origin"
# Feature Policy / Permissions Policy
Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"
# Server-Information ausblenden
-Server
-X-Powered-By
}
# === Logging ===
log {
output file /var/log/caddy/myp-access.log {
roll_size 100mb
roll_keep 5
roll_keep_for 720h
}
format json
level INFO
}
# === Rate Limiting ===
rate_limit {
zone static_files {
key {remote_host}
events 1000
window 1m
}
zone api_calls {
key {remote_host}
events 100
window 1m
}
}
# === Fehlerbehandlung ===
handle_errors {
@502 expression `{http.error.status_code} == 502`
handle @502 {
rewrite * /errors/502.html
file_server {
root /usr/share/caddy/errors
}
}
@503 expression `{http.error.status_code} == 503`
handle @503 {
rewrite * /errors/503.html
file_server {
root /usr/share/caddy/errors
}
}
}
# === Development Features ===
# WebSocket Support für Hot Reload
@websocket {
header Connection *Upgrade*
header Upgrade websocket
}
handle @websocket {
reverse_proxy frontend:3000
}
}
# === Monitoring Endpunkte (nur Entwicklung) ===
monitoring.{$CADDY_DOMAIN:myp.local} {
# Prometheus Metriken
handle /metrics {
reverse_proxy prometheus:9090
}
# Grafana Dashboards
handle /grafana/* {
uri strip_prefix /grafana
reverse_proxy grafana:3000
}
# Caddy Admin API
handle /admin/* {
reverse_proxy localhost:2019
}
# Basis-Authentifizierung für Monitoring
basicauth /* {
admin $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNqBZnp6N5i8rGjW5h3qK4/tW
}
}
# === Gesundheitsprüfungen ===
health.{$CADDY_DOMAIN:myp.local} {
respond /health "OK" 200
handle /backend/health {
reverse_proxy backend:5000/health
}
handle /frontend/health {
reverse_proxy frontend:3000
}
}