feat: 创作工作台统一 + AI味检测/白标 + 移动端补全 + 合规发布闭环
- 新增创作工作台 studio.html:合并选题/内容工厂/文章管理为单一 tab 入口(iframe embed 模式) - 新增 AI味检测模块(ai_slop API + 页面,合规软硬问题分级) - 新增白标品牌配置(branding API + 页面 + deploy 私有化交付包) - 发布闭环:publishing 放宽至 editor + records/mark-published 接口 - 移动端响应式补全(admin/calendar/ai-slop 表格卡片兜底) - 修复菜单幂等播种缺陷(按 path 对齐,避免功能页孤立) - 新增短视频脚本 shortvideo.py 与 2026 市场调研简报
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# ===== 数据库 =====
|
||||
# 默认 SQLite(USE_POSTGRES=false);生产设 true 并填 DATABASE_URL
|
||||
USE_POSTGRES=false
|
||||
# PG_HOST=db
|
||||
# PG_PORT=5432
|
||||
# PG_DATABASE=yzr_nr
|
||||
# PG_USER=yzr
|
||||
# PG_PASSWORD=change_me_strong
|
||||
# DATABASE_URL=postgresql://yzr:yzr_password@db:5432/yzr_nr
|
||||
|
||||
# ===== 安全 =====
|
||||
# 务必修改为随机长字符串
|
||||
SECRET_KEY=change_this_to_a_long_random_secret_key
|
||||
ALGORITHM=HS256
|
||||
ACCESS_TOKEN_EXPIRE_DAYS=7
|
||||
|
||||
# ===== 初始管理员 =====
|
||||
DEFAULT_ADMIN_USERNAME=admin
|
||||
DEFAULT_ADMIN_PASSWORD=admin123
|
||||
|
||||
# ===== 项目根(容器内固定为 /app) =====
|
||||
PROJECT_ROOT=/app
|
||||
|
||||
# ===== 主 LLM(按 provider 填写对应 Key) =====
|
||||
# provider 可选:nvidia / opencode-go / sensenova
|
||||
LLM_PROVIDER=opencode-go
|
||||
LLM_API_KEY=your_main_llm_key
|
||||
LLM_MODEL=deepseek-v4-flash
|
||||
LLM_BASE_URL=https://opencode.ai/zen/go/v1
|
||||
|
||||
# ===== 备用推理通道(opencode-go) =====
|
||||
OPENCODE_API_KEY=your_opencode_key
|
||||
OPENCODE_BASE_URL=https://opencode.ai/zen/go/v1
|
||||
OPENCODE_MODEL=deepseek-v4-flash
|
||||
|
||||
# ===== 配图生成(sensenova,可选) =====
|
||||
SENSENOVA_API_KEY=
|
||||
SENSENOVA_BASE_URL=https://token.sensenova.cn/v1
|
||||
SENSENOVA_IMAGE_MODEL=sensenova-6.7-flash-lite
|
||||
@@ -0,0 +1,20 @@
|
||||
FROM python:3.11-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 安装依赖(先拷 requirements 享受层缓存)
|
||||
COPY platform/backend/requirements.txt /app/platform/backend/requirements.txt
|
||||
RUN pip install --no-cache-dir -r /app/platform/backend/requirements.txt
|
||||
|
||||
# 拷贝整个项目(保持 automation/ scripts/ 等相对路径)
|
||||
COPY . /app
|
||||
|
||||
# 关键:让 initial_data.py 的 PROJECT_ROOT 指向 /app(与运行时一致)
|
||||
ENV PROJECT_ROOT=/app
|
||||
ENV USE_POSTGRES=false
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
|
||||
EXPOSE 8001
|
||||
|
||||
# 若使用 venv 可改为 ./start-platform.sh 8001
|
||||
CMD ["sh", "-c", "cd /app/platform/backend && uvicorn app.main:app --host 0.0.0.0 --port 8001"]
|
||||
@@ -0,0 +1,68 @@
|
||||
# 宇之然内容创作平台 — 私有化 / 白标部署包
|
||||
# YuZhiRan Content Platform — Private / White-label Deployment Package
|
||||
|
||||
本目录用于把「宇之然内容创作平台」作为**可私有化部署的 AI 内容中台**交付给客户(MCN、企业市场部、行业自媒体团队),
|
||||
或作为白标产品转售。平台已内置白标能力:部署后管理员在「白标设置」页即可改平台名称 / Logo / 主色 / 支持邮箱。
|
||||
|
||||
## 交付形态
|
||||
- 单容器即可运行(默认 SQLite,零外部依赖);生产建议挂 PostgreSQL(见下方 docker-compose 注释)。
|
||||
- 全部为静态前端 + FastAPI 后端,无第三方 SaaS 依赖,可跑在内网 / 离线环境。
|
||||
- 符合《AI 生成合成内容标识办法》:AI 稿默认注入显式 + 隐式声明,发布前必须由真人校验(系统不代发)。
|
||||
|
||||
## 一分钟启动(SQLite,零依赖)
|
||||
```bash
|
||||
# 1. 准备后端环境变量(含管理员密码、LLM Key)
|
||||
cp .env.example ../platform/backend/.env
|
||||
vim ../platform/backend/.env # 至少填 LLM_API_KEY / DEFAULT_ADMIN_PASSWORD
|
||||
|
||||
# 2. 构建并启动
|
||||
docker compose up -d --build
|
||||
|
||||
# 3. 访问
|
||||
# 前台: http://<服务器IP>:8001/
|
||||
# 后台: http://<服务器IP>:8001/admin.html (默认 admin / 见 .env 中 DEFAULT_ADMIN_PASSWORD)
|
||||
```
|
||||
|
||||
## 生产部署(PostgreSQL)
|
||||
编辑 `docker-compose.yml`,取消 `db` 服务与 `web` 中 `USE_POSTGRES=true` / `DATABASE_URL` 的注释,
|
||||
并删掉 `web` 里 `USE_POSTGRES=false` 那一行。数据库数据持久化在命名卷 `yzr_pgdata`。
|
||||
|
||||
## 白标(转售 / 客户内网)
|
||||
1. 用管理员登录后台 → 左侧「白标设置」。
|
||||
2. 填入客户的平台名称、Logo URL、主色、支持邮箱 → 保存。
|
||||
3. 前台导航与品牌色即时生效。无需改代码、无需重新构建镜像。
|
||||
(底层读取 `system_configs` 表中 `brand_name / brand_logo / brand_primary_color / brand_support_email`,
|
||||
亦可直接 `UPDATE system_configs SET value='...' WHERE key='brand_name';` 批量初始化多客户。)
|
||||
|
||||
## 数据目录
|
||||
容器内:
|
||||
- 代码:`/app`
|
||||
- SQLite 数据:`/app/platform/backend/yu_zhi_ran.db`
|
||||
- 生成内容/图片:`/app/automation`(建议挂载卷持久化)
|
||||
|
||||
## 环境变量说明(platform/backend/.env)
|
||||
| 变量 | 说明 |
|
||||
| --- | --- |
|
||||
| USE_POSTGRES | true 用 PostgreSQL;false 用 SQLite |
|
||||
| PG_HOST/PG_PORT/PG_DATABASE/PG_USER/PG_PASSWORD | PostgreSQL 连接(USE_POSTGRES=true 时) |
|
||||
| SECRET_KEY | JWT 签名密钥(**务必修改**) |
|
||||
| DEFAULT_ADMIN_USERNAME / DEFAULT_ADMIN_PASSWORD | 初始管理员(首次启动创建) |
|
||||
| LLM_API_KEY / LLM_MODEL / LLM_PROVIDER | 主 LLM(nvidia / opencode-go / sensenova 等) |
|
||||
| OPENCODE_API_KEY / OPENCODE_BASE_URL / OPENCODE_MODEL | 备用推理通道 |
|
||||
| SENSENOVA_API_KEY | 配图生成(可选) |
|
||||
|
||||
## 目录结构(源码)
|
||||
```
|
||||
yu-zhi-ran/
|
||||
├── platform/backend/ # FastAPI + SQLAlchemy 后端
|
||||
├── platform/frontend/ # Vue3 CDN 前端(无需构建)
|
||||
├── automation/ # 选题/案例/生成内容数据
|
||||
├── scripts/ # 采集 / 创作 / 发布 脚本
|
||||
├── tests/ # 集成测试
|
||||
└── deploy/ # 本部署包
|
||||
```
|
||||
|
||||
## 许可与交付建议
|
||||
- 本包以「私有化实例」方式交付,每个客户一套独立部署(数据隔离)。
|
||||
- 建议定价:私有化买断 + 年运维/更新订阅;或按实例数授权。
|
||||
- AI 内容合规责任在内容发布方(客户),平台仅提供声明注入与发布前人工校验闸门。
|
||||
@@ -0,0 +1,39 @@
|
||||
services:
|
||||
web:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: deploy/Dockerfile
|
||||
container_name: yzr-platform
|
||||
ports:
|
||||
- "8001:8001"
|
||||
environment:
|
||||
# 默认 SQLite(零依赖)。生产请改用下方 PostgreSQL 配置:
|
||||
- USE_POSTGRES=false
|
||||
# - USE_POSTGRES=true
|
||||
# - DATABASE_URL=postgresql://yzr:yzr_password@db:5432/yzr_nr
|
||||
- PROJECT_ROOT=/app
|
||||
- PYTHONUNBUFFERED=1
|
||||
volumes:
|
||||
# 持久化生成内容与数据
|
||||
- app_automation:/app/automation
|
||||
- app_content:/app/content
|
||||
# 挂载后端 .env(含管理员密码、LLM Key)
|
||||
- ./backend.env:/app/platform/backend/.env:ro
|
||||
restart: unless-stopped
|
||||
|
||||
# 生产用 PostgreSQL(取消注释并启用上方 USE_POSTGRES=true / DATABASE_URL)
|
||||
# db:
|
||||
# image: postgres:16-alpine
|
||||
# container_name: yzr-db
|
||||
# environment:
|
||||
# - POSTGRES_USER=yzr
|
||||
# - POSTGRES_PASSWORD=yzr_password
|
||||
# - POSTGRES_DB=yzr_nr
|
||||
# volumes:
|
||||
# - yzr_pgdata:/var/lib/postgresql/data
|
||||
# restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
app_automation:
|
||||
app_content:
|
||||
yzr_pgdata:
|
||||
Reference in New Issue
Block a user