背景: - dev.sh 会把仓库根 .env 的变量全部导出给子进程,其中 VITE_PUBLIC_DEMO_SESSION=true 被 Vite 读取后启用演示会话:登录写入 假 token,进入 /users 后真实接口 401、刷新失败即清会话回登录页; - 后台启动后终端看不到运行日志,不利于排查。 改动: - dev.sh 不再向子进程导出 VITE_*,前端环境仍由 Vite 自己管理; - .env.example 的 VITE_PUBLIC_DEMO_SESSION 默认改为 false(本地 .env / .env.local 同步); - ./dev.sh 默认启动后前台跟随日志(Ctrl+C 停止全部),新增 -d/--detach 后台模式;非交互环境仍默认后台; - README 同步脚本用法。 影响面: - 仅开发脚本与示例环境;生产与 CI 不涉及;演示会话仍可通过显式 VITE_PUBLIC_DEMO_SESSION=true 开启。 回滚方式: - 回滚本提交即恢复后台启动与 VITE_* 透传行为。 验证证据: - 浏览器登录会真实请求 POST /api/v1/auth/login,错误账号返回 「账号或密码不正确」; - 真实账号登录后停留在 /users 并加载 9 条成员,不再回跳登录页; - ./dev.sh -f 持续输出 api/web/worker 日志,SIGTERM 后服务与端口 全部释放; - bash -n dev.sh 与 pnpm format:check 通过。
This commit is contained in:
1 parent
4f8f7c587d
commit
2c8dd5040f
3 files changed
+23
-6
No files matched your search
+1
-1
@@ -45,7 +45,7 @@ WORKER_CONCURRENCY=2
|
|||||||
# ---------- 前端(只能暴露 VITE_PUBLIC_* 前缀,ENV-07) ----------
|
# ---------- 前端(只能暴露 VITE_PUBLIC_* 前缀,ENV-07) ----------
|
||||||
VITE_PUBLIC_API_BASE_URL=http://127.0.0.1:3000/api/v1
|
VITE_PUBLIC_API_BASE_URL=http://127.0.0.1:3000/api/v1
|
||||||
# A0 登录壳没有接后端鉴权,置 true 时登录页写入本地演示会话以便查看布局;A1 接入真实登录后删除。
|
# A0 登录壳没有接后端鉴权,置 true 时登录页写入本地演示会话以便查看布局;A1 接入真实登录后删除。
|
||||||
VITE_PUBLIC_DEMO_SESSION=true
|
VITE_PUBLIC_DEMO_SESSION=false
|
||||||
|
|
||||||
# ---------- 可观测 ----------
|
# ---------- 可观测 ----------
|
||||||
OTEL_EXPORTER_OTLP_ENDPOINT=
|
OTEL_EXPORTER_OTLP_ENDPOINT=
|
||||||
|
|||||||
@@ -79,10 +79,11 @@ pnpm db:seed # 幂等写入 system_configs 基线
|
|||||||
pnpm dev # 并行启动 api(3000) / web(5173) / worker
|
pnpm dev # 并行启动 api(3000) / web(5173) / worker
|
||||||
```
|
```
|
||||||
|
|
||||||
也可以使用一键脚本(后台启动、自动检测并释放端口、带健康检查):
|
也可以使用一键脚本(自动检测并释放端口、带健康检查,启动后默认跟随日志):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./dev.sh # 启动 api + web + worker
|
./dev.sh # 启动 api + web + worker,并前台跟随日志(Ctrl+C 停止全部)
|
||||||
|
./dev.sh start -d # 后台启动
|
||||||
./dev.sh status # 端口 / PID / 健康状态
|
./dev.sh status # 端口 / PID / 健康状态
|
||||||
./dev.sh logs [api|web|worker] # 跟踪日志(默认全部)
|
./dev.sh logs [api|web|worker] # 跟踪日志(默认全部)
|
||||||
./dev.sh stop # 停止并释放 3000 / 5173
|
./dev.sh stop # 停止并释放 3000 / 5173
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ WORKER_FILTER="@lingxi/worker"
|
|||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
COMMAND="start"
|
COMMAND="start"
|
||||||
SERVICES=("api" "web" "worker")
|
SERVICES=("api" "web" "worker")
|
||||||
FOLLOW=0
|
# auto:终端下启动后直接跟随日志;非交互(脚本/CI)默认后台
|
||||||
|
FOLLOW="auto"
|
||||||
AUTO_KILL=1
|
AUTO_KILL=1
|
||||||
|
|
||||||
# ---------- 输出 ----------
|
# ---------- 输出 ----------
|
||||||
@@ -71,8 +72,9 @@ usage() {
|
|||||||
灵犀 · 开发机服务启动脚本(不启动 DB / Redis 容器)
|
灵犀 · 开发机服务启动脚本(不启动 DB / Redis 容器)
|
||||||
|
|
||||||
用法:
|
用法:
|
||||||
./dev.sh 启动(默认 api + web + worker)
|
./dev.sh 启动服务并前台跟随运行日志(Ctrl+C 停止全部)
|
||||||
./dev.sh start 同上
|
./dev.sh start 同上
|
||||||
|
./dev.sh start -d 后台启动,立即返回
|
||||||
./dev.sh stop 停止全部服务并释放端口
|
./dev.sh stop 停止全部服务并释放端口
|
||||||
./dev.sh restart 重启
|
./dev.sh restart 重启
|
||||||
./dev.sh status 查看端口、PID 与健康状态
|
./dev.sh status 查看端口、PID 与健康状态
|
||||||
@@ -83,7 +85,8 @@ usage() {
|
|||||||
--api-only 只启动 api
|
--api-only 只启动 api
|
||||||
--web-only 只启动 web
|
--web-only 只启动 web
|
||||||
--no-worker 不启动 worker
|
--no-worker 不启动 worker
|
||||||
--follow, -f 启动后前台跟踪日志,Ctrl+C 停止全部
|
-d, --detach 后台启动,不跟随日志
|
||||||
|
-f, --follow 强制前台跟随日志(默认在终端下开启)
|
||||||
--no-kill 端口占用时不自动结束,直接报错退出
|
--no-kill 端口占用时不自动结束,直接报错退出
|
||||||
-h, --help 显示帮助
|
-h, --help 显示帮助
|
||||||
|
|
||||||
@@ -130,6 +133,8 @@ parse_args() {
|
|||||||
;;
|
;;
|
||||||
--follow|-f)
|
--follow|-f)
|
||||||
FOLLOW=1; shift ;;
|
FOLLOW=1; shift ;;
|
||||||
|
-d|--detach)
|
||||||
|
FOLLOW=0; shift ;;
|
||||||
--no-kill)
|
--no-kill)
|
||||||
AUTO_KILL=0; shift ;;
|
AUTO_KILL=0; shift ;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
@@ -301,6 +306,8 @@ load_env_files() {
|
|||||||
value="${value%\"}"
|
value="${value%\"}"
|
||||||
value="${value#\'}"
|
value="${value#\'}"
|
||||||
value="${value%\'}"
|
value="${value%\'}"
|
||||||
|
# VITE_* 交给前端自己的 envDir 处理,避免覆盖 Vite 的构建/运行配置
|
||||||
|
case "$key" in VITE_*) continue ;; esac
|
||||||
# shell 里已有的变量优先,不覆盖
|
# shell 里已有的变量优先,不覆盖
|
||||||
if [[ -z "${!key:-}" ]]; then
|
if [[ -z "${!key:-}" ]]; then
|
||||||
export "$key=$value"
|
export "$key=$value"
|
||||||
@@ -490,12 +497,18 @@ start_services() {
|
|||||||
local files=()
|
local files=()
|
||||||
for service in "${SERVICES[@]}"; do files+=("$(svc_log "$service")"); done
|
for service in "${SERVICES[@]}"; do files+=("$(svc_log "$service")"); done
|
||||||
sleep 0.3
|
sleep 0.3
|
||||||
|
printf '\n'
|
||||||
|
dim "以下为运行日志,按 Ctrl+C 停止全部服务"
|
||||||
|
printf '\n'
|
||||||
# 后台 tail + wait:前台 tail 会阻塞信号 trap,导致 Ctrl+C 不生效
|
# 后台 tail + wait:前台 tail 会阻塞信号 trap,导致 Ctrl+C 不生效
|
||||||
tail -n 20 -F "${files[@]}" &
|
tail -n 20 -F "${files[@]}" &
|
||||||
TAIL_PID=$!
|
TAIL_PID=$!
|
||||||
trap cleanup_follow INT TERM
|
trap cleanup_follow INT TERM
|
||||||
wait "$TAIL_PID" || true
|
wait "$TAIL_PID" || true
|
||||||
stop_services
|
stop_services
|
||||||
|
else
|
||||||
|
printf '\n'
|
||||||
|
dim "后台运行中:./dev.sh logs 查看日志,./dev.sh stop 停止服务"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -568,6 +581,9 @@ clean_state() {
|
|||||||
|
|
||||||
# ---------- 主流程 ----------
|
# ---------- 主流程 ----------
|
||||||
parse_args "$@"
|
parse_args "$@"
|
||||||
|
if [[ "$FOLLOW" == "auto" ]]; then
|
||||||
|
if [[ -t 1 ]]; then FOLLOW=1; else FOLLOW=0; fi
|
||||||
|
fi
|
||||||
load_env_files
|
load_env_files
|
||||||
resolve_ports
|
resolve_ports
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user