feat: formalize live collector douyin deployment
This commit is contained in:
@@ -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
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -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`
|
||||||
|
|||||||
1980
collector-service/app/douyin_features.py
Normal file
1980
collector-service/app/douyin_features.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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__])
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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 仓库并形成正式提交
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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. 把改动整理成提交并推送
|
||||||
|
|||||||
Reference in New Issue
Block a user