changes to the launch.sh to account for the port managment

This commit is contained in:
2026-08-26 19:54:47 +02:00
parent 7a52aeed2c
commit aa870fcfb4
+30 -15
View File
@@ -180,6 +180,27 @@ build_website_image() {
TARGET_SYSTEM_DIR="/opt/Inventarsystem"
TARGET_SCRIPT="$TARGET_SYSTEM_DIR/manage-tenant.sh"
get_free_port() {
local requested_port="${1:-10002}"
local used_ports
# Belegte Ports aus manage-tenant.sh list auslesen
used_ports=$( (cd "$TARGET_SYSTEM_DIR" && "$TARGET_SCRIPT" list 2>/dev/null) | grep -oE '[0-9]{4,5}' || true )
local check_port="$requested_port"
if ! [[ "$check_port" =~ ^[0-9]+$ ]]; then
check_port=10002
fi
# Falls der Port schon vergeben ist, schrittweise erhöhen bis ein freier Port gefunden wird
while echo "$used_ports" | grep -q -w "$check_port"; do
echo "[INFO] Port $check_port ist belegt. Prüfe $(($check_port + 1))..." >&2
check_port=$((check_port + 1))
done
echo "$check_port"
}
watcher_loop() {
local trigger_dir="$1"
echo "[INFO] Tenant Watcher gestartet. Lausche in $trigger_dir..."
@@ -199,7 +220,6 @@ watcher_loop() {
PASS=$(jq -r '.password // empty' "$file" 2>/dev/null || true)
MODULES=$(jq -r '.module_config // empty' "$file" 2>/dev/null || true)
else
# Fallback, falls jq nicht installiert ist
ACTION=$(grep -o '"action": *"[^"]*"' "$file" | cut -d'"' -f4 || echo "add")
[ -z "$ACTION" ] && ACTION="add"
SLUG=$(grep -o '"slug": *"[^"]*"' "$file" | cut -d'"' -f4 || true)
@@ -216,16 +236,18 @@ watcher_loop() {
case "$ACTION" in
"add")
if [ -n "$PORT" ] && [ -n "$PASS" ]; then
if [ -n "$PASS" ]; then
# Freien Port über `manage-tenant.sh list` ermitteln
ACTUAL_PORT=$(get_free_port "$PORT")
echo "[INFO] Verwende Port $ACTUAL_PORT für Tenant $SLUG"
# 1. Tenant erstellen
if (cd "$TARGET_SYSTEM_DIR" && "$TARGET_SCRIPT" add "$SLUG" "$PORT" "$PASS"); then
echo "[SUCCESS] Tenant bereitgestellt: $SLUG"
if (cd "$TARGET_SYSTEM_DIR" && "$TARGET_SCRIPT" add "$SLUG" "$ACTUAL_PORT" "$PASS"); then
echo "[SUCCESS] Tenant bereitgestellt: $SLUG (Port: $ACTUAL_PORT)"
# 2. Wenn Module übergeben wurden, diese im Anschluss konfigurieren
if [ -n "$MODULES" ]; then
echo "[INFO] Konfiguriere Module für $SLUG: $MODULES"
# Hinweis: $MODULES wird hier bewusst ohne Anführungszeichen übergeben,
# damit "inventory=on library=on" in separate Parameter aufgeteilt wird.
# shellcheck disable=SC2086
if (cd "$TARGET_SYSTEM_DIR" && "$TARGET_SCRIPT" module "$SLUG" $MODULES); then
echo "[SUCCESS] Module für $SLUG erfolgreich konfiguriert."
@@ -237,7 +259,7 @@ watcher_loop() {
echo "[ERROR] Fehler beim Bereitstellen von: $SLUG" >&2
fi
else
echo "[ERROR] Fehlende Port/Passwort-Daten für add in $file" >&2
echo "[ERROR] Fehlendes Passwort für add in $file" >&2
fi
;;
"remove")
@@ -259,7 +281,7 @@ watcher_loop() {
;;
esac
# Nach Verarbeitung Datei restlos löschen
# Nach Verarbeitung Trigger-Datei löschen
rm -f "$file"
done
sleep 2
@@ -271,13 +293,11 @@ start_tenant_watcher() {
local pid_file="$SCRIPT_DIR/.watcher.pid"
local log_file="$SCRIPT_DIR/watcher.log"
# Erstelle Trigger-Verzeichnis, falls es nicht existiert
if [ ! -d "$trigger_dir" ]; then
mkdir -p "$trigger_dir"
chmod 777 "$trigger_dir"
fi
# Beende alten Watcher, falls dieser noch läuft
if [ -f "$pid_file" ]; then
local old_pid
old_pid=$(cat "$pid_file")
@@ -287,11 +307,9 @@ start_tenant_watcher() {
fi
fi
# Starte den Watcher im Hintergrund
echo "Starte asynchronen Tenant-Watcher im Hintergrund..."
watcher_loop "$trigger_dir" >> "$log_file" 2>&1 &
# Speichere die PID
echo $! > "$pid_file"
echo "Watcher läuft! Logs findest du in: $log_file"
}
@@ -311,7 +329,6 @@ echo " DEV_HOSTS_REFRESH_INTERVAL=$DEV_HOSTS_REFRESH_INTERVAL"
ensure_mongo_secrets
# Ensure required runtime files exist before building
if [ ! -f "$SCRIPT_DIR/gunicorn.conf.py" ]; then
echo "[FEHLER] gunicorn.conf.py fehlt in $SCRIPT_DIR. Bitte prüfen." >&2
exit 2
@@ -327,7 +344,6 @@ wait_for_mongo_ready
ensure_mongo_app_user
compose up -d --no-deps website
# Wait for website to become healthy
check_url="http://localhost:4999"
timeout_seconds=60
interval=2
@@ -355,5 +371,4 @@ fi
echo "Website stack is running on http://localhost:4999"
echo "Provisioning creates self-signed certs per subdomain when needed."
# STARTET DEN WATCHER DIREKT HIER IM SCRIPT
start_tenant_watcher