diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 3a9e0f0..1676651 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,30 +1,51 @@ #!/bin/sh -set -e +# 关闭 set -e 才能执行最后的清理逻辑 +set +e -# 启动 Dart 后端 (内部端口 8081) +# --- 1. 后端配置 --- echo "Starting Dart backend on port 8081..." export PORT=8081 +# 确保数据目录存在(根据你之前的日志) +mkdir -p /app/data /app/cache /app/bin/server & BACKEND_PID=$! -# 等待后端启动 +# 等待后端稍微启动一下 sleep 2 -# 启动前端 (Node.js SSR, 端口 8080) +# --- 2. 前端配置 --- echo "Starting frontend on port 8080..." export PORT=8080 export HOST=0.0.0.0 +# 指向本地回环地址,因为前后端在同一个容器内 export BACKEND_URL=http://127.0.0.1:8081 + cd /app/web/build + +# 启动前端并放到后台 node index.js & FRONTEND_PID=$! -# 捕获退出信号,优雅关闭两个服务 +# --- 3. 信号捕获 (修复了 SIGTERM 报错) --- trap "echo 'Shutting down...'; kill $BACKEND_PID $FRONTEND_PID 2>/dev/null; exit 0" TERM INT -# 等待任意进程退出 -wait -n $BACKEND_PID $FRONTEND_PID +echo "Both services are running. Monitoring..." -# 如果有一个进程退出,杀死另一个 +# --- 4. 运行监控 --- +# 因为 sh 没有 wait -n,我们用循环检查进程是否存在 +while true; do + if ! kill -0 $BACKEND_PID 2>/dev/null; then + echo "Backend (Dart) exited unexpectedly." + break + fi + if ! kill -0 $FRONTEND_PID 2>/dev/null; then + echo "Frontend (Node.js) exited unexpectedly." + break + fi + sleep 2 +done + +# --- 5. 清理退出 --- +echo "Cleaning up processes..." kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true exit 1 \ No newline at end of file