File size: 2,558 Bytes
097fb32
d3d49b5
097fb32
d3d49b5
 
 
 
 
097fb32
d3d49b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f72b0fb
d3d49b5
 
 
 
f72b0fb
 
097fb32
f72b0fb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d3d49b5
097fb32
f72b0fb
d3d49b5
 
097fb32
d3d49b5
 
 
 
 
 
 
 
 
 
 
 
 
097fb32
d3d49b5
 
 
 
 
 
 
 
f72b0fb
 
 
 
 
d3d49b5
 
 
 
 
097fb32
d3d49b5
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/sh
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