跳转至

配置说明

本文档详细介绍 Unifiles 的所有配置选项,包括环境变量、配置文件和运行时配置。

配置优先级

配置加载顺序 (后者覆盖前者):

1. 代码默认值
2. .env 文件
3. 环境变量
4. 运行时配置 (Redis ConfigStore)

环境变量

数据库配置

变量名 描述 默认值 必需
PG_HOST PostgreSQL 主机地址 localhost
PG_PORT PostgreSQL 端口 5432
PG_DATABASE 数据库名称 unifiles
PG_USER 数据库用户名 postgres
PG_PASSWORD 数据库密码 -
PG_POOL_MIN 连接池最小连接数 5
PG_POOL_MAX 连接池最大连接数 20
PG_SSL_MODE SSL 模式 prefer

Redis 配置

变量名 描述 默认值 必需
REDIS_HOST Redis 主机地址 localhost
REDIS_PORT Redis 端口 6379
REDIS_DB 数据库编号 0
REDIS_PASSWORD 密码 -
REDIS_URL 完整连接 URL -

如果设置了 REDIS_URL,将忽略其他 Redis 配置:

REDIS_URL=redis://:password@localhost:6379/0

MinIO/S3 配置

变量名 描述 默认值 必需
MINIO_ENDPOINT MinIO 服务地址 localhost:9000
MINIO_ACCESS_KEY 访问密钥 -
MINIO_SECRET_KEY 秘密密钥 -
MINIO_SECURE 使用 HTTPS false
MINIO_REGION 区域 us-east-1
MINIO_BUCKET_RAW 原始文件桶 unifiles-raw
MINIO_BUCKET_PROCESSED 处理文件桶 unifiles-processed

安全配置

变量名 描述 默认值 必需
SECURITY_SECRET_KEY JWT/加密密钥 -
SECURITY_ACCESS_TOKEN_EXPIRE_MINUTES 访问令牌过期时间 30
SECURITY_REFRESH_TOKEN_EXPIRE_DAYS 刷新令牌过期时间 7
SECURITY_ALGORITHM JWT 算法 HS256
ENCRYPTION_KEY 数据加密密钥 -

重要: SECURITY_SECRET_KEY 必须至少 32 个字符。

API 服务配置

变量名 描述 默认值 必需
API_HOST 监听地址 0.0.0.0
API_PORT 监听端口 8088
API_WORKERS Worker 进程数 1
DEBUG 调试模式 false
LOG_LEVEL 日志级别 INFO

速率限制配置

变量名 描述 默认值 必需
RATE_LIMIT_ENABLED 启用速率限制 true
RATE_LIMIT_DEFAULT 默认请求数/分钟 1000
RATE_LIMIT_ANONYMOUS 匿名请求数/分钟 100

文件处理配置

变量名 描述 默认值 必需
MAX_UPLOAD_SIZE_MB 最大上传大小 100
ALLOWED_FILE_TYPES 允许的文件类型 pdf,docx,xlsx,pptx,txt,md,html
OCR_PROVIDER OCR 提供商 internal
OCR_TIMEOUT_SECONDS OCR 超时时间 300

嵌入模型配置

变量名 描述 默认值 必需
EMBEDDING_PROVIDER 嵌入提供商 openai
EMBEDDING_MODEL 模型名称 text-embedding-3-small
EMBEDDING_DIMENSIONS 向量维度 1536
OPENAI_API_KEY OpenAI API 密钥 - 条件
OPENAI_BASE_URL OpenAI 基础 URL -

可观测性配置

变量名 描述 默认值 必需
OTEL_ENABLED 启用 OpenTelemetry false
OTEL_SERVICE_NAME 服务名称 unifiles
OTEL_EXPORTER_ENDPOINT 导出器端点 localhost:4317
METRICS_ENABLED 启用指标 true
METRICS_PORT 指标端口 9090

配置文件示例

开发环境

# .env.development

# 数据库
PG_HOST=localhost
PG_PORT=5432
PG_DATABASE=unifiles_dev
PG_USER=postgres
PG_PASSWORD=postgres

# Redis
REDIS_HOST=localhost
REDIS_PORT=6379

# MinIO
MINIO_ENDPOINT=localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_SECURE=false

# 安全
SECURITY_SECRET_KEY=dev-secret-key-not-for-production-use

# 调试
DEBUG=true
LOG_LEVEL=DEBUG

# 速率限制 (开发环境禁用)
RATE_LIMIT_ENABLED=false

生产环境

# .env.production

# 数据库
PG_HOST=pg-cluster.internal
PG_PORT=5432
PG_DATABASE=unifiles
PG_USER=unifiles
PG_PASSWORD=${PG_PASSWORD}  # 从密钥管理器获取
PG_POOL_MIN=10
PG_POOL_MAX=50
PG_SSL_MODE=require

# Redis
REDIS_URL=redis://:${REDIS_PASSWORD}@redis-cluster.internal:6379/0

# MinIO/S3
MINIO_ENDPOINT=s3.amazonaws.com
MINIO_ACCESS_KEY=${AWS_ACCESS_KEY_ID}
MINIO_SECRET_KEY=${AWS_SECRET_ACCESS_KEY}
MINIO_SECURE=true
MINIO_REGION=ap-northeast-1

# 安全
SECURITY_SECRET_KEY=${SECURITY_SECRET_KEY}
SECURITY_ACCESS_TOKEN_EXPIRE_MINUTES=15
ENCRYPTION_KEY=${ENCRYPTION_KEY}

# API
API_HOST=0.0.0.0
API_PORT=8088
API_WORKERS=4
DEBUG=false
LOG_LEVEL=INFO

# 速率限制
RATE_LIMIT_ENABLED=true
RATE_LIMIT_DEFAULT=1000

# 文件处理
MAX_UPLOAD_SIZE_MB=100
OCR_TIMEOUT_SECONDS=600

# 嵌入
EMBEDDING_PROVIDER=openai
EMBEDDING_MODEL=text-embedding-3-small
OPENAI_API_KEY=${OPENAI_API_KEY}

# 可观测性
OTEL_ENABLED=true
OTEL_SERVICE_NAME=unifiles-prod
OTEL_EXPORTER_ENDPOINT=otel-collector.internal:4317
METRICS_ENABLED=true

运行时配置

运行时配置存储在 Redis 中,可以动态修改无需重启服务。

使用 API 修改

from unifiles import UnifilesClient

client = UnifilesClient(api_key="sk_...")

# 获取配置
config = client.admin.get_config("rate_limit_enabled")
print(config)  # True

# 设置配置
client.admin.set_config("rate_limit_enabled", False)

使用 CLI 修改

# 获取配置
unifiles config get rate_limit_enabled

# 设置配置
unifiles config set rate_limit_enabled false

# 列出所有配置
unifiles config list

支持的运行时配置

描述 类型
rate_limit_enabled 速率限制开关 bool
rate_limit_default 默认速率限制 int
max_upload_size_mb 最大上传大小 int
enable_quota_check 配额检查开关 bool
maintenance_mode 维护模式 bool

配置验证

启动时验证

服务启动时会验证必需配置:

from unifiles.core.config.settings import settings

# 验证配置
settings.validate()

# 如果缺少必需配置,会抛出异常
# ConfigurationError: Missing required configuration: SECURITY_SECRET_KEY

手动验证

# 验证配置文件
python -c "
from unifiles.core.config.settings import settings
settings.validate()
print('Configuration is valid')
"

敏感配置处理

使用环境变量

# 不要在文件中存储敏感信息
export PG_PASSWORD="your_secure_password"
export SECURITY_SECRET_KEY="your_secret_key"

使用密钥管理器

# 集成 AWS Secrets Manager
import boto3

def get_secret(secret_name: str) -> str:
    client = boto3.client('secretsmanager')
    response = client.get_secret_value(SecretId=secret_name)
    return response['SecretString']

# 在启动脚本中
os.environ['PG_PASSWORD'] = get_secret('unifiles/pg_password')

Kubernetes Secrets

apiVersion: v1
kind: Secret
metadata:
  name: unifiles-secrets
type: Opaque
stringData:
  PG_PASSWORD: "your_password"
  SECURITY_SECRET_KEY: "your_secret_key"

---
# 在 Deployment 中引用
env:
  - name: PG_PASSWORD
    valueFrom:
      secretKeyRef:
        name: unifiles-secrets
        key: PG_PASSWORD

多环境配置

使用配置文件切换

# 开发环境
cp .env.development .env
docker-compose up

# 生产环境
cp .env.production .env
docker-compose -f docker-compose.prod.yml up

使用环境变量覆盖

# 基础配置
source .env.base

# 环境特定覆盖
export PG_HOST=production-db.internal
export DEBUG=false

下一步