Files
xiaoxia-saas/docs/ci-env-vars.md
CI Bot c36ec5e780
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 18s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 46s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 41s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m16s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
docs: 修复 ci-env-vars.md 中 OSS_ENDPOINT 拼写 aliiyuncs → aliyuncs
与代码修复保持同步(PR #261 代码审计发现)
2026-07-13 15:47:29 +08:00

11 KiB
Raw Permalink Blame History

CI 必需环境变量清单

本文档整理小虾 SaaS 项目中所有从环境变量读取的配置项,明确哪些是 CI 测试必须的、哪些是可选的。 最后更新:2026-07-09

目录


一、配置来源说明

项目的环境变量配置主要来自以下几处:

来源 文件路径 说明
API 主配置 apps/api/app/config.py pydantic Settings 类,API 服务核心配置
Worker 配置 apps/worker/worker_app/core/config.py pydantic WorkerSettings 类,Worker 服务配置
共享配置 packages/shared/config.py pydantic SharedSettings 类,API + Worker 共享配置
直接读取 各模块中 os.environ / os.getenv 散落在各业务模块中的直接读取

注意pydantic-settings 配置默认 case_sensitive=False,即环境变量名不区分大小写,但习惯上使用大写。


二、CI 必需环境变量(P0

以下变量是 CI 运行测试必须配置的,缺失会导致测试启动失败或核心功能异常。

变量名 用途说明 默认值 影响范围
DATABASE_URL 数据库连接字符串 postgresql+psycopg://postgres:postgres@localhost:5432/xiaoxia_saas 集成测试、 Alembic 迁移验证
USE_IN_MEMORY_DB 是否使用内存数据库(SQLite false 单元测试(设为 true 可跳过 PostgreSQL 依赖)
JWT_SECRET_KEY JWT 签名密钥,无安全默认值,必须显式设置 None(启动校验失败) 所有涉及认证的 API 测试

说明

  • 单元测试通过 USE_IN_MEMORY_DB=true 使用 SQLite 内存数据库,无需 PostgreSQL
  • 集成测试需要真实 PostgreSQL,需设置 DATABASE_URL
  • JWT_SECRET_KEY 在测试文件中通过 os.environ.setdefault() 设置了测试用默认值,CI 中可不额外配置,但生产环境必须配置

三、可选环境变量(有默认值)

以下变量都有合理的默认值,CI 中可以不配置,使用默认值即可。

3.1 应用基础配置

变量名 用途说明 默认值
APP_NAME 应用名称 xiaoxia-saas
APP_VERSION 应用版本号 0.1.61 / unknown
ENVIRONMENT 运行环境标识 development
DEBUG 是否开启调试模式 true
APP_BASE_URL 应用基础 URL(用于生成邮件链接等) http://localhost:3000
API_HOST API 服务绑定地址 0.0.0.0
API_PORT API 服务端口 8000
API_PREFIX API 路由前缀 /api/v1
APP_ENV 环境标识(用于加载 .env.{env} 文件) development
LOG_LEVEL 日志级别 INFO

3.2 数据库连接池配置

变量名 用途说明 默认值
DATABASE_POOL_SIZE 连接池大小 20
DATABASE_MAX_OVERFLOW 最大溢出连接数 10 (API) / 40 (Worker)
DATABASE_POOL_TIMEOUT 获取连接超时时间(秒) 30
DATABASE_POOL_RECYLE / DATABASE_POOL_RECYCLE 连接回收时间(秒) 3600
AUTO_CREATE_SCHEMA 是否自动创建表结构 false

3.3 Redis / Celery 配置

变量名 用途说明 默认值
REDIS_URL Redis 连接地址 redis://localhost:6379/0
REDIS_MAX_CONNECTION Redis 最大连接数 50
ENABLE_REDIS_SESSIONS 是否启用 Redis 会话存储 false
CELERY_BROKER_URL / BROKER_URL Celery Broker 地址 redis://localhost:6379/0
CELERY_RESULT_BACKEND / RESULT_BACKEND Celery 结果后端 redis://localhost:6379/1

3.4 JWT 配置

变量名 用途说明 默认值
JWT_ALGORITHM JWT 签名算法 HS256(隐式默认)
JWT_ACCESS_TOKEN_EXPIRE_MINUTES Access Token 过期时间(分钟) 30(隐式默认)
JWT_REFRESH_TOKEN_EXPIRE_DAYS Refresh Token 过期时间(天) 30(隐式默认)
JWT_SECRET_KEY_OLD 旧 JWT 密钥(用于密钥轮换) None
SECRET_ROTATION_DAYS 密钥轮换建议天数 90

3.5 邮件配置

变量名 用途说明 默认值
ENABLE_EMAIL_DELIVERY 是否启用邮件发送 false
SMTP_HOST SMTP 服务器地址 smtp.gmail.com
SMTP_PORT SMTP 端口 587
SMTP_USER SMTP 用户名 ""(空)
SMTP_PASSWORD SMTP 密码 ""(空)
SMTP_FROM_EMAIL 发件人邮箱 ""(空)
SMTP_FROM_NAME 发件人名称 小虾 SaaS
SMTP_USE_TLS 是否使用 TLS true

3.6 OSS 阿里云存储配置

变量名 用途说明 默认值
OSS_ENDPOINT OSS Endpoint oss-cn-hangzhou.aliyuncs.com
OSS_ACCESS_KEY_ID OSS Access Key ID ""(空)
OSS_ACCESS_KEY_SECRET OSS Access Key Secret ""(空)
OSS_BUCKET_NAME OSS Bucket 名称 xiaoxia-autocut
OSS_DIRECT_UPLOAD_MAX_MB / MAX_UPLOAD_SIZE_MB 直传最大文件大小(MB 2000
OSS_DIRECT_UPLOAD_EXPIRE_SECONDS 直传签名过期时间(秒) 900

3.7 CosyVoice 语音合成配置

变量名 用途说明 默认值
COSYVOICE_API_KEY CosyVoice API Key ""(空)
COSYVOICE_BASE_URL CosyVoice API 地址 https://dashscope.aliyuncs.com/api/v1/services/aigc/text2audio
COSYVOICE_MODEL CosyVoice 模型 cosyvoice-v1
COSYVOICE_VOICE 默认音色 longxiaochun
COSYVOICE_SAMPLE_RATE 采样率 22050
COSYVOICE_FORMAT 输出格式 mp3

3.8 CORS 配置

变量名 用途说明 默认值
CORS_ORIGINS_RAW CORS 允许的源(逗号分隔) http://localhost:3000,http://localhost:5173,http://localhost:8000

3.9 文件存储 / 生成文件配置

变量名 用途说明 默认值
GENERATED_FILES_DIR 生成文件本地存储目录 /app/generated
GENERATED_FILES_URL_PREFIX 生成文件访问 URL 前缀 /generated-files
VIDEO_OUTPUT_DIR 视频输出目录 {tempdir}/video_output
PUBLIC_API_BASE_URL 公开 API 基础 URL https://api.xiaoxiajianji.com

3.10 监控 / 指标配置

变量名 用途说明 默认值
METRICS_AUTH_TOKEN Prometheus 指标接口认证 Token ""(空,不启用认证)

3.11 内部 API 配置

变量名 用途说明 默认值
INTERNAL_API_KEYS 内部 API 调用密钥列表(逗号分隔) ""(空)

四、测试专用环境变量

以下变量仅在测试或冒烟测试脚本中使用。

变量名 用途说明 默认值 使用位置
SMOKE_TEST_PASSWORD 冒烟测试用的测试账号密码 changeme scripts/smoke_*.py
MIGRATION_SINCE_REVISION 迁移安全检查的起始版本 None scripts/check_migration_safety.py
MIGRATION_DIFF_AGAINST 迁移 diff 对比的目标分支/版本 None scripts/check_migration_safety.py

五、Worker 服务环境变量

以下变量主要用于 Worker(Celery)服务,CI 的单元/集成测试通常不涉及。

变量名 用途说明 默认值
WORKER_NAME Worker 名称 xiaoxia-saas-worker
WORKER_CONCURRENCY Worker 并发数 4
WORKER_MAX_TASKS_PER_CHILD 每个子进程最大任务数 1000

六、当前 CI 配置对照

当前 .gitea/workflows/ci-cd.ymlvalidate job 配置的环境变量:

变量名 CI 配置值 是否必需 备注
DATABASE_URL postgresql+psycopg://postgres:postgres@127.0.0.1:5432/xiaoxia_saas Job 级别配置
USE_IN_MEMORY_DB "false"Job 级) / "true"(单元测试 step 级) 单元测试 step 覆盖为 true
JWT_SECRET_KEY (未配置) ⚠️ 测试内置 测试文件中通过 setdefault 设置了测试密钥

6.1 CI 环境变量现状评估

  • 数据库配置完备DATABASE_URL + USE_IN_MEMORY_DB 已正确配置
  • JWT 密钥:测试代码内置默认值,CI 可正常运行
  • ⚠️ 缺少 Redis 配置:但当前测试不依赖 Redis,使用默认值即可
  • ⚠️ 缺少邮件/OSS/语音配置:均为可选,CI 中使用空默认值不影响核心测试

6.2 建议后续补充

如果未来测试覆盖到以下功能,需要在 CI 中补充对应配置:

  1. Redis 相关测试 → 配置 REDIS_URL
  2. 邮件发送测试 → 配置 ENABLE_EMAIL_DELIVERY 及 SMTP 相关变量
  3. OSS 上传测试 → 配置 OSS 相关变量(或使用 mock)
  4. 语音合成测试 → 配置 CosyVoice 相关变量(或使用 mock

附录:环境变量读取位置索引

pydantic Settings 类

  • apps/api/app/config.pySettings 类(API 主配置)
  • apps/worker/worker_app/core/config.pyWorkerSettings 类(Worker 配置)
  • packages/shared/config.pySharedSettings 类(共享配置)

直接 os.environ / os.getenv 读取

变量名 文件位置
VIDEO_OUTPUT_DIR apps/worker/video_processing/video_compose_service.pyapps/worker/worker_app/tasks/compose_video.py
INTERNAL_API_KEYS apps/api/app/api/routes/auth.py
APP_ENV / ENV apps/api/app/api/routes/auth.py、各 config.py 的 get_settings()
GENERATED_FILES_DIR apps/worker/worker_app/tasks/generation.pyapps/api/main.pyscripts/cleanup_generated_files.py
GENERATED_FILES_URL_PREFIX apps/worker/worker_app/tasks/generation.pyapps/api/main.pyapps/api/app/core/storage.py
PUBLIC_API_BASE_URL apps/worker/worker_app/tasks/generation.py
METRICS_AUTH_TOKEN apps/api/app/middleware/prometheus_metrics.py
APP_VERSION apps/api/app/middleware/prometheus_metrics.py
SMOKE_TEST_PASSWORD scripts/smoke_*.py
MIGRATION_SINCE_REVISION scripts/check_migration_safety.py
MIGRATION_DIFF_AGAINST scripts/check_migration_safety.py
DATABASE_URL alembic/env.py