112f0eb277
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check push changed paths (push) Successful in 4s
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Validate - Style (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 33s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m9s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m11s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m28s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m44s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 4m6s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m13s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging API Image (push) Successful in 4m41s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 5m17s
AI Code Review / AI Code Review (pull_request) Successful in 6m51s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 3m5s
CI/CD Pipeline / Integration Tests (push) Successful in 9m58s
CI/CD Pipeline / Validate - Style (push) Successful in 10m20s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 2m53s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 3m20s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 3m33s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 11m57s
CI/CD Pipeline / Validate - Security (push) Successful in 31m27s
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
283 lines
7.7 KiB
Bash
283 lines
7.7 KiB
Bash
# ============================================================
|
||
# 小虾 SaaS — Staging 环境配置模板
|
||
# ============================================================
|
||
# 使用方式:复制为 /var/lib/xiaoxia-saas-staging/.env 并填入实际密钥
|
||
# 敏感值标记为 ${PLACEHOLDER},部署前必须替换为真实值
|
||
# ============================================================
|
||
|
||
|
||
# ==================== 应用基本配置 ====================
|
||
|
||
# 应用名称
|
||
APP_NAME=xiaoxia-saas
|
||
|
||
# 环境标识
|
||
APP_ENV=staging
|
||
|
||
# Staging 开启 Debug 模式便于排查问题
|
||
DEBUG=true
|
||
|
||
# 应用基础 URL(前端页面地址)
|
||
APP_BASE_URL=https://staging.xiaoxiajianji.com
|
||
|
||
# 对外公开的 API 基础 URL(用于生成回调链接等)
|
||
PUBLIC_API_BASE_URL=https://staging-api.xiaoxiajianji.com
|
||
|
||
# API 服务监听地址
|
||
API_HOST=0.0.0.0
|
||
|
||
# API 服务监听端口
|
||
API_PORT=8000
|
||
|
||
# 生产/预发布环境关闭自动建表,使用 alembic migration
|
||
AUTO_CREATE_SCHEMA=false
|
||
|
||
|
||
# ==================== 数据库配置 ====================
|
||
|
||
# 数据库连接串(格式:postgresql+psycopg://user:password@host:port/dbname)
|
||
# ${DATABASE_URL} — 替换为实际的 Staging PostgreSQL 连接串
|
||
DATABASE_URL=${DATABASE_URL}
|
||
|
||
# 连接池大小(常驻连接数)
|
||
DATABASE_POOL_SIZE=20
|
||
|
||
# 连接池最大溢出连接数(pool_size + max_overflow = 最大并发连接数)
|
||
DATABASE_MAX_OVERFLOW=10
|
||
|
||
# 获取连接超时时间(秒)
|
||
DATABASE_POOL_TIMEOUT=30
|
||
|
||
# 连接回收时间(秒),防止数据库端主动断开导致的死连接
|
||
DATABASE_POOL_RECYCLE=3600
|
||
|
||
# 不使用内存数据库
|
||
USE_IN_MEMORY_DB=false
|
||
|
||
|
||
# ==================== Redis 配置 ====================
|
||
|
||
# Redis 连接 URL(格式:redis://[:password@]host:port/db)
|
||
# ${REDIS_URL} — 替换为实际的 Staging Redis 连接串
|
||
REDIS_URL=${REDIS_URL}
|
||
|
||
# 启用 Redis Session 存储(多实例部署必须开启)
|
||
ENABLE_REDIS_SESSIONS=true
|
||
|
||
|
||
# ==================== Celery 任务队列 ====================
|
||
|
||
# Celery Broker(任务分发),使用 Redis db0
|
||
CELERY_BROKER_URL=${CELERY_BROKER_URL}
|
||
|
||
# Celery Result Backend(任务结果存储),使用 Redis db1
|
||
CELERY_RESULT_BACKEND=${CELERY_RESULT_BACKEND}
|
||
|
||
|
||
# ==================== Worker 配置 ====================
|
||
|
||
# Worker 进程名称
|
||
WORKER_NAME=xiaoxia-saas-worker
|
||
|
||
# Worker 并发数(同时执行的任务数)
|
||
WORKER_CONCURRENCY=1
|
||
|
||
# 每个子进程最多处理多少任务后重启(防止内存泄漏)
|
||
WORKER_MAX_TASKS_PER_CHILD=1000
|
||
|
||
|
||
# ==================== JWT 认证配置 ====================
|
||
|
||
# JWT 签名密钥 — 必须设置为强随机字符串(至少32字符)
|
||
# ${JWT_SECRET_KEY} — 替换为实际的随机密钥
|
||
JWT_SECRET_KEY=${JWT_SECRET_KEY}
|
||
|
||
# JWT 签名算法
|
||
JWT_ALGORITHM=HS256
|
||
|
||
# Access Token 过期时间(分钟)
|
||
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=1440
|
||
|
||
# Refresh Token 过期时间(天)
|
||
JWT_REFRESH_TOKEN_EXPIRE_DAYS=30
|
||
|
||
|
||
# ==================== 邮件配置 ====================
|
||
|
||
# 邮件功能尚未上线,暂时关闭
|
||
ENABLE_EMAIL_DELIVERY=false
|
||
|
||
# SMTP 服务器地址
|
||
SMTP_HOST=smtp.gmail.com
|
||
|
||
# SMTP 端口
|
||
SMTP_PORT=587
|
||
|
||
# SMTP 用户名(邮件功能上线后配置)
|
||
SMTP_USER=
|
||
|
||
# SMTP 密码(邮件功能上线后配置)
|
||
SMTP_PASSWORD=
|
||
|
||
# 发件人邮箱(邮件功能上线后配置)
|
||
SMTP_FROM_EMAIL=
|
||
|
||
# 发件人显示名称
|
||
SMTP_FROM_NAME=小虾 SaaS
|
||
|
||
# 启用 TLS
|
||
SMTP_USE_TLS=true
|
||
|
||
|
||
# ==================== 阿里云 OSS 配置 ====================
|
||
|
||
# OSS 区域 endpoint
|
||
OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com
|
||
|
||
# OSS Access Key ID
|
||
# ${OSS_ACCESS_KEY_ID} — 替换为实际的 OSS Access Key ID
|
||
OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID}
|
||
|
||
# OSS Access Key Secret
|
||
# ${OSS_ACCESS_KEY_SECRET} — 替换为实际的 OSS Access Key Secret
|
||
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET}
|
||
|
||
# OSS Bucket 名称
|
||
OSS_BUCKET_NAME=xiaoxia-autocut
|
||
|
||
# 直传最大文件大小(MB)
|
||
OSS_DIRECT_UPLOAD_MAX_MB=2000
|
||
|
||
# 直传签名有效期(秒)
|
||
OSS_DIRECT_UPLOAD_EXPIRE_SECONDS=900
|
||
|
||
|
||
# ==================== MinIO 配置(Staging 独有)====================
|
||
# Staging 环境使用 MinIO 替代 OSS 进行文件存储测试
|
||
|
||
# MinIO 服务 Endpoint
|
||
# ${MINIO_ENDPOINT} — 替换为实际的 MinIO 地址
|
||
MINIO_ENDPOINT=${MINIO_ENDPOINT}
|
||
|
||
# MinIO Access Key
|
||
# ${MINIO_ACCESS_KEY} — 替换为实际的 MinIO Access Key
|
||
MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
|
||
|
||
# MinIO Secret Key
|
||
# ${MINIO_SECRET_KEY} — 替换为实际的 MinIO Secret Key
|
||
MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
|
||
|
||
# MinIO Bucket 名称
|
||
MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME}
|
||
|
||
# 是否使用 SSL 连接 MinIO
|
||
MINIO_USE_SSL=false
|
||
|
||
|
||
# ==================== CORS 配置 ====================
|
||
|
||
# 允许跨域的前端域名列表,逗号分隔
|
||
CORS_ORIGINS_RAW=https://staging.xiaoxiajianji.com,https://staging-api.xiaoxiajianji.com
|
||
|
||
|
||
# ==================== 生成文件路径 ====================
|
||
|
||
# 容器内生成文件目录(固定值,勿改)
|
||
GENERATED_FILES_DIR=/app/generated
|
||
|
||
# 生成文件 URL 前缀
|
||
GENERATED_FILES_URL_PREFIX=/generated-files
|
||
|
||
# 主机上生成文件目录(供 Docker volume bind mount 使用)
|
||
GENERATED_FILES_HOST_DIR=/var/lib/xiaoxia-saas-staging/generated
|
||
|
||
|
||
# ==================== 渲染引擎配置 ====================
|
||
|
||
# 渲染引擎选择:legacy(旧引擎,稳定)/ unified(新架构)
|
||
RENDER_ENGINE=legacy
|
||
|
||
|
||
# ==================== CosyVoice 语音合成 ====================
|
||
|
||
# 阿里云百灵语音合成服务 API Key
|
||
# ${COSYVOICE_API_KEY} — 替换为实际的 CosyVoice API Key
|
||
COSYVOICE_API_KEY=${COSYVOICE_API_KEY}
|
||
|
||
# API 基础 URL
|
||
COSYVOICE_BASE_URL=https://dashscope.aliyuncs.com/api/v1
|
||
|
||
# 模型选择:cosyvoice-v3-flash(推荐)/ cosyvoice-v3-plus
|
||
COSYVOICE_MODEL=cosyvoice-v3-flash
|
||
|
||
# 音色:v3 系列系统音色带 _v3 后缀
|
||
COSYVOICE_VOICE=longxiaoxia_v3
|
||
|
||
# 采样率
|
||
COSYVOICE_SAMPLE_RATE=22050
|
||
|
||
# 输出格式
|
||
COSYVOICE_FORMAT=wav
|
||
|
||
# 音色克隆模型名(固定值)
|
||
COSYVOICE_CLONE_MODEL=voice-enrollment
|
||
|
||
# DashScope 通用 API Key(与 CosyVoice 共用)
|
||
DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}
|
||
|
||
|
||
# ==================== MediaKit 视频理解(火山引擎)====================
|
||
|
||
MEDIAKIT_API_KEY=${MEDIAKIT_API_KEY}
|
||
MEDIAKIT_BASE_URL=https://mediakit.cn-beijing.volces.com/api/v1
|
||
MEDIAKIT_TIMEOUT=60
|
||
|
||
|
||
# ==================== 豆包大模型 (火山引擎 ARK) ====================
|
||
|
||
# 豆包大模型 API Key(ARK 平台颁发)
|
||
# ${DOUBAO_API_KEY} — 替换为实际的 ARK API Key
|
||
DOUBAO_API_KEY=${DOUBAO_API_KEY}
|
||
|
||
# 模型 Endpoint ID(在 ARK 控制台创建推理接入点后获得)
|
||
DOUBAO_MODEL=${DOUBAO_MODEL}
|
||
|
||
# API Base URL
|
||
DOUBAO_BASE_URL=${DOUBAO_BASE_URL}
|
||
|
||
# 请求超时(秒)
|
||
DOUBAO_TIMEOUT=60
|
||
|
||
# 最大重试次数
|
||
DOUBAO_MAX_RETRIES=2
|
||
|
||
# 视觉模型 Endpoint ID(支持图片/视频理解的模型)
|
||
DOUBAO_VISION_MODEL=${DOUBAO_VISION_MODEL}
|
||
|
||
|
||
# ==================== 微信开放平台 OAuth(网页扫码登录)====================
|
||
# 回调域名:xiaoxiajianji.com(微信开放平台已配置)
|
||
WECHAT_OPEN_APP_ID=${WECHAT_APP_ID}
|
||
WECHAT_OPEN_APP_SECRET=${WECHAT_APP_SECRET}
|
||
WECHAT_OPEN_REDIRECT_URI=https://staging.xiaoxiajianji.com/auth/wechat/callback
|
||
|
||
# 抖音 cookies 文件路径(yt-dlp 已废弃,保留兼容)
|
||
DOUYIN_COOKIES_FILE=/app/configs/douyin_cookies.txt
|
||
DOUYIN_DEBUG_ERRORS=false
|
||
|
||
|
||
# ==================== 抖音视频解析(三层兜底)====================
|
||
# P0: App Feed API(免费,零 Key)— 内置,无需配置
|
||
# P1: TikHub API(付费,https://tikhub.io)
|
||
TIKHUB_API_KEY=${TIKHUB_API_KEY}
|
||
# P2: apizero.cn(国内付费,https://apizero.cn)
|
||
APIZERO_API_KEY=${APIZERO_API_KEY}
|
||
|
||
# ==================== GPU MuseTalk Worker(反向轮询) ====================
|
||
GPU_WORKER_TOKEN=${GPU_WORKER_TOKEN}
|
||
GPU_TASK_TIMEOUT_SECONDS=900
|
||
USE_GPU_LIPSYNC=true
|
||
GPU_LIPSYNC_POLL_INTERVAL=5
|
||
GPU_LIPSYNC_WAIT_TIMEOUT=1200
|
||
GPU_WORKER_STALE_SECONDS=300
|