Files
meida/docs/本地联调指南.md
xsl 120bbeceff chore(env): 后端本机联调环境(WSL)+ meida_backend 子仓
- meida_backend 收为 git submodule(git.xiangsilian.com/xsl/meida_backend.git),含 PDF 导出管线提交
- WSL Ubuntu-22.04 镜像网络模式跑 PG(pgvector)@55432 + Redis@56379 + uvicorn@8666 + celery,Windows/Hyper-V 防火墙已放行
- app 默认后端地址 192.168.3.25→192.168.3.19:8666(宿主机)
- docs/本地联调指南.md 全面更新到本机拓扑;.gitignore 增补本地素材/调研产物与 graphify 本机文件
2026-08-30 13:17:49 +08:00

74 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 本地联调指南(App ↔ 后端)
> 2026-08-15 | 适用:FE 第一批(F1~F4)交付后的真机/模拟器联调
> 2026-08-29 更新:环境已统一到本机(`D:\meida`)。后端仓库作为 submodule 位于 `meida_backend/`,WSL 内路径 `/mnt/d/meida/meida_backend`(WSL 发行版 `Ubuntu-22.04`,rootfs import 方式安装)。
## ⚠️ 先看:端口冲突
App 的默认 baseUrl 是 `http://127.0.0.1:8000`,但**你这台机器的 8000 端口已被 AutoVideo(voxcpm-tts)长期占用**。因此本地联调请让美搭后端用 **8666** 端口,并在 App 登录页「高级设置」里把服务器地址改成对应值(F1 交付的设置入口)。
## 〇、首次搭建(已在本机完成,换机器时照做)
1. WSL:`wsl --status` 确认默认版本 2;发行版用 rootfs 导入(微软商店/ubuntu 官方 wsl rootfs 对 22.04 不可用):
`wsl --import Ubuntu-22.04 <安装目录> ubuntu-22.04-server-cloudimg-amd64-root.tar`(rootfs 来自 cloud-images.ubuntu.com 的 jammy release);
2. WSL 内 `/etc/wsl.conf` 开 `[boot] systemd=true`,`wsl --shutdown` 后重启;
3. WSL 内装 docker:`apt install docker.io` + compose 插件放 `/usr/local/lib/docker/cli-plugins/docker-compose`;Docker Hub 不可直连,`/etc/docker/daemon.json` 已配 `registry-mirrors: ["https://docker.m.daocloud.io"]`;
4. `make up` 起 PG(pgvector, 55432)/Redis(56379);**两容器已设 `restart=unless-stopped`**(WSL 空闲会自动关机,docker 随 systemd 自启把容器拉起来);
5. WSL 内装 uv(`~/.local/bin/uv`),`uv sync --extra dev`;`.env` 已从模板生成(JWT_SECRET 已随机化);
6. **唯一待填项:`.env` 里的 `DEEPSEEK_API_KEY`**——不填则登录/配额正常,但对话与报告文案会调 LLM 失败。
## 〇·五、真机访问(WSL2 镜像网络,已配置)
WSL2 默认 NAT 模式下,WSL 内监听的端口只转发到 Windows localhost,**真机访问局域网 IP 不通**。本机已切换为镜像模式:
1. `C:\Users\youmi\.wslconfig`:`[wsl2] networkingMode=mirrored`(改后需 `wsl --shutdown` 重启;重启后 uvicorn/celery 要重新拉起,容器有自启策略不用管);
2. 两道防火墙都已放行 TCP 8666/8080:Windows 防火墙规则 `Meida-Dev-WSL` + **Hyper-V 防火墙规则** `Meida-Dev-WSL-In`(镜像模式走 Hyper-V 防火墙,其默认入站是 Block,只加 Windows 规则不够);
3. 已知怪相:镜像模式下 **Windows 本机 curl 局域网 IP 不通是正常的**(host loopback 怪癖),WSL 内与手机访问才是真实口径;
4. 验证:`wsl -d Ubuntu-22.04 -e bash -c "curl -s http://192.168.3.19:8666/healthz"`。
## 一、启动后端(WSL)
```bash
wsl -d Ubuntu-22.04 -e bash -c "export PATH=\$HOME/.local/bin:\$PATH && cd /mnt/d/meida/meida_backend && \
(nohup uv run uvicorn apps.api.main:app --host 0.0.0.0 --port 8666 > /tmp/meida-api.log 2>&1 &) && \
(nohup uv run celery -A apps.worker.celery_app worker -Q cpu,io --pool=solo --loglevel WARNING > /tmp/meida-worker.log 2>&1 &) && sleep 8 && \
curl -s http://127.0.0.1:8666/healthz"
```
- `--host 0.0.0.0`:真机(USB)需要开发机局域网 IP 可达
- worker 必须起:报告生成是异步任务,不起 worker 会一直 RUNNING(`--pool=solo`:本机联调单进程足够,且免 root 告警)
- 依赖容器:PG(55432)/Redis(56379) 设为开机自启,若异常 `docker ps` 确认
- 停止:`wsl -d Ubuntu-22.04 -e bash -c "pkill -f 'uvicorn apps.api'; pkill -f 'celery -A apps.worker'"`
## 二、App 侧(DevEco Studio)
1. 打开工程 `D:\meida\app`,点 Run(模拟器或真机)
2. 登录页「高级设置」:
- **模拟器**:`http://127.0.0.1:8666`(WSL2 端口自动转发到 Windows localhost)
- **真机(USB)**:`http://<开发机局域网IP>:8666`(`ipconfig` 查,手机与电脑同 WiFi;防火墙首次会弹允许)
3. 设备标识随便填(记住它——同标识=同账号,配额/报告都挂它下面)
## 三、可体验的闭环(对齐 FE 第一批)
1. 登录 → 四 Tab 主界面
2. 首页「生成我的形象报告」→ 填问卷 → 提交 → 看进度轮询 → **32 维结果页**(约 10~30 秒,含一次真实 LLM 调用)
3. 首页「AI 穿搭顾问」→ 对话(真实 DeepSeek)
4. 「我的」→ 配额卡片(对话/试穿/报告)+ 流水(消耗/退还/奖励)
5. 重复生成报告 → 40920 提示;报告重生成 → 视觉阶段复用(秒出诊断)
## 四、已知边界(设计使然,不是 bug)
- 照片是"模拟对象键"输入框——COS 直传等云端开通后替换
- 空知识库时报告文案会**降级为规则直出**(结果页有黄条标识)——等规则库录入后消失
- 华为账号/短信登录未接(等 AGC/签名审核);当前是 dev-token 通道,仅限本地
- 未配置签名 → 只能模拟器/调试真机跑,发布包要等证书指纹双套配置
## 五、快速排障
| 症状 | 原因/处理 |
|---|---|
| 登录一直转圈/网络错误 | baseUrl 不对;或后端没起;模拟器记得用 127.0.0.1 |
| 报告一直 RUNNING | worker 没起(第二步的两条 nohup 都要) |
| 401 反复跳登录 | 旧 token 过期属正常自动刷新;若持续,`hdc shell` 清 App 数据重登 |
| 真机连不上 | 防火墙放行 8666;确认手机电脑同网段;后端必须 `--host 0.0.0.0` |