feat: formalize live collector douyin deployment

This commit is contained in:
kris
2026-03-20 13:13:03 +08:00
parent 1c539abc6e
commit a906e0ceda
8 changed files with 2017 additions and 9 deletions

View File

@@ -2,7 +2,10 @@ DEFAULT_EXTERNAL_BASE_URL=http://test.hyzq.net:8081
LOCAL_OPENAI_BASE_URL=http://127.0.0.1:8317/v1 LOCAL_OPENAI_BASE_URL=http://127.0.0.1:8317/v1
LOCAL_OPENAI_MODEL=GLM-5 LOCAL_OPENAI_MODEL=GLM-5
LOCAL_OPENAI_API_KEY= LOCAL_OPENAI_API_KEY=
# Host-side collector runs can keep using N8N_BASE_URL.
N8N_BASE_URL=http://127.0.0.1:5670 N8N_BASE_URL=http://127.0.0.1:5670
# Dockerized collector should use the internal n8n service address.
COLLECTOR_N8N_BASE_URL=http://n8n:5678
N8N_ANALYSIS_WEBHOOK_PATH=/webhook/storyforge-analysis N8N_ANALYSIS_WEBHOOK_PATH=/webhook/storyforge-analysis
N8N_REAL_CUT_WEBHOOK_PATH=/webhook/storyforge-real-cut N8N_REAL_CUT_WEBHOOK_PATH=/webhook/storyforge-real-cut
N8N_AI_VIDEO_WEBHOOK_PATH=/webhook/storyforge-ai-video N8N_AI_VIDEO_WEBHOOK_PATH=/webhook/storyforge-ai-video

View File

@@ -37,6 +37,18 @@ cp .env.example .env
docker compose up -d --build docker compose up -d --build
``` ```
如果 `collector` 跑在 Docker 里,建议保留:
```bash
COLLECTOR_N8N_BASE_URL=http://n8n:5678
```
如果你单独在宿主机启动 `collector-service`,它读取的仍然是:
```bash
N8N_BASE_URL=http://127.0.0.1:5670
```
默认会启动: 默认会启动:
- `collector-service``http://127.0.0.1:8081` - `collector-service``http://127.0.0.1:8081`

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@ import re
import secrets import secrets
import shutil import shutil
import subprocess import subprocess
import sys
import uuid import uuid
from datetime import datetime, timezone from datetime import datetime, timezone
from pathlib import Path from pathlib import Path
@@ -18,6 +19,7 @@ from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from .database import Database, utc_now from .database import Database, utc_now
from .douyin_features import register_douyin_routes
from .integrations import AsrHttpClient, CutVideoClient, HuobaoDramaClient, N8NClient from .integrations import AsrHttpClient, CutVideoClient, HuobaoDramaClient, N8NClient
from .openai_compat import OpenAICompatClient from .openai_compat import OpenAICompatClient
@@ -2821,3 +2823,6 @@ def publish_app_update(request: PublishAppUpdateRequest, admin: dict[str, Any] =
(request.platform, request.channel, request.versionCode), (request.platform, request.channel, request.versionCode),
) )
return {"saved": True, "action": "published", "updateId": row["id"] if row else 0} return {"saved": True, "action": "published", "updateId": row["id"] if row else 0}
register_douyin_routes(app, sys.modules[__name__])

View File

@@ -32,7 +32,7 @@ services:
LOCAL_OPENAI_BASE_URL: ${LOCAL_OPENAI_BASE_URL:-http://host.docker.internal:8317/v1} LOCAL_OPENAI_BASE_URL: ${LOCAL_OPENAI_BASE_URL:-http://host.docker.internal:8317/v1}
LOCAL_OPENAI_MODEL: ${LOCAL_OPENAI_MODEL:-GLM-5} LOCAL_OPENAI_MODEL: ${LOCAL_OPENAI_MODEL:-GLM-5}
LOCAL_OPENAI_API_KEY: ${LOCAL_OPENAI_API_KEY:-} LOCAL_OPENAI_API_KEY: ${LOCAL_OPENAI_API_KEY:-}
N8N_BASE_URL: ${N8N_BASE_URL:-http://n8n:5678} N8N_BASE_URL: ${COLLECTOR_N8N_BASE_URL:-http://n8n:5678}
N8N_ANALYSIS_WEBHOOK_PATH: ${N8N_ANALYSIS_WEBHOOK_PATH:-/webhook/storyforge-analysis} N8N_ANALYSIS_WEBHOOK_PATH: ${N8N_ANALYSIS_WEBHOOK_PATH:-/webhook/storyforge-analysis}
N8N_REAL_CUT_WEBHOOK_PATH: ${N8N_REAL_CUT_WEBHOOK_PATH:-/webhook/storyforge-real-cut} N8N_REAL_CUT_WEBHOOK_PATH: ${N8N_REAL_CUT_WEBHOOK_PATH:-/webhook/storyforge-real-cut}
N8N_AI_VIDEO_WEBHOOK_PATH: ${N8N_AI_VIDEO_WEBHOOK_PATH:-/webhook/storyforge-ai-video} N8N_AI_VIDEO_WEBHOOK_PATH: ${N8N_AI_VIDEO_WEBHOOK_PATH:-/webhook/storyforge-ai-video}

View File

@@ -1,6 +1,7 @@
# StoryForge 现状审计 # StoryForge 现状审计
日期2026-03-18 日期2026-03-18
更新2026-03-20
## 结论 ## 结论
@@ -145,10 +146,11 @@
- 内部编排接口 - 内部编排接口
- `docker-compose.yml` 已改为 `collector + n8n + cli-proxy-api` - `docker-compose.yml` 已改为 `collector + n8n + cli-proxy-api`
- `n8n` 工作流导出文件已纳入仓库 - `n8n` 工作流导出文件已纳入仓库
- `collector-service` 的 live 运行态已回归到 `StoryForge-gitea` 自身源码构建,不再依赖 `/Users/kris/code/Fastgpt/collector-service/app` 的临时 bind mount
- `collector-service` 现已在 live `8081` 提供 `/v2/douyin/*` 接口,并保留原有 `real-cut / ai-video / content-source-sync` 路由
## 当前主要风险 ## 当前主要风险
1. `cutvideo` 的素材传输还未完整闭环 1. 抖音 / 小红书账号级内容源还未做真实平台验证
2. Windows 机器还未部署支持 `POST /api/uploads``cutvideo` 新版本 2. `huobao-drama` 已在本机旧改版实例上跑通,但兼容补丁尚未迁到 upstream 仓库并形成正式提交
3. 抖音 / 小红书账号级内容源还未做真实平台验证 3. `douyin` 新接口已上线 live但还需要补一轮真实账号级回归确认页面抓取、手工 payload 和相似账号分析都稳定
4. `huobao-drama` 已在本机旧改版实例上跑通,但兼容补丁尚未迁到 upstream 仓库并形成正式提交

View File

@@ -13,7 +13,8 @@ cp .env.example .env
至少确认这些变量: 至少确认这些变量:
- `N8N_BASE_URL=http://127.0.0.1:5670` - `N8N_BASE_URL=http://127.0.0.1:5670`,用于你在宿主机单独运行 `collector-service`
- `COLLECTOR_N8N_BASE_URL=http://n8n:5678`,用于 Docker 里的 `collector`
- `ORCHESTRATOR_SHARED_SECRET=storyforge-local-secret` - `ORCHESTRATOR_SHARED_SECRET=storyforge-local-secret`
- `CUTVIDEO_BASE_URL=http://<windows-lan-ip>:7860` - `CUTVIDEO_BASE_URL=http://<windows-lan-ip>:7860`
- `CUTVIDEO_API_KEY=` 如果 Windows 服务启用了鉴权 - `CUTVIDEO_API_KEY=` 如果 Windows 服务启用了鉴权
@@ -27,6 +28,7 @@ cp .env.example .env
说明: 说明:
- 如果你单独重建 `collector`,要确保运行时仍带上 `CUTVIDEO_BASE_URL`,否则容器会退回空值 - 如果你单独重建 `collector`,要确保运行时仍带上 `CUTVIDEO_BASE_URL`,否则容器会退回空值
- `collector` 容器不要直接复用宿主机的 `N8N_BASE_URL=http://127.0.0.1:5670`,否则容器内会连回自己并导致 webhook 调度失败
- 当前已验证可用的 Windows `cutvideo` 地址是 `http://192.168.31.18:7860` - 当前已验证可用的 Windows `cutvideo` 地址是 `http://192.168.31.18:7860`
- 当前已验证可用的本机 HTTP ASR 入口是 `http://host.docker.internal:8088/transcribe` - 当前已验证可用的本机 HTTP ASR 入口是 `http://host.docker.internal:8088/transcribe`
- 如果你用的是本机 `mac-whisper-service`,建议同时以 `WHISPER_TIMEOUT_MS=120000` 启动,否则长视频会直接 504 - 如果你用的是本机 `mac-whisper-service`,建议同时以 `WHISPER_TIMEOUT_MS=120000` 启动,否则长视频会直接 504

View File

@@ -1,6 +1,7 @@
# StoryForge MVP 状态 # StoryForge MVP 状态
日期2026-03-18 日期2026-03-18
更新2026-03-20
## 已跑通或已完成代码接通 ## 已跑通或已完成代码接通
@@ -16,6 +17,8 @@
- 本地大模型内容分析、二创文案、分镜生成 - 本地大模型内容分析、二创文案、分镜生成
- Windows `cutvideo` API 调度与结果回写接口 - Windows `cutvideo` API 调度与结果回写接口
- `upload_video -> source_job_id -> cutvideo` 自动 staging 闭环 - `upload_video -> source_job_id -> cutvideo` 自动 staging 闭环
- `collector` live 运行态已从临时源码挂载切回 `StoryForge-gitea` 正式镜像
- live `collector` 已挂出 `/v2/douyin/*` 能力并通过认证接口验证
- 本机 `huobao-drama` API 调度、首尾帧生成、视频生成与结果回写接口 - 本机 `huobao-drama` API 调度、首尾帧生成、视频生成与结果回写接口
- FastGPT 运行时依赖删除 - FastGPT 运行时依赖删除
@@ -29,14 +32,15 @@
- 实拍剪辑链路:`job_5ebd829c3f2144bca5c941183e75bdcd` - 实拍剪辑链路:`job_5ebd829c3f2144bca5c941183e75bdcd`
- 实拍剪辑自动 staging 联调:`job_01a6f283cbda42e4ae692b268b811a50` - 实拍剪辑自动 staging 联调:`job_01a6f283cbda42e4ae692b268b811a50`
- AI 视频链路:`job_01828c40377747cf914b51be360cc333` - AI 视频链路:`job_01828c40377747cf914b51be360cc333`
- Windows `cutvideo` 部署后联调:`job_5838515ed5c34679acd55a52cfcd424b`
## 尚未完全跑通 ## 尚未完全跑通
- 抖音 / 小红书账号级内容源还未做真实平台验证;`bilibili` 账号级 URL 已跑通 - 抖音 / 小红书账号级内容源还未做真实平台验证;`bilibili` 账号级 URL 已跑通
- Windows 机器上的 `cutvideo` 需要同步部署带 `POST /api/uploads` 的版本,当前自动 staging 已在本机联调通过 - `douyin` 账号分析接口已上线到 live `collector`,但还没有跑过真实生产账号样例
## 下一步优先级 ## 下一步优先级
1. `cutvideo` 新上传接口部署到 Windows 机器 1. 补抖音 / 小红书账号级真实验证与必要的 URL 归一化
2. 补抖音 / 小红书账号级真实验证与必要的 URL 归一化 2. `collector` live 切换结果和部署回滚说明固化到仓库
3. 把改动整理成提交并推送 3. 把改动整理成提交并推送