#!/usr/bin/env bash # Startet die App unveraendert (bindet auf localhost:APP_PORT) und stellt einen # internen nginx davor, der den Host-Header auf "localhost" umschreibt. # # WARUM nginx statt socat: .NET-HttpListener bedient den Prefix # http://localhost:APP_PORT/ NUR bei Host: localhost. socat (reiner TCP-Proxy) # reicht den originalen Host-Header durch -> von aussen 404. nginx schreibt den # Host-Header um -> jeder Zugriffsweg funktioniert, ohne den App-Code zu aendern. set -e : "${APP_PORT:=8077}" # App im Hintergrund starten. -NoBrowser: im Container kein Desktop/open. pwsh -NoProfile -File /app/Start.ps1 -NoBrowser -Port "${APP_PORT}" & APP_PID=$! # Best-effort warten, bis der App-Listener antwortet (IPv6 oder IPv4). # nginx wuerde sonst kurz 502 liefern, bis die App oben ist. for i in $(seq 1 30); do if (exec 3<>"/dev/tcp/::1/${APP_PORT}") 2>/dev/null; then exec 3>&-; break; fi if (exec 3<>"/dev/tcp/127.0.0.1/${APP_PORT}") 2>/dev/null; then exec 3>&-; break; fi kill -0 "$APP_PID" 2>/dev/null || { echo "[entrypoint] App-Prozess beendet - Abbruch."; wait "$APP_PID"; exit $?; } sleep 1 done echo "[entrypoint] Starte nginx (Host-Rewrite -> localhost) auf :8080" nginx -g 'daemon off;' & # Am Leben des App-Prozesses haengen (Container endet, wenn die App endet). wait "$APP_PID"