docs: 同步 8/25 迁移(前端迁云 Caddy:80、Oracle 换新机 129.146.26.249、旧 IP 清理、Drive 中转设计说明)
This commit is contained in:
16
.workbuddy/memory/2026-08-25.md
Normal file
16
.workbuddy/memory/2026-08-25.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# 2026-08-25 工作日志
|
||||
|
||||
## 前端迁移收尾 + 登录故障修复
|
||||
- **前端最终落点**:云服务器 129.146.26.249 的 Caddy :80(`http://129.146.26.249/`),
|
||||
SPA 静态在 `/var/www/fam-ui`,`/api/*` 经 frp 隧道反代回 NAS fam-core :8000。
|
||||
**注意:新服务器 :8000 是 frp 隧道口(直通 NAS API),不是前端入口**,登录请用 :80。
|
||||
- **登录失败根因**:重启 fam-core 时 FAM_AUTH_USER/FAM_AUTH_PASS 未固化进 .env →
|
||||
auth.py fail-closed(未配置即拒绝所有登录)→ 全部 401。已补进
|
||||
`/volume1/web/sentinel-home-ai/.env`(5 键:ORACLE_SYNC_TOKEN/DSM_ACCOUNT/DSM_PASSWORD/
|
||||
FAM_AUTH_USER/FAM_AUTH_PASS=ericwyuan/iLoveJava5)并重启,登录恢复 200。
|
||||
- **旧 IP 清理**:本地仓库 config.yaml(4 处)+ chat_handler/motion_notifier/oracle_sync
|
||||
兜底默认值 + docs/DEPLOY.md + PROGRESS.md 共 6 文件旧 IP 129.146.203.203 → 129.146.26.249,
|
||||
已清 __pycache__。仓库/部署/README 三处一致。**未提交**。
|
||||
- 孤儿云库 sentinel_home_ai + famcore 用户已 DROP(新服务器)。
|
||||
- SS Webhook:代码中为可选补充(motion_bp.py 文档明确),SS 未配行动规则故休眠,
|
||||
是否删除待用户拍板。
|
||||
@@ -8,6 +8,9 @@
|
||||
- **不再分析整段视频**。Google Drive --rclone--> Oracle gdrive_videos(整段素材保留);
|
||||
Oracle 按 NAS 推送的 `ss_motion_events`(start_time/duration,Unix epoch)ffmpeg 分割运动片段
|
||||
(`-c:v copy -c:a aac` 保留音频,产物 `/opt/fam-edge/motion_clips/`),**只分析运动片段**。
|
||||
- **Drive 中转是跨境提速设计(非仅 NAT 原因)**:中国→海外裸 HTTP/SCP 直传 Oracle 很难(跨境单 TCP 流
|
||||
丢包掉速);改走 Google(CloudSync 分块并发 + 断点续传,抗抖动)→ Oracle rclone 每 5min 拉取
|
||||
(海外数据中心互联,Gbps)。**不要轻易提议砍掉 Drive 改 NAS 直连 Oracle**。
|
||||
- NAS MotionNotifier 轮询 SS `EventCenter.Event.List`(60s,camera_ids=2, event_types=10)推送
|
||||
/api/ss/motion;游标 MariaDB 续用 + 失败批次不前进 + 心跳。Webhook 端点保留为可选补充。
|
||||
- **SS duration=0 = 动作进行中**(结束才回填真实时长),分割只处理已结束事件。
|
||||
@@ -18,10 +21,11 @@
|
||||
- NAS (192.168.50.64):SSH 2222, ericwyuan/iLoveJava5;fam-core 代码 `/volume1/web/sentinel-home-ai`,
|
||||
venv `fam-core/venv`,`start_core.sh` source .env;重启 = kill gunicorn + `setsid bash start_core.sh`
|
||||
(NAS 无 systemd 守护)。
|
||||
- **Oracle (129.146.203.203)**:SSH key `~/.ssh/oracle_sentinel`;fam-edge 由 **systemd
|
||||
- **Oracle(云服务器 129.146.26.249)**:SSH key `~/.ssh/oracle_new`;fam-edge 由 **systemd
|
||||
`fam-edge.service` 守护(Restart=always)**——部署代码后必须 `sudo systemctl restart fam-edge`,
|
||||
手动 setsid 会端口冲突;venv `/opt/fam-edge/venv`;库 `/opt/fam-edge/data/oracle.db`;
|
||||
素材 `/opt/fam-edge/gdrive_videos`;logs 目录 ubuntu 可写。
|
||||
**前端亦托管于此机 Caddy :80**(fam-ui SPA + /api 反代回 NAS fam-core :8000 经 frp 隧道);旧机 129.146.203.203 已退役。
|
||||
- 部署:本地 git 提交 push Gitea → tar 管道(NAS 直接解包;Oracle `--strip-components=1` 到临时目录再 cp,避免动 data/venv)。
|
||||
|
||||
## 提交规范(强制)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
## 环境状态
|
||||
|
||||
### Oracle Cloud (129.146.203.203) - FAM-Edge 节点
|
||||
### Oracle Cloud (129.146.26.249) - FAM-Edge 节点
|
||||
| 项目 | 状态 | 备注 |
|
||||
|------|------|------|
|
||||
| OS | Ubuntu 20.04 ARM64 | Ampere A1 2C12G |
|
||||
@@ -192,7 +192,7 @@
|
||||
5. **MariaDB JSON 路径兼容** - MariaDB 10.11 不支持 MySQL 的 `$[*]` 通配符 JSON 路径和 `->` 操作符,name_member() 改用 Python 层解析 + 逐行 UPDATE
|
||||
6. **Python 3.10 venv** - NAS 系统 Python 3.8 过旧,用 Synology Python3.10 包创建 venv
|
||||
7. **FAM-Edge 聊天代理** - 历史:/api/edge/chat 直连 Ollama 代理;架构重构后被 `/api/edge/chat/ask` 三模型编排端点取代(旧端点保留兼容)
|
||||
8. **Oracle 公网 IP 替代 Tailscale** - Tailscale 两节点在线但端口不通(防火墙),edge_url 和 qa_url 改用 Oracle 公网 IP 129.146.203.203
|
||||
8. **Oracle 公网 IP 替代 Tailscale** - Tailscale 两节点在线但端口不通(防火墙),edge_url 和 qa_url 改用 Oracle 公网 IP 129.146.26.249
|
||||
9. **Ollama 模型常驻内存** - systemd 加 `OLLAMA_KEEP_ALIVE=-1`,模型加载后永不卸载,消除 55s 冷启动延迟,常驻占用 4.3GB 内存(系统 12GB 够用)
|
||||
10. **关键帧自适应帧数** - 原固定 5-8 帧对长视频太稀疏(30分钟仅8帧=每3.75分钟1帧),改为随视频时长自适应:候选帧 `clamp(duration_min×2, 30, 120)`,关键帧上限 `clamp(duration/150s, 8, 30)`。30分钟→12帧,60分钟→24帧,封顶30帧
|
||||
11. **云端直出直存(架构重构)** - 本地 Ollama 完全移出视频链路:云端 VLM(Gemini 多图单请求 / NVIDIA 逐帧聚合)直接产出结构化 JSON,Edge 仅 `format_cloud_result` 格式化/校验(无模型调用)后直存 NAS DB。根因:CPU 版 Ollama 对无上限融合 prompt 预填充极慢导致 300s 超时
|
||||
@@ -378,7 +378,7 @@ AI 分析瓶颈: 帧5耗时 229s (疑似 ARM CPU 热降频), 其余帧 50-65s
|
||||
/api/edge/chat/ask run_qa 三模型降级编排
|
||||
```
|
||||
|
||||
- FAM-Core Chat-Handler 调用 `qa_url` 配置的 `http://129.146.203.203:5000/api/edge/chat/ask`(不再直连 Ollama)
|
||||
- FAM-Core Chat-Handler 调用 `qa_url` 配置的 `http://129.146.26.249:5000/api/edge/chat/ask`(不再直连 Ollama)
|
||||
- FAM-Edge `run_qa` 按 Gemini → NVIDIA → 本地 Ollama 顺序调用 `chat()`,首个成功即返回 `{answer, provider}`
|
||||
- **验证结果**:
|
||||
- Edge 单测:`/api/edge/chat/ask` → 200,`provider=nvidia`(Gemini 30s 超时后 NVIDIA 兜底成功,耗时 51s)
|
||||
|
||||
39
README.md
39
README.md
@@ -3,7 +3,7 @@
|
||||
|
||||
> 多模型容灾降级 + 交互式命名 + AI 对话的家庭监控系统。
|
||||
> 本文档为项目需求文档与 README 的整合版,按当前代码实际状态(v1.0 E2E 已打通)编写。
|
||||
> 最后更新:2026-08-24(事件时间轴支持删除视频会话)
|
||||
> 最后更新:2026-08-25(Oracle 迁至新服务器 129.146.26.249;前端由 NAS 迁至云服务器 Caddy :80)
|
||||
|
||||
---
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
- **FAM-Core**(NAS 端单进程):**Oracle-Sync**(每 30 分钟拉增量镜像)+ **MotionNotifier**(轮询 SS 运动事件推送 Oracle)+ **Chat-Handler** + **Member-Manager**,CPU 占用极低
|
||||
- **FAM-Edge**(Oracle 端单进程):rclone 实时同步 Google 硬盘视频(**整段素材**)→ 按 `ss_motion_events` 运动事件(start_time/duration)**ffmpeg 分割运动片段** → **只把运动片段送云端 VLM**(Gemini 用 Files API / NVIDIA 整视频 `video_url`)→ 结构化 JSON 落本地 SQLite → 对外提供 `/api/oracle/sync` 增量拉取接口(**本地模型不参与视频分析**)
|
||||
- **FAM-UI**(NAS 端):Vue3 SPA 读本地同步镜像(sync_videos / sync_events / sync_people),事件时间轴 + 人物管理 + AI 对话 + 对话历史 + 统计
|
||||
- **FAM-UI**(云服务器端,由 Caddy :80 托管):Vue3 SPA 读本地同步镜像(sync_videos / sync_events / sync_people),事件时间轴 + 人物管理 + AI 对话 + 对话历史 + 统计;浏览器经云服务器访问,/api 经 frp 隧道反代回 NAS FAM-Core
|
||||
- **数据库**:Oracle 侧 SQLite(videos/events/people/ss_motion_events/sync_cursor);NAS 侧 MariaDB 镜像(sync_videos / sync_events / sync_people / sync_cursor)+ chat_history
|
||||
- **数据流向**:Google 硬盘 ──rclone──► 甲骨文整段素材 ──按运动事件分割片段──► 片段云端分析 ──► Oracle SQLite ──每 30 分钟 NAS 拉取──► NAS MariaDB 镜像 ──► FAM-UI;运动事件由 NAS 轮询 SS 推送 Oracle(NAS → Oracle 单向)
|
||||
- **AI 对话**:查 sync_events 拼上下文 → FAM-Edge 转发到独立 **ai-gateway** 服务(OpenAI 兼容协议,NVIDIA → Gemini → 本地 Ollama 降级链在 ai-gateway 内部完成,FAM-Edge 不再自己维护模型链)→ 返回并写 chat_history
|
||||
@@ -63,13 +63,13 @@ Orchestrator 视觉阶段按 `fallback` 模式顺序降级:Gemini → NVIDIA N
|
||||
|
||||
| 节点 | 角色 | 硬件 | IP | 服务与端口 |
|
||||
|------|------|------|-----|-----------|
|
||||
| Synology NAS | FAM-Core + FAM-UI + 数据库 | DS220+ (Geminilake), DSM 7 | 家庭局域网 192.168.50.64 / Tailscale 100.70.234.39 | FAM-Core :8000, FAM-UI(Vue3 构建产物,由 FAM-Core 托管), MariaDB :3306, Surveillance Station :5000 |
|
||||
| Oracle Cloud | FAM-Edge + AI-Gateway | Ampere A1 2C12G ARM64(无 GPU), Ubuntu 20.04 | 公网 129.146.203.203 / Tailscale 100.74.137.126 | FAM-Edge :5000(systemd 守护,视频分析 + 转发问答), **AI-Gateway :5100(systemd 守护,对外监听,问答模型降级链)**, Ollama :11434(仅本地,被 AI-Gateway 调用) |
|
||||
| 家庭网络 | 用户入口 | 普通终端 | 192.168.50.0/24 | 浏览器访问 `http://192.168.50.64:8000` |
|
||||
| Synology NAS | FAM-Core + 数据库(采集 + 聚合 + 镜像层) | DS220+ (Geminilake), DSM 7 | 家庭局域网 192.168.50.64 | FAM-Core :8000(API 聚合 + 轮询 SS + OracleSync), MariaDB :3306, Surveillance Station :5000;FAM-UI 已迁至云服务器(见下) |
|
||||
| Oracle Cloud(云服务器) | FAM-Edge + AI-Gateway + Caddy(前端) | Ampere A1 4C23G ARM64(无 GPU), Ubuntu 20.04 | 公网 129.146.26.249 / Tailscale(已安装未启用,备用) | FAM-Edge :5000(systemd 守护,视频分析 + 转发问答), **AI-Gateway :5100(systemd 守护,对外监听,问答模型降级链)**, Caddy :80(托管 FAM-UI SPA + 反代 /api/* → NAS FAM-Core), Ollama :11434(仅本地,被 AI-Gateway 调用) |
|
||||
| 家庭网络 | 用户入口 | 普通终端 | 公网 / 家庭网络 | 浏览器访问 `http://129.146.26.249/`(Caddy 托管前端,/api 经 frp 隧道回源 NAS FAM-Core :8000) |
|
||||
|
||||
**网络要点(推送模式)**:
|
||||
- 服务间通信只有两条出站:**NAS → Oracle 公网 IP:5000**(① `GET /api/oracle/sync` 拉增量 + `POST /api/oracle/people/correct` 命名回推 ② `POST /api/ss/motion` 推送运动侦测事件)。Edge 不需要反向访问 NAS
|
||||
- **运动事件获取(NAS 轮询驱动)**:FAM-Core MotionNotifier 每 60s 轮询本机 Surveillance Station 事件列表 API(`SYNO.SurveillanceStation.EventCenter.Event`),增量推送 Oracle。`/api/ss/webhook` 端点在代码中保留为可选低延迟补充(SS 行動規則 Webhook 未配置则不触发)
|
||||
- **运动事件获取(NAS 轮询驱动)**:FAM-Core MotionNotifier 每 60s 轮询本机 Surveillance Station 事件列表 API(`SYNO.SurveillanceStation.EventCenter.Event`),增量推送 Oracle。`/api/ss/webhook` 端点在代码中保留为可选低延迟补充(SS 行動規則 Webhook 未配置则不触发)。若启用 SS Webhook,目标地址改为云服务器公网 `http://129.146.26.249/api/ss/webhook?token=ORACLE_SYNC_TOKEN`。
|
||||
- Oracle 端 Ollama 端口 11434 不对外暴露;聊天请求 NAS → FAM-Edge `/api/edge/chat/ask`(保持不变的对外契约)→ **FAM-Edge 转发到同机的 AI-Gateway :5100**(`/v1/chat/completions`,OpenAI 兼容协议,Bearer token 鉴权)→ NVIDIA/Gemini/Ollama 降级链。AI-Gateway 自己对外监听 0.0.0.0:5100(Bearer token 鉴权 fail-closed),供其他项目直接接入,不止服务本系统
|
||||
- Tailscale 两节点已安装在线,但 NAS tailscaled 为 userspace 模式且防火墙端口不通,暂走公网 IP
|
||||
|
||||
@@ -82,7 +82,7 @@ Orchestrator 视觉阶段按 `fallback` 模式顺序降级:Gemini → NVIDIA N
|
||||
└──────────────┬───────────────────────┘
|
||||
│ rclone 定时同步(systemd timer)
|
||||
▼
|
||||
┌──────────────────────── Oracle Cloud (129.146.203.203) ────────────────────────┐
|
||||
┌──────────────────────── Oracle Cloud / 云服务器 (129.146.26.249) ────────────────────────┐
|
||||
│ FAM-Edge (Flask :5000) │
|
||||
│ ├─ Video-Queue: 30s 轮询 /opt/fam-edge/gdrive_videos 登记整段素材 │
|
||||
│ ├─ Video-Processor: 素材按 ss_motion_events 分割运动片段 → 只分析片段 │
|
||||
@@ -98,6 +98,7 @@ Orchestrator 视觉阶段按 `fallback` 模式顺序降级:Gemini → NVIDIA N
|
||||
│ ├─ /v1/chat/completions:NVIDIA → Gemini(多 Key 轮换)→ 本地 Ollama 降级链 │
|
||||
│ ├─ Bearer token 鉴权(fail-closed),对外 0.0.0.0:5100,非本系统专属 │
|
||||
│ └─ 独立 .env(/opt/ai-gateway/.env,NVIDIA/Gemini key 与 FAM-Edge 各自一份) │
|
||||
│ Caddy :80:托管 FAM-UI SPA + 反代 /api/* → NAS FAM-Core(frp 隧道 :8000) │
|
||||
└───────────────────────────────┬───────────────────────────────────────────────┘
|
||||
│ HTTP GET /api/oracle/sync?since=&token= (每 30 分钟)
|
||||
▼
|
||||
@@ -109,7 +110,7 @@ Orchestrator 视觉阶段按 `fallback` 模式顺序降级:Gemini → NVIDIA N
|
||||
│ ▼ │
|
||||
│ MariaDB (sentinel_home_ai): sync_videos / sync_events / sync_people / │
|
||||
│ sync_cursor / chat_history │
|
||||
│ FAM-UI (Vue3 SPA,FAM-Core 托管 dist) 读同步镜像 │
|
||||
│ (FAM-UI 已迁至云服务器 Caddy :80,见上) │
|
||||
└─────────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -544,9 +545,9 @@ task_id=289(30s 测试片段)全链路打通:推送 5.7MB → Edge 分析
|
||||
| **AI-Gateway** | Oracle | `/opt/ai-gateway/` | **systemd `ai-gateway.service` 守护**(Restart=always),独立 venv(Python 3.8);gunicorn 绑定 `0.0.0.0:5100`(对外直接开放,非仅本机);部署代码后 `sudo systemctl restart ai-gateway` |
|
||||
| Ollama | Oracle | systemd 托管 | 环境变量 `OLLAMA_KEEP_ALIVE=-1`;**被 AI-Gateway 调用,不再被 FAM-Edge 调用** |
|
||||
|
||||
> **外网访问(frp 内网穿透)**:NAS 跑 `frpc`(`/etc/frp/frpc.toml`,S99frpc.sh 守护),映射到 Oracle `129.146.203.203`(frps :7000):
|
||||
> **外网访问(frp 内网穿透)**:NAS 跑 `frpc`(`/etc/frp/frpc.toml`,S99frpc.sh 守护),映射到云服务器 `129.146.26.249`(frps :7000):
|
||||
> - `3000` → NAS Gitea、`8500` → NAS WordPress(8088)、**`8000` → NAS FAM-Core(本系统)**
|
||||
> - 外网入口 `http://129.146.203.203:8000`,**需登录**(见 §5.2 `/api/login`)
|
||||
> - 前端入口 `http://129.146.26.249/`(Caddy 托管 FAM-UI,/api 经 frp 隧道反代回 NAS FAM-Core :8000),**需登录**(见 §5.2 `/api/login`)
|
||||
>
|
||||
> **登录校验(2026-08-22 新增,2026-08-23 改为 fail-closed)**:FAM-Core 全站拦截(`auth.py`)——页面未登录 302 `/login`(内置深色登录页,SPA 零改动),`/api/*` 未登录 401;凭据 `FAM_AUTH_USER`/`FAM_AUTH_PASS`(NAS `.env` 配置,**无硬编码默认值**——这两个变量跟 NAS SSH 密码是同一个值,公网入口不能有"没配置就退回已知密码"的兜底,`.env` 没配好这两项时直接拒绝所有登录);白名单免登录:`/login` `/api/login` `/api/logout` `/api/auth/check` `/health` `/api/ss/webhook` `/assets/*`。登录态为进程内 token + HttpOnly cookie(**2 小时**),过期或重启 fam-core 需重新登录。
|
||||
|
||||
@@ -570,11 +571,11 @@ server:
|
||||
database: # MariaDB(unix_socket 优先)
|
||||
unix_socket: "/run/mysqld/mysqld10.sock"
|
||||
oracle_sync: # 增量镜像线程
|
||||
base_url: "http://129.146.203.203:5000"
|
||||
base_url: "http://129.146.26.249:5000"
|
||||
token: "${ORACLE_SYNC_TOKEN}" # 与 Oracle 端 sync_api.token 一致
|
||||
interval_sec: 1800 # 每 30 分钟拉一次增量
|
||||
chat_handler:
|
||||
qa_url: "http://129.146.203.203:5000/api/edge/chat/ask"
|
||||
qa_url: "http://129.146.26.249:5000/api/edge/chat/ask"
|
||||
timeout: 120
|
||||
motion_notifier: # 运动监测(轮询主路径)
|
||||
enabled: true
|
||||
@@ -585,7 +586,7 @@ motion_notifier: # 运动监测(轮询主路径)
|
||||
dsm_password: "${DSM_PASSWORD}"
|
||||
camera_ids: [2]
|
||||
camera_name_to_id: {"Generic_ONVIF-001": 2}
|
||||
oracle_base_url: "http://129.146.203.203:5000"
|
||||
oracle_base_url: "http://129.146.26.249:5000"
|
||||
oracle_token: "${ORACLE_SYNC_TOKEN}"
|
||||
poll_interval_sec: 60
|
||||
poll_window_hours: 2
|
||||
@@ -720,7 +721,7 @@ cd /volume1/web/sentinel-home-ai && bash start_core.sh
|
||||
# 3. 启动 FAM-Edge(Oracle,systemd 守护)
|
||||
sudo systemctl restart fam-edge
|
||||
|
||||
# 4. 前端(Vue3,构建后由 FAM-Core 托管,无需独立进程)
|
||||
# 4. 前端(Vue3,构建后由云服务器 Caddy :80 托管,/api 经 frp 隧道反代回 NAS FAM-Core,无需在 NAS 独立进程)
|
||||
cd fam-ui && npm run build # 产物 fam-ui/dist/
|
||||
|
||||
# 或使用脚本
|
||||
@@ -756,11 +757,11 @@ cd fam-ui && npm run build # 产物 fam-ui/dist/
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 公网 IP | 129.146.203.203 |
|
||||
| SSH 用户 | ubuntu(密钥 `~/.ssh/oracle_sentinel`) |
|
||||
| 公网 IP | 129.146.26.249 |
|
||||
| SSH 用户 | ubuntu(密钥 `~/.ssh/oracle_new`) |
|
||||
| 系统 | aarch64 (Ampere A1 2C12G), Ubuntu 20.04 LTS |
|
||||
| Tailscale | 100.74.137.126(已安装在线,与 NAS 端口不通) |
|
||||
| 登录命令 | `ssh -i ~/.ssh/oracle_sentinel ubuntu@129.146.203.203` |
|
||||
| Tailscale | 已安装未启用(备用;新机公网直连为主) |
|
||||
| 登录命令 | `ssh -i ~/.ssh/oracle_new ubuntu@129.146.26.249` |
|
||||
|
||||
### 10.4 Gitea 代码仓库
|
||||
|
||||
@@ -836,7 +837,7 @@ export NVIDIA_API_KEY="nvapi-9cFAdO5xdbwPuxS8KGRTnlVimn1gJzbbbzWNhPwHa_Yl3pTe-Pf
|
||||
- **运动事件驱动**(v3,2026-08-22):不再分析整段视频。NAS MotionNotifier 轮询 SS 事件列表(60s,游标续用/失败重试/心跳)推送 `ss_motion_events`;Oracle 整段素材按运动事件 ffmpeg 分割运动片段(`-c:v copy -c:a aac`,只分割已结束事件,`motion_event_id` 幂等),**只分析运动片段**;前端契约不变
|
||||
- **数据迁移**(2026-08-22):整段提取的旧数据(Oracle videos/events/people + NAS 镜像)已清空并按运动视频重新提取;历史素材(NAS 轮询启动前)无运动事件,时间轴已过滤其空会话
|
||||
- **人物管理重设计**(2026-08-22):人物卡新增「运动片段」区块(缩略图/时间/摘要/事件数,点击跳时间轴定位);新增 `GET /api/ui/people/clips`;Timeline 支持 `?video=` 定位
|
||||
- 前端从 Streamlit 迁移为 **Vue3 + Vite + Tailwind SPA**(由 FAM-Core 托管 dist)
|
||||
- 前端从 Streamlit 迁移为 **Vue3 + Vite + Tailwind SPA**;2026-08-25 起前端托管由 NAS 迁至云服务器 Caddy :80,/api 经 frp 隧道反代回 NAS FAM-Core
|
||||
- 运动事件链路(NAS→Oracle 单向推送)+ 心跳 fail-open;Gemini 多 Key 轮换 + 模型调用统计
|
||||
- 双端部署:NAS `start_core.sh`(source .env);Oracle **systemd `fam-edge.service` 守护**
|
||||
|
||||
|
||||
@@ -27,15 +27,15 @@ cp config/config.yaml.example config/config.yaml
|
||||
cd /volume1/web/sentinel-home-ai && bash start_core.sh
|
||||
```
|
||||
|
||||
### 1.3 FAM-UI(Vue3 SPA,无独立进程)
|
||||
### 1.3 FAM-UI(Vue3 SPA,托管于云服务器 Caddy :80)
|
||||
```bash
|
||||
cd /Users/ericwyuan/Desktop/Work/sentinel-home-ai/fam-ui # 本地开发机
|
||||
npm install
|
||||
npm run build # 产物 fam-ui/dist/
|
||||
# 部署 dist 到 NAS(构建产物不入库):
|
||||
tar czf - fam-ui/dist | ssh -p 2222 ericwyuan@192.168.50.64 \
|
||||
'cd /volume1/web/sentinel-home-ai && rm -rf fam-ui/dist && tar xzf -'
|
||||
# 浏览器访问 http://192.168.50.64:8000(由 FAM-Core static_app.py 托管,Vue Router history 回退)
|
||||
# 部署 dist 到云服务器(Caddy 静态目录,/api 经 frp 隧道反代回 NAS):
|
||||
tar czf - fam-ui/dist | ssh -i ~/.ssh/oracle_new ubuntu@129.146.26.249 \
|
||||
'sudo tar xzf - --strip-components=2 -C /var/www/fam-ui && sudo chown -R ubuntu:ubuntu /var/www/fam-ui'
|
||||
# 浏览器访问 http://129.146.26.249/(Caddy 托管,/api/* 反代 NAS fam-core)
|
||||
```
|
||||
|
||||
## 2. Oracle 端部署 (FAM-Edge + Ollama + FFmpeg)
|
||||
@@ -73,7 +73,7 @@ tar czf - --exclude=venv --exclude=__pycache__ fam-core | \
|
||||
|
||||
# Oracle(fam-edge):/opt/fam-edge 是 fam-edge 根,--strip-components=1 解临时目录再 cp
|
||||
tar czf - --exclude=venv --exclude=__pycache__ --exclude=data --exclude=gdrive_videos fam-edge | \
|
||||
ssh ubuntu@129.146.203.203 'mkdir -p /opt/fam-edge/tmp_d && tar xzf - --strip-components=1 -C /opt/fam-edge/tmp_d && \
|
||||
ssh ubuntu@129.146.26.249 'mkdir -p /opt/fam-edge/tmp_d && tar xzf - --strip-components=1 -C /opt/fam-edge/tmp_d && \
|
||||
cp -rf /opt/fam-edge/tmp_d/* /opt/fam-edge/ && rm -rf /opt/fam-edge/tmp_d && sudo systemctl restart fam-edge'
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user