📝 'feat(infrastructure): Cleanup scripts and service files'
This commit is contained in:
parent
b98e33f28f
commit
1ce3b5fc91
@ -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.
|
@ -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."
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
||||
}
|
@ -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
|
229
proxy/Caddyfile
229
proxy/Caddyfile
@ -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
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user