32 lines
1.1 KiB
Bash
32 lines
1.1 KiB
Bash
#!/usr/bin/env sh
|
||
|
||
# 不 set -e,避免任一进程启动失败时直接退出导致容器无服务
|
||
PORT="${PORT:-3000}"
|
||
BACKEND_PORT="${BACKEND_PORT:-8000}"
|
||
|
||
# 先启前端再启后端,保证至少前端能绑定端口;任一退出不杀另一个
|
||
echo "Starting Node static frontend on 0.0.0.0:${PORT}..."
|
||
HOST=0.0.0.0 PORT="${PORT}" BACKEND_PORT="${BACKEND_PORT}" node dist/server.js &
|
||
FRONTEND_PID=$!
|
||
|
||
echo "Starting FastAPI backend on 0.0.0.0:${BACKEND_PORT}..."
|
||
uvicorn backend.main:app --host 0.0.0.0 --port "${BACKEND_PORT}" &
|
||
BACKEND_PID=$!
|
||
|
||
sleep 2
|
||
if ! kill -0 "${FRONTEND_PID}" 2>/dev/null; then
|
||
echo "WARN: frontend (node) exited, check logs (e.g. node dist/server.js)"
|
||
fi
|
||
if ! kill -0 "${BACKEND_PID}" 2>/dev/null; then
|
||
echo "WARN: backend (uvicorn) exited, check logs"
|
||
fi
|
||
|
||
trap 'echo "Stopping services..."; kill ${BACKEND_PID} ${FRONTEND_PID} 2>/dev/null || true' INT TERM
|
||
|
||
# 两进程都退出才结束,避免一个崩了把另一个也杀掉
|
||
while kill -0 "${FRONTEND_PID}" 2>/dev/null || kill -0 "${BACKEND_PID}" 2>/dev/null; do
|
||
wait -n "${FRONTEND_PID}" "${BACKEND_PID}" 2>/dev/null || true
|
||
sleep 1
|
||
done
|
||
|