| set -eu | |
| export PORT="${PORT:-7860}" | |
| export STEALTH_PORT="${STEALTH_PORT:-3011}" | |
| export ENABLE_STEALTH="${ENABLE_STEALTH:-false}" | |
| export PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/ms-playwright}" | |
| export FULL_APP_RESTART_INTERVAL="${FULL_APP_RESTART_INTERVAL:-3000}" | |
| echo "[start] PORT=$PORT" | |
| echo "[start] ENABLE_STEALTH=$ENABLE_STEALTH" | |
| echo "[start] STEALTH_PORT=$STEALTH_PORT" | |
| echo "[start] FULL_APP_RESTART_INTERVAL=$FULL_APP_RESTART_INTERVAL" | |
| shutdown_children() { | |
| echo "[start] stopping child processes..." | |
| if [ -n "${MAIN_PID:-}" ]; then | |
| kill "$MAIN_PID" 2>/dev/null || true | |
| fi | |
| if [ -n "${STEALTH_PID:-}" ]; then | |
| kill "$STEALTH_PID" 2>/dev/null || true | |
| fi | |
| wait 2>/dev/null || true | |
| } | |
| trap 'shutdown_children; exit 0' INT TERM | |
| while true; do | |
| echo "[start] launching app stack..." | |
| unset STEALTH_PID | |
| unset MAIN_PID | |
| unset TIMER_PID | |
| if [ "$ENABLE_STEALTH" = "true" ]; then | |
| export STEALTH_PROXY="${STEALTH_PROXY:-http://127.0.0.1:$STEALTH_PORT}" | |
| echo "[start] starting stealth-proxy at $STEALTH_PROXY" | |
| PORT="$STEALTH_PORT" node /app/stealth-proxy/index.js & | |
| STEALTH_PID=$! | |
| echo "[start] waiting for stealth-proxy to be ready..." | |
| READY=false | |
| for i in $(seq 1 30); do | |
| if wget -qO- "http://127.0.0.1:$STEALTH_PORT/health" 2>/dev/null | grep -q '"ok"\|"restarting"\|"initializing"'; then | |
| READY=true | |
| break | |
| fi | |
| sleep 2 | |
| done | |
| if [ "$READY" = "true" ]; then | |
| echo "[start] stealth-proxy responded on port $STEALTH_PORT" | |
| else | |
| echo "[start] warning: stealth-proxy did not become ready in time" | |
| fi | |
| fi | |
| echo "[start] starting main service on port $PORT..." | |
| node /app/dist/index.js & | |
| MAIN_PID=$! | |
| echo "[start] main pid=$MAIN_PID" | |
| if [ -n "${STEALTH_PID:-}" ]; then | |
| echo "[start] stealth pid=$STEALTH_PID" | |
| fi | |
| ( | |
| sleep "$FULL_APP_RESTART_INTERVAL" | |
| echo "[start] scheduled full app restart triggered" | |
| if [ -n "${MAIN_PID:-}" ]; then | |
| kill "$MAIN_PID" 2>/dev/null || true | |
| fi | |
| if [ -n "${STEALTH_PID:-}" ]; then | |
| kill "$STEALTH_PID" 2>/dev/null || true | |
| fi | |
| ) & | |
| TIMER_PID=$! | |
| set +e | |
| wait "$MAIN_PID" | |
| MAIN_EXIT=$? | |
| set -e | |
| echo "[start] main service exited with code $MAIN_EXIT" | |
| if [ -n "${TIMER_PID:-}" ]; then | |
| kill "$TIMER_PID" 2>/dev/null || true | |
| fi | |
| if [ -n "${STEALTH_PID:-}" ]; then | |
| kill "$STEALTH_PID" 2>/dev/null || true | |
| wait "$STEALTH_PID" 2>/dev/null || true | |
| fi | |
| echo "[start] app stack stopped, restarting in 3s..." | |
| sleep 3 | |
| done |