Skip to content

环境配置

本文档详细说明了 Sylis 项目的环境变量配置方法。

配置文件位置

sylis/
├── apps/
│   ├── api/.env              # 后端服务配置
│   └── web/.env              # 前端应用配置
└── services/
    └── speech-service/       # 语音服务配置 (可选)
        └── config/env.example

后端环境变量

创建 apps/api/.env 文件:

bash
# ===============================================
# 应用基础配置
# ===============================================
APP_NAME="Sylis"
PORT=3000
NODE_ENV="development"

# ===============================================
# 数据库配置
# ===============================================
# PostgreSQL 数据库连接字符串
DATABASE_URL="postgresql://postgres:12345678@localhost:5432/sylis"

# 数据库连接池配置
DB_POOL_MIN=2
DB_POOL_MAX=10
DB_TIMEOUT=30000

# ===============================================
# Redis 缓存配置
# ===============================================
REDIS_URL="redis://localhost:6379"
REDIS_PASSWORD=""
REDIS_DB=0
REDIS_CONNECT_TIMEOUT=5000
REDIS_COMMAND_TIMEOUT=3000

# ===============================================
# JWT 认证配置
# ===============================================
JWT_SECRET="your-super-secret-jwt-key-change-in-production"
JWT_EXPIRES_IN="30d"
JWT_REFRESH_SECRET="your-refresh-token-secret"
JWT_REFRESH_EXPIRES_IN="90d"

# ===============================================
# 邮件服务配置
# ===============================================
MAILER_HOST="smtp.gmail.com"
MAILER_PORT=587
MAILER_SECURE=false
MAILER_USER="your-email@gmail.com"
MAILER_PASS="your-app-password"
MAILER_FROM="Sylis Team <noreply@sylis.app>"

# ===============================================
# 文件上传配置
# ===============================================
UPLOAD_DEST="./uploads"
MAX_FILE_SIZE=10485760  # 10MB
ALLOWED_FILE_TYPES="audio/wav,audio/mp3,audio/mpeg"

# ===============================================
# 语音服务配置
# ===============================================
SPEECH_SERVICE_URL="http://localhost:8080"
SPEECH_SERVICE_TIMEOUT=30000

# ===============================================
# 安全配置
# ===============================================
CORS_ORIGIN="http://localhost:5173"
API_RATE_LIMIT=100          # 每分钟请求限制
API_RATE_WINDOW=60000       # 限流窗口 (毫秒)

# ===============================================
# 日志配置
# ===============================================
LOG_LEVEL="debug"           # error, warn, info, debug
LOG_FILE_ENABLED=true
LOG_FILE_PATH="./logs"
LOG_MAX_FILES=10
LOG_MAX_SIZE="20m"

# ===============================================
# 监控和性能
# ===============================================
ENABLE_METRICS=true
METRICS_PORT=9090
HEALTH_CHECK_TIMEOUT=5000

前端环境变量

创建 apps/web/.env 文件:

bash
# ===============================================
# API 服务配置
# ===============================================
VITE_APP_API_URL="http://localhost:3000"
VITE_APP_API_TIMEOUT=10000

# ===============================================
# AI 服务配置 - OpenAI
# ===============================================
VITE_APP_AI_PROVIDER="openai"
VITE_APP_AI_KEY="sk-xxxxxxxxxxxxxxxxxx"
VITE_APP_AI_URL="https://api.openai.com/v1"
VITE_APP_AI_MODEL="gpt-3.5-turbo"
VITE_APP_AI_MAX_TOKENS=2000
VITE_APP_AI_TEMPERATURE=0.7

# ===============================================
# 语音服务配置
# ===============================================
VITE_APP_SPEECH_URL="http://localhost:8080"
VITE_APP_SPEECH_TIMEOUT=30000
VITE_APP_AUDIO_FORMAT="wav"
VITE_APP_SAMPLE_RATE=16000

# ===============================================
# 应用功能开关
# ===============================================
VITE_APP_ENABLE_OFFLINE=true
VITE_APP_ENABLE_ANALYTICS=false
VITE_APP_ENABLE_PWA=true
VITE_APP_DEBUG_MODE=true

# ===============================================
# UI 配置
# ===============================================
VITE_APP_DEFAULT_THEME="light"        # light, dark, auto
VITE_APP_DEFAULT_LANGUAGE="zh-CN"     # zh-CN, en-US
VITE_APP_ENABLE_ANIMATIONS=true

# ===============================================
# 缓存配置
# ===============================================
VITE_APP_CACHE_VERSION="1.0.0"
VITE_APP_CACHE_DURATION=86400000      # 24小时 (毫秒)
VITE_APP_OFFLINE_CACHE_SIZE=50        # MB

# ===============================================
# 开发配置
# ===============================================
VITE_APP_MOCK_API=false
VITE_APP_SHOW_DEVTOOLS=true
VITE_APP_LOG_LEVEL="debug"

AI 服务兼容配置

Sylis 支持多种 AI 服务提供商,您可以根据需要选择:

OpenAI

bash
VITE_APP_AI_PROVIDER="openai"
VITE_APP_AI_URL="https://api.openai.com/v1"
VITE_APP_AI_KEY="sk-xxxxxxxxxxxxxxxxxx"
VITE_APP_AI_MODEL="gpt-3.5-turbo"

DeepSeek

bash
VITE_APP_AI_PROVIDER="deepseek"
VITE_APP_AI_URL="https://api.deepseek.com/v1"
VITE_APP_AI_KEY="sk-xxxxxxxxxxxxxxxxxx"
VITE_APP_AI_MODEL="deepseek-chat"

Moonshot (月之暗面)

bash
VITE_APP_AI_PROVIDER="moonshot"
VITE_APP_AI_URL="https://api.moonshot.cn/v1"
VITE_APP_AI_KEY="sk-xxxxxxxxxxxxxxxxxx"
VITE_APP_AI_MODEL="moonshot-v1-8k"

本地 Ollama

bash
VITE_APP_AI_PROVIDER="ollama"
VITE_APP_AI_URL="http://localhost:11434/v1"
VITE_APP_AI_KEY="not-required"
VITE_APP_AI_MODEL="llama2"

Azure OpenAI

bash
VITE_APP_AI_PROVIDER="azure"
VITE_APP_AI_URL="https://your-resource.openai.azure.com"
VITE_APP_AI_KEY="your-azure-api-key"
VITE_APP_AI_MODEL="gpt-35-turbo"
VITE_APP_AI_DEPLOYMENT="your-deployment-name"

语音服务配置

语音服务通常无需额外配置,但如果需要自定义,可以创建 services/speech-service/config/.env:

bash
# ===============================================
# 语音服务配置
# ===============================================
HOST="0.0.0.0"
PORT=8080
DEBUG=true

# ===============================================
# WeNet 模型配置
# ===============================================
MODEL_PATH="./models"
ACOUSTIC_MODEL="wenet_model.pkl"
LANGUAGE_MODEL="language_model.arpa"
DICTIONARY_PATH="./config/words.txt"

# ===============================================
# 音频处理配置
# ===============================================
SAMPLE_RATE=16000
AUDIO_FORMAT="wav"
MAX_AUDIO_LENGTH=30      # 秒
MIN_AUDIO_LENGTH=0.5     # 秒

# ===============================================
# 语音识别配置
# ===============================================
RECOGNITION_THRESHOLD=0.5
CONFIDENCE_THRESHOLD=0.7
ENABLE_DETAILED_FEEDBACK=true

# ===============================================
# 性能配置
# ===============================================
MAX_CONCURRENT_REQUESTS=5
REQUEST_TIMEOUT=30       # 秒
WORKER_PROCESSES=2

🐳 Docker 环境配置

如果使用 Docker 部署,可以通过 docker-compose.yml 配置环境变量:

yaml
version: "3.8"

services:
  api:
    build: ./apps/api
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://postgres:password@postgres:5432/sylis
      - REDIS_URL=redis://redis:6379
      - JWT_SECRET=${JWT_SECRET}
    depends_on:
      - postgres
      - redis

  web:
    build: ./apps/web
    environment:
      - VITE_APP_API_URL=http://api:3000
      - VITE_APP_AI_KEY=${AI_API_KEY}

  speech:
    build: ./services/speech-service
    environment:
      - HOST=0.0.0.0
      - PORT=8080

  postgres:
    image: postgres:16
    environment:
      - POSTGRES_DB=sylis
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password

  redis:
    image: redis:7-alpine

生产环境安全配置

必须修改的配置项

bash
# 后端 (.env)
JWT_SECRET="生成一个强随机字符串"
JWT_REFRESH_SECRET="另一个强随机字符串"
DATABASE_URL="生产环境数据库连接"
REDIS_PASSWORD="Redis密码"
NODE_ENV="production"

# 前端 (.env)
VITE_APP_API_URL="https://api.yourdomain.com"
VITE_APP_DEBUG_MODE=false
VITE_APP_MOCK_API=false

生成安全密钥

bash
# 生成 JWT 密钥
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"

# 或使用 openssl
openssl rand -hex 64

环境特定配置

开发环境

bash
# apps/api/.env.development
NODE_ENV="development"
LOG_LEVEL="debug"
CORS_ORIGIN="http://localhost:5173"
API_RATE_LIMIT=1000

# apps/web/.env.development
VITE_APP_DEBUG_MODE=true
VITE_APP_MOCK_API=false
VITE_APP_LOG_LEVEL="debug"

测试环境

bash
# apps/api/.env.test
NODE_ENV="test"
DATABASE_URL="postgresql://postgres:password@localhost:5432/sylis_test"
LOG_LEVEL="warn"
DISABLE_AUTH=true

# apps/web/.env.test
VITE_APP_API_URL="http://localhost:3001"
VITE_APP_MOCK_API=true
VITE_APP_DEBUG_MODE=false

生产环境

bash
# apps/api/.env.production
NODE_ENV="production"
DATABASE_URL="your-production-database-url"
LOG_LEVEL="error"
API_RATE_LIMIT=100
CORS_ORIGIN="https://yourdomain.com"

# apps/web/.env.production
VITE_APP_API_URL="https://api.yourdomain.com"
VITE_APP_DEBUG_MODE=false
VITE_APP_ENABLE_ANALYTICS=true

🔧 配置验证

验证后端配置

bash
# 检查数据库连接
pnpm --filter ./apps/api run db:check

# 检查 Redis 连接
pnpm --filter ./apps/api run redis:check

# 验证所有配置
pnpm --filter ./apps/api run config:validate

验证前端配置

bash
# 检查 API 连接
curl $VITE_APP_API_URL/health

# 检查语音服务
curl $VITE_APP_SPEECH_URL/health

# 验证构建配置
pnpm --filter ./apps/web run build:check

配置模板

快速开发配置

bash
# 复制开发环境模板
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env

# 使用默认配置启动
pnpm start

自定义配置向导

bash
# 运行配置向导
pnpm config:setup

# 或手动配置
pnpm config:wizard

常见配置问题

数据库连接问题

bash
# 检查数据库是否运行
docker ps | grep postgres

# 测试连接
psql $DATABASE_URL -c "SELECT 1;"

Redis 连接问题

bash
# 检查 Redis 是否运行
docker ps | grep redis

# 测试连接
redis-cli -u $REDIS_URL ping

AI 服务配置问题

bash
# 测试 API 密钥
curl -H "Authorization: Bearer $VITE_APP_AI_KEY" \
     $VITE_APP_AI_URL/models

跨域问题

bash
# 确保后端 CORS 配置正确
CORS_ORIGIN="http://localhost:5173,https://yourdomain.com"

配置完成后,请运行 pnpm health 验证所有服务是否正常工作。如有问题,请查看 故障排除指南