changes to the launch.sh to account for the port managment
This commit is contained in:
+30
-15
@@ -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
|
||||
Reference in New Issue
Block a user