diff --git a/DEPLOY.md b/DEPLOY.md index d05a282..46ca266 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -140,50 +140,26 @@ SKIP_PYTORCH=1 bash deploy.sh deps 下载过程中出现 `Retrying... Read timed out` 属于正常重试,**并非卡死**,请耐心等待 10-30 分钟。 -### 0.7 PWA 安装 App 与 HTTPS 反向代理 +### 0.7 PWA 安装 App(需 HTTPS) | 访问方式 | 浏览器行为 | |----------|------------| -| `http://IP:5683` | 只能「快捷方式 / 添加到主屏幕」,**不能**系统级一键安装 | -| `https://IP` 或 `https://域名` | Chrome/Edge 可弹出 **「安装 Trading Studio」**,独立窗口运行 | +| `http://内网IP:5683` | 只能「快捷方式 / 添加到主屏幕」 | +| `https://域名`(经云服务器反代) | Chrome/Edge 可 **「安装 Trading Studio」** | -**原因:** PWA 规范要求 **HTTPS 安全上下文**(`localhost` 除外)。局域网直连 HTTP 是正常现象,不是代码 bug。 +内网 HTTP 直连无法一键安装 App,这是浏览器 PWA 安全策略,不是程序缺陷。 -#### 推荐方案:Nginx + 自签证书(纯局域网) +**反向代理不在本仓库代码中配置。** 若你使用 **云服务器 + NPS 内网穿透**(或其它反代方案),请阅读独立教程: -```bash -cd /opt/Trading_Studio -bash server-update.sh # 或 git pull +👉 **[PWA_NPS.md](./PWA_NPS.md)** — 云服务器 HTTPS 反代 + NPS 穿透到 `5683` 的完整步骤 -# 1. 安装 Nginx -sudo apt install -y nginx +要点摘要: -# 2. 生成自签 SSL(替换为你的服务器局域网 IP) -sudo bash scripts/gen_ssl_cert.sh 192.168.8.100 - -# 3. 启用站点配置 -sudo cp nginx/trading_studio.conf /etc/nginx/sites-available/trading_studio.conf -sudo ln -sf /etc/nginx/sites-available/trading_studio.conf /etc/nginx/sites-enabled/ -sudo nginx -t && sudo systemctl reload nginx - -# 4. 确保 Gradio 仍由 PM2 监听 127.0.0.1:5683(仅本机),外网只走 443 -pm2 restart trading_studio -``` - -**访问:** `https://192.168.8.100`(首次需在手机/平板点「高级 → 继续访问」信任证书) - -**安装 App:** -- 电脑 Chrome:地址栏出现 ⊕ 安装图标,或点页面「安装 App」按钮 -- 安卓 Chrome:菜单 → 安装应用 -- iPad/iPhone Safari:分享 → 添加到主屏幕(iOS 无系统安装弹窗,但 HTTPS 下体验更完整) - -#### 有公网域名时 - -在 Nginx 前加 [Let's Encrypt](https://letsencrypt.org/) 免费证书(`certbot`),可免信任自签证书步骤。 - -#### 无反向代理时的替代 - -HTTP 下点击「安装 App」会显示手动引导;桌面快捷方式仍可用,功能不受影响。 +1. 内网物理机 PM2 监听 `5683` 即可 +2. NPS 将 `127.0.0.1:5683` 穿透到云服务器 +3. 云服务器用已有 Nginx/面板配置 **HTTPS 域名** 反代到 NPS 端口 +4. 反代须透传 **WebSocket**(Gradio 必需) +5. 用户通过 `https://你的域名` 访问后再安装 App --- diff --git a/PWA_NPS.md b/PWA_NPS.md new file mode 100644 index 0000000..71580af --- /dev/null +++ b/PWA_NPS.md @@ -0,0 +1,187 @@ +# PWA 安装 App 教程 — 云服务器反代 + NPS 内网穿透 + +Trading Studio 的 Gradio 服务跑在**内网物理机** `0.0.0.0:5683`。 +要通过浏览器 **「安装 App」**(而非仅快捷方式),用户访问的地址必须是 **HTTPS**。 + +本教程面向:**云服务器做 HTTPS 反向代理 + NPS 穿透到内网 3060Ti 机器** 的架构。 +**不在 Trading Studio 代码仓库内捆绑任何 Nginx/Caddy 配置文件**,反代在你自己的云服务器 / NPS 面板中完成。 + +--- + +## 一、为什么 HTTP 只能快捷方式? + +| 访问地址 | 安装表现 | +|----------|----------| +| `http://内网IP:5683` | 仅「添加快捷方式 / 创建快捷方式」 | +| `https://你的域名`(经云服务器) | Chrome/Edge 可 **「安装 Trading Studio」** | + +PWA 要求 **安全上下文(HTTPS)**。内网直连 HTTP 是浏览器限制,与项目代码无关。 + +--- + +## 二、推荐架构 + +``` +手机 / 平板 / 电脑 + │ + ▼ https://studio.example.com (云服务器:SSL 证书 + 反代) + │ + 云服务器 Nginx / Caddy / 面板反代 + │ + ▼ NPS 隧道(TCP 或 HTTP 代理) + │ + 内网 3060Ti 物理机 + PM2 → Gradio 0.0.0.0:5683 +``` + +要点: + +1. **内网机**:只跑 `pm2`,监听 `5683`,无需在云服务器上装 PyTorch。 +2. **NPS**:把内网 `5683` 映射到云服务器某一端口,或做 HTTP 域名转发。 +3. **云服务器**:对外提供 **HTTPS 域名**,反代到 NPS 暴露的地址。 +4. **用户永远用 HTTPS 域名访问**,不要用 `http://IP:5683` 装 App。 + +--- + +## 三、内网物理机(Trading Studio) + +确保服务正常: + +```bash +cd /opt/Trading_Studio +pm2 status +# 应看到 trading_studio 运行中,监听 5683 + +curl -I http://127.0.0.1:5683 +``` + +`config.py` 中保持: + +```python +HOST = "0.0.0.0" +PORT = 5683 +``` + +Ollama 等仍走局域网 `.env` 配置,与穿透无关。 + +--- + +## 四、NPS 客户端配置(内网机) + +在 NPS **客户端**(npc)新增隧道,将本机 Gradio 暴露给服务端。常见两种方式: + +### 方式 A:TCP 隧道(简单) + +| 配置项 | 示例值 | +|--------|--------| +| 类型 | TCP | +| 内网目标 | `127.0.0.1:5683` | +| 服务端端口 | 如 `25683`(云服务器上监听) | + +云服务器反代目标:`http://127.0.0.1:25683` + +### 方式 B:HTTP 代理 / 域名模式(推荐,若 NPS 面板支持) + +| 配置项 | 示例值 | +|--------|--------| +| 类型 | HTTP 代理 | +| 内网目标 | `127.0.0.1:5683` | +| 自定义域名 | `studio.example.com`(需在云解析到云服务器 IP) | + +此时 HTTPS 可在 NPS 服务端或上层 Nginx 终止,按你现有 NPS 面板习惯配置即可。 + +> 不同 NPS 版本面板字段名略有差异,核心都是:**外网请求 → NPS → 内网 5683**。 + +--- + +## 五、云服务器 HTTPS 反向代理 + +在**云服务器**(已安装 SSL 证书)上配置反代。以下为**示例**,请按你现有环境(宝塔 / 1Panel / 手写 Nginx)调整,**勿复制到 Trading Studio 仓库**。 + +### Nginx 示例(仅文档参考) + +```nginx +server { + listen 443 ssl http2; + server_name studio.example.com; + + ssl_certificate /path/to/fullchain.pem; + ssl_certificate_key /path/to/privkey.pem; + + client_max_body_size 200M; + + location / { + # TCP 隧道时指向 NPS 映射端口;HTTP 模式时指向 NPS 提供的 upstream + proxy_pass http://127.0.0.1:25683; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + } +} +``` + +**Gradio 必须开启 WebSocket 透传**(`Upgrade` / `Connection` 头),否则页面能开但交互/上传会失败。 + +### 证书 + +- 有域名:Let's Encrypt / 云厂商免费证书均可。 +- 仅 IP:部分浏览器 PWA 安装仍要求可信证书,**强烈建议绑定域名**。 + +--- + +## 六、验证穿透与 HTTPS + +1. 内网机:`curl http://127.0.0.1:5683` 返回 200 +2. 云服务器:`curl http://127.0.0.1:25683`(NPS 映射端口)正常 +3. 外网浏览器:`https://studio.example.com` 能打开 Trading Studio +4. 地址栏为 **🔒 安全**(非「不安全」) + +--- + +## 七、安装 App(各端) + +配置好 HTTPS 域名后: + +| 设备 | 操作 | +|------|------| +| Windows Chrome / Edge | 地址栏 **⊕ 安装**,或点击页面 **「安装 App」** | +| 安卓 Chrome | 菜单 → **安装应用** | +| iPad / iPhone Safari | 分享 → **添加到主屏幕**(iOS 无 Chrome 式安装弹窗,但 HTTPS 下可全屏独立运行) | + +若仍只能快捷方式,检查: + +- [ ] 是否仍用 `http://` 或内网 IP 访问 +- [ ] 证书是否有效、是否混合内容报错 +- [ ] NPS / 反代是否透传 WebSocket +- [ ] 浏览器 DevTools → Application → Manifest 是否加载成功 + +--- + +## 八、安全建议 + +1. **不要**将 `5683` 直接端口映射到公网而不加鉴权;至少使用 HTTPS + 强密码或 IP 白名单。 +2. NPS 服务端与客户端使用强密钥,定期更换。 +3. 云服务器防火墙仅开放 443 / NPS 必要端口。 +4. Trading Studio 处理交易录音,建议域名 + HTTPS + 访问控制。 + +--- + +## 九、HTTP 内网直连(不装 App) + +局域网内 `http://192.168.x.x:5683` 可正常使用全部功能,仅 **PWA 安装** 受限。 +点击页面「安装 App」会提示需 HTTPS;功能不受影响。 + +--- + +## 相关文档 + +- 内网部署:`DEPLOY.md` +- 服务器更新:`bash server-update.sh` diff --git a/README.md b/README.md index f9b5980..e7270f1 100644 --- a/README.md +++ b/README.md @@ -1,219 +1,220 @@ -# Trading Studio - -**本地量化交易复盘 → B 站长视频配音生产流水线** - -Trading Studio 是一套运行在 Ubuntu 物理服务器(RTX 3060 Ti)上的自动化配音系统,专为数字资产量化交易员设计。通过「盲录碎碎念 → 本地 GPU 识别 → 局域网大模型严厉润色 → 本地 GPU 声音克隆」的闭环,高效产出 B 站反思类长视频配音,辅助交易纪律的自我进化。 - -**Git 仓库:** https://git.bz121.com/dekun/Trading_Studio.git - ---- - -## 系统定位 - -| 环节 | 技术栈 | 运行位置 | -|------|--------|----------| -| 碎碎念录音转写 | Faster-Whisper (CUDA float16) | 本地 3060 Ti | -| 纪律审判式润色 | Gemma4 Abliterated @ Ollama | 局域网 `192.168.8.64` | -| 固定音色配音 | ChatTTS (CUDA) | 本地 3060 Ti | -| Web 中控 | Gradio | 端口 **5683** | - ---- - -## 架构说明 - -``` -┌─────────────────────────────────────────────────────────────┐ -│ Gradio 中控 (app.py:5683) │ -├──────────────┬──────────────────────┬───────────────────────┤ -│ 音色锁定 │ 音频识别 │ 润色 + 合成 │ -│ tts_service │ whisper_service │ llm_service │ -│ │ │ tts_service │ -└──────┬───────┴──────────┬───────────┴──────────┬────────────┘ - │ │ │ - ▼ ▼ ▼ - speaker_emb.pt Faster-Whisper Ollama HTTP - (本地持久化) CUDA / small 192.168.8.64:11434 - gemma-4-abliterated -``` - -### 模块解耦 - -| 文件 | 职责 | -|------|------| -| `config.py` | Ollama 地址、模型名、Prompt、路径等全局配置 | -| `whisper_service.py` | Faster-Whisper CUDA 转写 | -| `llm_service.py` | 远程 Ollama HTTP 非流式润色 | -| `tts_service.py` | ChatTTS 音色提取与 wav 合成 | -| `app.py` | Gradio 前端与流程编排 | - ---- - -## 快速开始 - -> 完整环境配置请参阅 [DEPLOY.md](./DEPLOY.md) - -### 一键部署(生产环境推荐) - -以 **root** 用户部署到 `/opt/Trading_Studio` 并由 PM2 常驻: - -```bash -sudo -i -git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio -cd /opt/Trading_Studio -chmod +x deploy.sh -bash deploy.sh -``` - -浏览器访问:`http://<服务器IP>:5683` - -日常更新: - -```bash -cd /opt/Trading_Studio && bash deploy.sh update -``` - -### 手动部署(开发调试) - -```bash -git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio -cd /opt/Trading_Studio -python3 -m venv venv -source venv/bin/activate -pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 -pip install -r requirements.txt -python app.py -``` - ---- - -## 使用流程 - -### 首次使用:锁定音色 - -1. 进入 **「音色锁定」** 标签页 -2. 上传 10-30 秒干净人声参考(你的碎碎念盲录样本) -3. (可选)填写参考音频的精确转写,提升 zero-shot 还原度 -4. 点击 **锁定音色** → 生成 `speaker_emb.pt` - -### 日常生产 - -**方式 A — 分步操作:** - -1. **音频极速识别**:上传复盘录音 → Whisper 转写 -2. **Gemma4 纪律审判**:一键润色,生成逻辑清晰、语气严厉的反思稿 -3. **ChatTTS 合成**:输出 24kHz `.wav` 成品配音 - -**方式 B — 一键生产:** - -上传录音后点击 **启动全流程**,系统自动串联三步。 - ---- - -## 核心配置(config.py) - -| 配置项 | 默认值 | -|--------|--------| -| 中控端口 | `5683`(`0.0.0.0` 局域网可访问) | -| Ollama 地址 | `http://192.168.8.64:11434` | -| 模型名称 | `huihui_ai/gemma-4-abliterated:e4b` | -| Whisper 模型 | `small` / CUDA / float16 | -| 音色文件 | `speaker_emb.pt` | -| 音频输出 | `outputs/` 目录 | - ---- - -## PM2 守护运行 - -标准路径 `/opt/Trading_Studio`,root 用户: - -```bash -# 一键部署 + PM2 启动(推荐) -cd /opt/Trading_Studio && bash deploy.sh - -# 或手动 PM2 -pm2 start ecosystem.config.js - -# 常用管理 -pm2 status -pm2 logs trading_studio -bash deploy.sh restart # 重启 -bash deploy.sh update # 拉代码 + 更新依赖 + 重启 -pm2 save && pm2 startup # 开机自启(deploy.sh 已自动配置) -``` - ---- - -## .gitignore 配置 - -提交 Git 时请确保忽略以下产物(已在 `.gitignore` 中预设): - -```gitignore -venv/ -*.wav -*.pt -*.log -uploads/ -outputs/ -``` - -**说明:** - -- `venv/` — Python 虚拟环境,每台机器独立创建 -- `*.wav` — 录音与合成音频,体积大且含隐私 -- `*.pt` — ChatTTS 音色 Embedding 与模型权重 -- `*.log` — 运行日志 - ---- - -## 目录结构 - -``` -Trading_Studio/ -├── deploy.sh # 一键部署脚本(/opt + PM2) -├── app.py # Gradio 主入口 -├── config.py # 全局配置 -├── whisper_service.py # Whisper CUDA 识别 -├── llm_service.py # Ollama 远程润色 -├── tts_service.py # ChatTTS 音色与合成 -├── ecosystem.config.js # PM2 守护配置 -├── requirements.txt # Python 依赖 -├── README.md # 本文件 -├── DEPLOY.md # 部署指南(含一键部署教程) -├── .gitignore -├── speaker_emb.pt # 音色文件(运行时生成,不入库) -├── uploads/ # 上传临时目录 -└── outputs/ # 合成 wav 输出 -``` - -**生产标准路径:** `/opt/Trading_Studio` - ---- - -## 硬件要求 - -- **GPU:** NVIDIA RTX 3060 Ti(8GB 显存,建议锁定 120W 功耗墙) -- **系统:** Ubuntu 22.04 / 24.04 LTS -- **CUDA:** 12.1+(与 PyTorch cu121 匹配) -- **局域网:** 可访问 `192.168.8.64:11434` 的 Ollama 节点 - ---- - -## 常见问题 - -**Q: Whisper 报 CUDA 错误?** -A: 确认 `nvidia-smi` 正常,且未同时运行其他占显存任务。Whisper 使用 `float16` 已针对 8GB 优化。 - -**Q: Ollama 连接失败?** -A: 在服务器上执行 `curl http://192.168.8.64:11434/api/tags` 验证连通性,确认模型已 `ollama pull`。 - -**Q: TTS 音色不稳定?** -A: 重新锁定音色,填写参考音频精确转写,并保持 `temperature=0.3` 低随机性。 - -**Q: 合成音频为空或噪声?** -A: 检查润色文本长度(过短可能导致异常),确认 `speaker_emb.pt` 存在且有效。 - ---- - -## License - -Private — 仅供个人量化交易复盘使用。 +# Trading Studio + +**本地量化交易复盘 → B 站长视频配音生产流水线** + +Trading Studio 是一套运行在 Ubuntu 物理服务器(RTX 3060 Ti)上的自动化配音系统,专为数字资产量化交易员设计。通过「盲录碎碎念 → 本地 GPU 识别 → 局域网大模型严厉润色 → 本地 GPU 声音克隆」的闭环,高效产出 B 站反思类长视频配音,辅助交易纪律的自我进化。 + +**Git 仓库:** https://git.bz121.com/dekun/Trading_Studio.git + +--- + +## 系统定位 + +| 环节 | 技术栈 | 运行位置 | +|------|--------|----------| +| 碎碎念录音转写 | Faster-Whisper (CUDA float16) | 本地 3060 Ti | +| 纪律审判式润色 | Gemma4 Abliterated @ Ollama | 局域网 `192.168.8.64` | +| 固定音色配音 | ChatTTS (CUDA) | 本地 3060 Ti | +| Web 中控 | Gradio | 端口 **5683** | + +--- + +## 架构说明 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Gradio 中控 (app.py:5683) │ +├──────────────┬──────────────────────┬───────────────────────┤ +│ 音色锁定 │ 音频识别 │ 润色 + 合成 │ +│ tts_service │ whisper_service │ llm_service │ +│ │ │ tts_service │ +└──────┬───────┴──────────┬───────────┴──────────┬────────────┘ + │ │ │ + ▼ ▼ ▼ + speaker_emb.pt Faster-Whisper Ollama HTTP + (本地持久化) CUDA / small 192.168.8.64:11434 + gemma-4-abliterated +``` + +### 模块解耦 + +| 文件 | 职责 | +|------|------| +| `config.py` | Ollama 地址、模型名、Prompt、路径等全局配置 | +| `whisper_service.py` | Faster-Whisper CUDA 转写 | +| `llm_service.py` | 远程 Ollama HTTP 非流式润色 | +| `tts_service.py` | ChatTTS 音色提取与 wav 合成 | +| `app.py` | Gradio 前端与流程编排 | + +--- + +## 快速开始 + +> 完整环境配置请参阅 [DEPLOY.md](./DEPLOY.md) + +### 一键部署(生产环境推荐) + +以 **root** 用户部署到 `/opt/Trading_Studio` 并由 PM2 常驻: + +```bash +sudo -i +git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio +cd /opt/Trading_Studio +chmod +x deploy.sh +bash deploy.sh +``` + +浏览器访问:`http://<服务器IP>:5683` + +日常更新: + +```bash +cd /opt/Trading_Studio && bash deploy.sh update +``` + +### 手动部署(开发调试) + +```bash +git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio +cd /opt/Trading_Studio +python3 -m venv venv +source venv/bin/activate +pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 +pip install -r requirements.txt +python app.py +``` + +--- + +## 使用流程 + +### 首次使用:锁定音色 + +1. 进入 **「音色锁定」** 标签页 +2. 上传 10-30 秒干净人声参考(你的碎碎念盲录样本) +3. (可选)填写参考音频的精确转写,提升 zero-shot 还原度 +4. 点击 **锁定音色** → 生成 `speaker_emb.pt` + +### 日常生产 + +**方式 A — 分步操作:** + +1. **音频极速识别**:上传复盘录音 → Whisper 转写 +2. **Gemma4 纪律审判**:一键润色,生成逻辑清晰、语气严厉的反思稿 +3. **ChatTTS 合成**:输出 24kHz `.wav` 成品配音 + +**方式 B — 一键生产:** + +上传录音后点击 **启动全流程**,系统自动串联三步。 + +--- + +## 核心配置(config.py) + +| 配置项 | 默认值 | +|--------|--------| +| 中控端口 | `5683`(`0.0.0.0` 局域网可访问) | +| Ollama 地址 | `http://192.168.8.64:11434` | +| 模型名称 | `huihui_ai/gemma-4-abliterated:e4b` | +| Whisper 模型 | `small` / CUDA / float16 | +| 音色文件 | `speaker_emb.pt` | +| 音频输出 | `outputs/` 目录 | + +--- + +## PM2 守护运行 + +标准路径 `/opt/Trading_Studio`,root 用户: + +```bash +# 一键部署 + PM2 启动(推荐) +cd /opt/Trading_Studio && bash deploy.sh + +# 或手动 PM2 +pm2 start ecosystem.config.js + +# 常用管理 +pm2 status +pm2 logs trading_studio +bash deploy.sh restart # 重启 +bash deploy.sh update # 拉代码 + 更新依赖 + 重启 +pm2 save && pm2 startup # 开机自启(deploy.sh 已自动配置) +``` + +--- + +## .gitignore 配置 + +提交 Git 时请确保忽略以下产物(已在 `.gitignore` 中预设): + +```gitignore +venv/ +*.wav +*.pt +*.log +uploads/ +outputs/ +``` + +**说明:** + +- `venv/` — Python 虚拟环境,每台机器独立创建 +- `*.wav` — 录音与合成音频,体积大且含隐私 +- `*.pt` — ChatTTS 音色 Embedding 与模型权重 +- `*.log` — 运行日志 + +--- + +## 目录结构 + +``` +Trading_Studio/ +├── deploy.sh # 一键部署脚本(/opt + PM2) +├── app.py # Gradio 主入口 +├── config.py # 全局配置 +├── whisper_service.py # Whisper CUDA 识别 +├── llm_service.py # Ollama 远程润色 +├── tts_service.py # ChatTTS 音色与合成 +├── ecosystem.config.js # PM2 守护配置 +├── requirements.txt # Python 依赖 +├── README.md # 本文件 +├── DEPLOY.md # 部署指南(含一键部署教程) +├── PWA_NPS.md # 云服务器反代 + NPS 穿透 + PWA 安装教程 +├── .gitignore +├── speaker_emb.pt # 音色文件(运行时生成,不入库) +├── uploads/ # 上传临时目录 +└── outputs/ # 合成 wav 输出 +``` + +**生产标准路径:** `/opt/Trading_Studio` + +--- + +## 硬件要求 + +- **GPU:** NVIDIA RTX 3060 Ti(8GB 显存,建议锁定 120W 功耗墙) +- **系统:** Ubuntu 22.04 / 24.04 LTS +- **CUDA:** 12.1+(与 PyTorch cu121 匹配) +- **局域网:** 可访问 `192.168.8.64:11434` 的 Ollama 节点 + +--- + +## 常见问题 + +**Q: Whisper 报 CUDA 错误?** +A: 确认 `nvidia-smi` 正常,且未同时运行其他占显存任务。Whisper 使用 `float16` 已针对 8GB 优化。 + +**Q: Ollama 连接失败?** +A: 在服务器上执行 `curl http://192.168.8.64:11434/api/tags` 验证连通性,确认模型已 `ollama pull`。 + +**Q: TTS 音色不稳定?** +A: 重新锁定音色,填写参考音频精确转写,并保持 `temperature=0.3` 低随机性。 + +**Q: 合成音频为空或噪声?** +A: 检查润色文本长度(过短可能导致异常),确认 `speaker_emb.pt` 存在且有效。 + +--- + +## License + +Private — 仅供个人量化交易复盘使用。 diff --git a/app.py b/app.py index 94dc38d..1333b5c 100644 --- a/app.py +++ b/app.py @@ -239,7 +239,7 @@ PWA_HEAD = """ function manualInstallGuide() { var httpWarn = ""; if (!isSecure()) { - httpWarn = "
⚠️ 当前为 HTTP 访问
浏览器只能创建快捷方式,无法弹出系统级「安装 App」。
要一键安装,请配置 HTTPS 反向代理(见服务器 DEPLOY.md)。
"; + httpWarn = "
⚠️ 当前为 HTTP 访问
浏览器只能创建快捷方式,无法弹出系统级「安装 App」。
请通过 HTTPS 域名(云服务器反代 + NPS 穿透)访问,详见 PWA_NPS.md
"; } var steps = isIOS() ? "
  1. 点击 Safari 底部分享按钮 □↑
  2. 选择 「添加到主屏幕」
  3. 点击 添加
" diff --git a/nginx/trading_studio.conf b/nginx/trading_studio.conf deleted file mode 100644 index 25ecc11..0000000 --- a/nginx/trading_studio.conf +++ /dev/null @@ -1,45 +0,0 @@ -# Trading Studio — Nginx HTTPS 反向代理 -# 将 https://你的域名或IP 转发到本机 Gradio 5683 -# -# 安装步骤见 DEPLOY.md「PWA 安装与 HTTPS」 - -# HTTP 自动跳转 HTTPS(可选,不需要可删除此 server 块) -server { - listen 80; - listen [::]:80; - server_name trading.local _; - - return 301 https://$host$request_uri; -} - -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name trading.local _; - - # 自签证书路径(先用 scripts/gen_ssl_cert.sh 生成) - ssl_certificate /etc/nginx/ssl/trading_studio.crt; - ssl_certificate_key /etc/nginx/ssl/trading_studio.key; - - ssl_protocols TLSv1.2 TLSv1.3; - ssl_ciphers HIGH:!aNULL:!MD5; - - client_max_body_size 200M; - - location / { - proxy_pass http://127.0.0.1:5683; - proxy_http_version 1.1; - - # Gradio WebSocket 必需 - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - - proxy_read_timeout 86400s; - proxy_send_timeout 86400s; - } -} diff --git a/scripts/gen_ssl_cert.sh b/scripts/gen_ssl_cert.sh deleted file mode 100644 index 66aeaf1..0000000 --- a/scripts/gen_ssl_cert.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -# 生成本地 HTTPS 自签证书(局域网 PWA 安装用) -# 用法: sudo bash scripts/gen_ssl_cert.sh [服务器局域网IP] -set -euo pipefail - -SERVER_IP="${1:-}" -SSL_DIR="/etc/nginx/ssl" -KEY="${SSL_DIR}/trading_studio.key" -CRT="${SSL_DIR}/trading_studio.crt" - -if [[ "${EUID:-0}" -ne 0 ]]; then - echo "请使用 root: sudo bash scripts/gen_ssl_cert.sh 192.168.x.x" - exit 1 -fi - -if [[ -z "${SERVER_IP}" ]]; then - SERVER_IP=$(hostname -I | awk '{print $1}') - echo "[INFO] 未指定 IP,使用: ${SERVER_IP}" -fi - -mkdir -p "${SSL_DIR}" - -openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ - -keyout "${KEY}" \ - -out "${CRT}" \ - -subj "/CN=TradingStudio/O=Trading/C=CN" \ - -addext "subjectAltName=IP:${SERVER_IP},DNS:trading.local,DNS:localhost" - -chmod 600 "${KEY}" -echo "[OK] 证书已生成:" -echo " ${CRT}" -echo " ${KEY}" -echo "" -echo "手机/平板首次访问 HTTPS 需点「继续访问」信任自签证书,之后即可安装 App。"