docs: record xai video production deploy

This commit is contained in:
2026-06-03 23:57:46 +08:00
parent 3f216727bb
commit 3f5dfdc465
2 changed files with 7 additions and 0 deletions

View File

@@ -32,6 +32,12 @@
"storage" : "api\/.env \/ deploy\/.env.production",
"type" : "api_key"
},
{
"description" : "xAI \/ Grok Imagine Video 独立视频通道 API Key生产只放服务器 deploy\/.env.production 的 XAI_VIDEO_API_KEY本地开发放 api\/.env 或 deploy\/.env.local不入库",
"name" : "XAI_VIDEO_API_KEY",
"storage" : "api\/.env \/ deploy\/.env.local \/ deploy\/.env.production",
"type" : "api_key"
},
{
"description" : "生产网页登录备用账号已停用,当前只允许飞书免登录;如需紧急恢复,需在服务器 deploy\/.env.production 显式开启 PASSWORD_AUTH_ENABLED=true。备用账号密码只放服务器 \/root\/skg-marketing-studio-login.txt后端会话密钥只放服务器 deploy\/.env.production 的 WEB_AUTH_SESSION_SECRET",
"name" : "WEB_LOGIN",

View File

@@ -28,6 +28,7 @@
## 部署事实
- 平台VPS `76.13.31.179`Ubuntu 24.04 / Docker Compose / Coolify Traefik
- Grok Imagine Video 生产接入2026-06-03`3f21672` 已通过 `./scripts/deploy-prod-safe.sh` 部署到 `/opt/skg-marketing-studio`,部署前生产备份为 `/opt/skg-marketing-studio-backups/skg-marketing-preserve-20260603155046.tgz`。本次先在服务器 `deploy/.env.production` 补齐 `VIDEO_MODEL_XAI=grok-imagine-video``XAI_VIDEO_API_BASE_URL=https://ai.skg.com/ezlink/xai``XAI_VIDEO_API_KEY`、创建/轮询路径,补配置前已生成备份 `deploy/.env.production.xai-backup-20260603155008`,真实 key 不入库。生产 Docker 重建后 `./scripts/verify-prod-docker.sh` 通过web/api/postgres Up、`web:no_local_api_refs``/` 302、`/login/` 200、缺失 `_next` 资源 404、未登录 `/api/health` 401、`api:ytdlp_cookie_args []``api:health ok db connected`);生产 API 容器确认 `/health` 能力中 `xai_video_configured=true`,视频模型列表含 `seedance``seedance_hd``xai:grok-imagine-video`。生产真实 HTTP 验收已直接创建测试 job `1c3e63e5791b` 并触发 video `71fab5ea21d4`xAI provider id `e33bcb9e-d3dc-9a7c-92c4-480b4879f438`,最终 `/jobs/1c3e63e5791b/storyboard-videos/71fab5ea21d4.mp4` 返回 `206 video/mp4``content-range bytes 0-1023/1125433`确认创建、轮询、MP4 下载链路通畅。
- Agent Cut 独立预览服务器:`2.24.28.41`Ubuntu 24.04 / Docker Compose / 裸端口 `4290`),部署目录 `/opt/skg-marketing-studio`Compose 入口 `docker-compose.standalone.yml`,访问地址 `http://2.24.28.41:4290/agent/`。该入口用于“一分钟二创出片终端”预览:用户只提交 TikTok 链接和产品图,后端 `AgentRun` 状态机负责下载、抽帧、规划、生成、自动重跑、审片和合成。
- Agent Cut 独立预览验证2026-05-21已在 `2.24.28.41``/opt/skg-marketing-studio``docker-compose.standalone.yml` 启动 `skg-agent-api` / `skg-agent-web`;独立 compose 通过网络别名兼容 Nginx 的 `skg-marketing-api` upstream。该裸 IP HTTP 入口的服务器 `deploy/.env.production` 需要 `WEB_AUTH_COOKIE_SECURE=false`;本次已补齐 `WEB_AUTH_*` 后重启验证通过:未登录 `/agent/` 返回 302 到 `/login/`,登录后 `/agent/` 返回 200`/api/agent-runs` 返回数组,容器内 `/health` 返回 `ok:true``auth_configured:true`
- 稳定性/安全加固2026-05-30`3572dde`(含 `3ed3f72` fix(api) / `b56d517` fix(canvas) / `6201ee9` fix(web))已通过 `./scripts/deploy-prod-safe.sh` 部署到 `/opt/skg-marketing-studio`,部署前备份为 `/opt/skg-marketing-studio-backups/skg-marketing-preserve-20260529181045.tgz`。本次后端:`run()` 子进程加超时(下载 `DOWNLOAD_TIMEOUT_SECONDS` 默认 600s、其余 300s超时 kill 并标 failed、新增 `validate_source_url()` SSRF 白名单(拒绝 `file://`/私有·环回·链路本地 IP域名走 `SOURCE_URL_ALLOWED_HOSTS`默认主流短视频平台、per-job `RLock` 保护 `save_state`/`update`/`update_generated_video` 与 retry 的 check-and-set、`db.py` 改用 `psycopg_pool` 连接池且写失败 `logging.error` 暴露、只读媒体 GET 改用不创建目录的 `job_path()`、多处 `Image.open()``with` 防 fd 泄漏;新增后端依赖 `psycopg-pool`(未装自动回退)。前端:画布 VideoNode 上传改走后端 `/jobs/upload` 拿稳定 URL 并在 `cleanNodeForStorage``blob:``useCachedMediaUrl` 用真实 `blob.size` 统计缓存并补 catch 竞态校验、读参考图补 credentials、删除与 Canvas 层重复的节点级视频轮询与 `api/video.js` 死代码、`request.js` timeout 改 60s+withCredentials首页/详情页视频轮询改为容错(连续失败 10 次才停、agent 页预览 objectURL 移入 effect、登录页 pointermove rAF 节流。飞书登录自动跳转行为按确认保留不动。本地 `python3 -m py_compile api/main.py api/db.py``cd web && pnpm build`canvas + next通过本机 Docker web 镜像因 next/font 拉取 Google Fonts 受限未重建,生产服务器构建正常)。生产 Docker 重建后 `./scripts/verify-prod-docker.sh` 通过web/api/postgres Up、`web:no_local_api_refs``/` 302、`/login/` 200、缺失 `_next` 资源 404、未登录 `/api/health` 401、`api:ytdlp_cookie_args []``api:health ok db connected`);生产 API 容器内复验 `psycopg_pool 3.2.4` 生效、`validate_source_url``file://`/`169.254.169.254`/`evil.com` 返回 400 而 `tiktok.com` 放行、`run()` 默认 timeout=300、`DOWNLOAD_TIMEOUT_SECONDS=600`。新增可选 env`DOWNLOAD_TIMEOUT_SECONDS``SOURCE_URL_ALLOWED_HOSTS``DB_POOL_MAX_SIZE`