diff --git a/PROGRESS.md b/PROGRESS.md index c11f390..1b14e52 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -506,3 +506,19 @@ AI 分析瓶颈: 帧5耗时 229s (疑似 ARM CPU 热降频), 其余帧 50-65s - 修复:导航改为页面顶部 `st.segmented_control` 横向分段控制器,任何屏宽直接可见;侧边栏保留品牌标题和任务队列状态。 浏览器验证:顶部分段导航 5 页可达、成员命名页显示 张三/汤圆/爸、AI 对话页表单正常、无报错。 + +## 摄像头对外入口收口为单一域名 smart-camera.zichuan.xyz (2026-09-01) + +**决策**:摄像头系统(fam-ui 前端 + NAS fam-core :8000 后端)对外只暴露一个域名 `smart-camera.zichuan.xyz`(前端 `/` + 后端 `/api`),下线独立的 `api.zichuan.xyz`,并从 `oracle.zichuan.xyz` 移除摄像头相关路由(其 `/ai`、`/fam`、`/wordpress` 仍保留给其它服务)。 + +**改动(基础设施,不在本仓库)**: +- Oracle Caddy(`/etc/caddy/Caddyfile`):新增 `smart-camera.zichuan.xyz` 块(`/` 静态 fam-ui + `/api`、`/login` 反代 `127.0.0.1:8000`,经 frp 隧道回源 NAS);删除 `api.zichuan.xyz` 块;`oracle.zichuan.xyz` 与 `:80` 兜底块移除摄像头 root + `/api` 路由(改 404)。 +- DNS:新增 `smart-camera.zichuan.xyz → 129.146.26.249`(RecordId 2387553886)。 +- NAS `/volume1/web/sentinel-home-ai/.env`:`AUTH_HUB_ISSUER` 改为 `https://auth.zichuan.xyz`、`AUTH_HUB_REDIRECT_URI` 改为 `https://smart-camera.zichuan.xyz/api/auth/callback`,且 `AUTH_HUB_*` 四行补全 `export` 前缀(见下)。 +- auth-hub FAM-Core 客户端 `a2PJTZuKQYxt1oGh` 回调改为 `https://smart-camera.zichuan.xyz/api/auth/callback`(保留旧 IP 作兜底)。 + +**顺带修复两个生产 Bug**(见 `scripts/start_core.sh`): +1. 脚本先 `cd "$APP_DIR"` 再算相对 `SCRIPT_DIR`,导致 `source .env` 路径错位、`set -e` 下直接退出,gunicorn 起不来。 +2. `.env` 里 `AUTH_HUB_*` 是裸赋值(无 `export`),`source` 后不进环境,gunicorn 子进程读不到 → 登录一直 503 fail-closed(与之前“生产未部署”一致)。脚本加 `set -a` 包裹 source 修复。 + +**验证**:`smart-camera.zichuan.xyz/` 200、`/login` 302→auth.zichuan.xyz(redirect_uri=smart-camera)、`/api/*` 401;`oracle.zichuan.xyz/` 404、`/fam` 200;`api.zichuan.xyz` 已不通。fam-core 经修复脚本重启后 health ok。 diff --git a/scripts/start_core.sh b/scripts/start_core.sh index ad9017b..541fe64 100755 --- a/scripts/start_core.sh +++ b/scripts/start_core.sh @@ -3,6 +3,7 @@ # 用法: ./scripts/start_core.sh set -e +# APP_DIR = /fam-core APP_DIR="$(cd "$(dirname "$0")/.." && pwd)/fam-core" CONFIG_FILE="$APP_DIR/config/config.yaml" @@ -14,10 +15,16 @@ fi cd "$APP_DIR" -# 加载项目级环境变量(ORACLE_SYNC_TOKEN 等,与甲骨文端保持一致) -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -if [ -f "$SCRIPT_DIR/../.env" ]; then - source "$SCRIPT_DIR/../.env" +# 加载项目级环境变量(ORACLE_SYNC_TOKEN / AUTH_HUB_* 等,与甲骨文端保持一致) +# 注意:.env 里 AUTH_HUB_* 是“裸赋值”(无 export 前缀),必须用 set -a 包裹 source, +# 否则这些变量只存在于 shell 内、不会 export 给 gunicorn 子进程,导致 fam-core +# 启动后读不到 AUTH_HUB_ISSUER 等、登录被 fail-closed 拒绝(见 auth.py)。 +# 另外 .env 路径基于 $APP_DIR 推导,避免“先 cd 再算 SCRIPT_DIR”的相对路径错位。 +ENV_FILE="$APP_DIR/../.env" +if [ -f "$ENV_FILE" ]; then + set -a + source "$ENV_FILE" + set +a fi # 检查虚拟环境