#!/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