Skip to content

环境变量配置

AnythingLLM 通过环境变量进行配置,提供灵活的部署选项。本指南详细介绍所有可用的环境变量、配置方法和最佳实践。

核心配置

服务器配置

bash
# 服务器端口(默认:3001)
SERVER_PORT=3001

# 服务器主机地址(默认:localhost)
SERVER_HOST=0.0.0.0

# 应用程序 URL(用于生成链接)
APP_URL=https://your-domain.com

# 环境模式(development/production)
NODE_ENV=production

# 日志级别(error/warn/info/debug)
LOG_LEVEL=info

# 启用详细日志
VERBOSE_LOGGING=false

安全配置

bash
# JWT 密钥(必须设置,用于用户认证)
JWT_SECRET=your-super-secret-jwt-key-here

# 密码哈希盐值轮数(默认:12)
BCRYPT_ROUNDS=12

# 会话超时时间(秒,默认:86400 = 24小时)
SESSION_TIMEOUT=86400

# 启用 HTTPS 重定向
FORCE_HTTPS=true

# CORS 允许的源(多个用逗号分隔)
CORS_ORIGINS=https://yourdomain.com,https://app.yourdomain.com

# 安全头配置
SECURITY_HEADERS=true

数据库配置

bash
# 数据库类型(sqlite/postgres/mysql)
DATABASE_TYPE=postgres

# SQLite 配置
SQLITE_DB_PATH=./storage/anythingllm.db

# PostgreSQL 配置
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=anythingllm
DB_PASSWORD=your_secure_password
DB_NAME=anythingllm
DB_SSL=false

# MySQL 配置
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USERNAME=anythingllm
MYSQL_PASSWORD=your_secure_password
MYSQL_DATABASE=anythingllm

# 数据库连接池配置
DB_MAX_CONNECTIONS=20
DB_IDLE_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=2000

AI 模型配置

OpenAI 配置

bash
# OpenAI API 密钥
OPENAI_API_KEY=sk-your-openai-api-key

# OpenAI 组织 ID(可选)
OPENAI_ORGANIZATION_ID=org-your-organization-id

# 默认模型
OPENAI_MODEL=gpt-4

# API 基础 URL(用于代理或自定义端点)
OPENAI_BASE_URL=https://api.openai.com/v1

# 请求超时时间(毫秒)
OPENAI_TIMEOUT=60000

# 最大重试次数
OPENAI_MAX_RETRIES=3

Azure OpenAI 配置

bash
# Azure OpenAI 配置
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
AZURE_OPENAI_API_KEY=your-azure-api-key
AZURE_OPENAI_API_VERSION=2023-12-01-preview

# 部署名称
AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4
AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=text-embedding-ada-002

Anthropic Claude 配置

bash
# Anthropic API 密钥
ANTHROPIC_API_KEY=sk-ant-your-anthropic-api-key

# 默认模型
ANTHROPIC_MODEL=claude-3-opus-20240229

# API 基础 URL
ANTHROPIC_BASE_URL=https://api.anthropic.com

# 请求超时时间
ANTHROPIC_TIMEOUT=60000

本地模型配置

bash
# Ollama 配置
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama2

# LM Studio 配置
LM_STUDIO_BASE_URL=http://localhost:1234/v1
LM_STUDIO_MODEL=local-model

# 自定义 LLM 端点
CUSTOM_LLM_ENDPOINT=http://your-llm-server:8000/v1
CUSTOM_LLM_API_KEY=your-custom-api-key
CUSTOM_LLM_MODEL=custom-model-name

向量数据库配置

Pinecone 配置

bash
# Pinecone API 密钥
PINECONE_API_KEY=your-pinecone-api-key

# Pinecone 环境
PINECONE_ENVIRONMENT=us-west1-gcp

# Pinecone 索引名称
PINECONE_INDEX=anythingllm-index

Weaviate 配置

bash
# Weaviate 端点
WEAVIATE_ENDPOINT=http://localhost:8080

# Weaviate API 密钥(如果需要)
WEAVIATE_API_KEY=your-weaviate-api-key

# Weaviate 类名
WEAVIATE_CLASS_NAME=AnythingLLMDocument

Qdrant 配置

bash
# Qdrant 端点
QDRANT_ENDPOINT=http://localhost:6333

# Qdrant API 密钥(如果需要)
QDRANT_API_KEY=your-qdrant-api-key

# Qdrant 集合名称
QDRANT_COLLECTION=anythingllm_collection

Chroma 配置

bash
# Chroma 端点
CHROMA_ENDPOINT=http://localhost:8000

# Chroma 集合名称
CHROMA_COLLECTION=anythingllm_collection

# Chroma 认证令牌(如果需要)
CHROMA_AUTH_TOKEN=your-chroma-token

存储配置

本地存储

bash
# 存储根目录
STORAGE_DIR=./storage

# 文档存储目录
DOCUMENT_STORAGE_DIR=./storage/documents

# 临时文件目录
TEMP_DIR=./storage/tmp

# 最大文件大小(字节)
MAX_FILE_SIZE=10485760

# 允许的文件类型
ALLOWED_FILE_TYPES=pdf,txt,docx,md,csv

AWS S3 配置

bash
# AWS S3 配置
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
AWS_REGION=us-east-1
AWS_S3_BUCKET=your-bucket-name

# S3 端点(用于兼容 S3 的服务)
AWS_S3_ENDPOINT=https://s3.amazonaws.com

# 强制路径样式
AWS_S3_FORCE_PATH_STYLE=false

Google Cloud Storage 配置

bash
# Google Cloud 项目 ID
GOOGLE_CLOUD_PROJECT_ID=your-project-id

# 服务账户密钥文件路径
GOOGLE_APPLICATION_CREDENTIALS=./path/to/service-account.json

# GCS 存储桶名称
GCS_BUCKET_NAME=your-bucket-name

Azure Blob Storage 配置

bash
# Azure 存储账户名称
AZURE_STORAGE_ACCOUNT_NAME=your-storage-account

# Azure 存储账户密钥
AZURE_STORAGE_ACCOUNT_KEY=your-storage-key

# Azure 容器名称
AZURE_STORAGE_CONTAINER_NAME=anythingllm-documents

嵌入模型配置

OpenAI Embeddings

bash
# OpenAI 嵌入模型
EMBEDDING_MODEL_PROVIDER=openai
OPENAI_EMBEDDING_MODEL=text-embedding-ada-002

Azure OpenAI Embeddings

bash
# Azure OpenAI 嵌入配置
EMBEDDING_MODEL_PROVIDER=azure-openai
AZURE_OPENAI_EMBEDDING_DEPLOYMENT=text-embedding-ada-002

本地嵌入模型

bash
# 本地嵌入模型配置
EMBEDDING_MODEL_PROVIDER=local
LOCAL_EMBEDDING_MODEL_PATH=./models/sentence-transformers
LOCAL_EMBEDDING_MODEL_NAME=all-MiniLM-L6-v2

# 嵌入维度
EMBEDDING_DIMENSIONS=384

# 批处理大小
EMBEDDING_BATCH_SIZE=100

认证配置

单点登录 (SSO)

bash
# 启用 SSO
SSO_ENABLED=true

# SAML 配置
SAML_ISSUER=https://your-app.com
SAML_CALLBACK_URL=https://your-app.com/auth/saml/callback
SAML_ENTRY_POINT=https://your-idp.com/saml/sso
SAML_CERT_PATH=./certs/saml.crt

# OAuth 2.0 配置
OAUTH_CLIENT_ID=your-oauth-client-id
OAUTH_CLIENT_SECRET=your-oauth-client-secret
OAUTH_REDIRECT_URI=https://your-app.com/auth/oauth/callback
OAUTH_AUTHORIZATION_URL=https://provider.com/oauth/authorize
OAUTH_TOKEN_URL=https://provider.com/oauth/token
OAUTH_USER_INFO_URL=https://provider.com/oauth/userinfo

# LDAP 配置
LDAP_URL=ldap://your-ldap-server:389
LDAP_BIND_DN=cn=admin,dc=example,dc=com
LDAP_BIND_PASSWORD=your-ldap-password
LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
LDAP_SEARCH_FILTER=(uid={{username}})

多因素认证 (MFA)

bash
# 启用 MFA
MFA_ENABLED=true

# TOTP 配置
TOTP_ISSUER=AnythingLLM
TOTP_WINDOW=1

# SMS 配置(Twilio)
TWILIO_ACCOUNT_SID=your-twilio-account-sid
TWILIO_AUTH_TOKEN=your-twilio-auth-token
TWILIO_PHONE_NUMBER=+1234567890

# 邮件配置(用于邮件验证码)
EMAIL_MFA_ENABLED=true

邮件配置

SMTP 配置

bash
# SMTP 服务器配置
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password

# 发件人信息
MAIL_FROM_ADDRESS=noreply@yourdomain.com
MAIL_FROM_NAME=AnythingLLM

# 邮件模板目录
MAIL_TEMPLATES_DIR=./templates/emails

邮件服务提供商

bash
# SendGrid 配置
SENDGRID_API_KEY=your-sendgrid-api-key

# Mailgun 配置
MAILGUN_API_KEY=your-mailgun-api-key
MAILGUN_DOMAIN=your-mailgun-domain

# AWS SES 配置
AWS_SES_REGION=us-east-1
AWS_SES_ACCESS_KEY_ID=your-ses-access-key
AWS_SES_SECRET_ACCESS_KEY=your-ses-secret-key

缓存配置

Redis 配置

bash
# Redis 连接配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your-redis-password
REDIS_DB=0

# Redis 连接池配置
REDIS_MAX_CONNECTIONS=10
REDIS_MIN_CONNECTIONS=2

# 缓存 TTL(秒)
CACHE_TTL=3600

# 会话存储在 Redis
SESSION_STORE=redis

内存缓存配置

bash
# 内存缓存配置
MEMORY_CACHE_ENABLED=true
MEMORY_CACHE_MAX_SIZE=100
MEMORY_CACHE_TTL=1800

监控和日志

应用监控

bash
# 启用应用监控
MONITORING_ENABLED=true

# Prometheus 指标端点
PROMETHEUS_ENABLED=true
PROMETHEUS_PORT=9090

# 健康检查端点
HEALTH_CHECK_ENABLED=true
HEALTH_CHECK_PATH=/health

# 性能监控
PERFORMANCE_MONITORING=true

日志配置

bash
# 日志文件路径
LOG_FILE_PATH=./logs/anythingllm.log

# 日志轮转配置
LOG_MAX_SIZE=10m
LOG_MAX_FILES=5

# 结构化日志
STRUCTURED_LOGGING=true

# 日志格式(json/text)
LOG_FORMAT=json

# 错误报告
ERROR_REPORTING_ENABLED=true
SENTRY_DSN=your-sentry-dsn

外部监控服务

bash
# DataDog 配置
DATADOG_API_KEY=your-datadog-api-key
DATADOG_APP_KEY=your-datadog-app-key

# New Relic 配置
NEW_RELIC_LICENSE_KEY=your-newrelic-license-key
NEW_RELIC_APP_NAME=AnythingLLM

# Grafana 配置
GRAFANA_URL=http://localhost:3000
GRAFANA_API_KEY=your-grafana-api-key

安全和合规

数据保护

bash
# 数据加密
DATA_ENCRYPTION_ENABLED=true
DATA_ENCRYPTION_KEY=your-32-character-encryption-key

# 数据保留策略
DATA_RETENTION_DAYS=365
AUTO_DELETE_EXPIRED_DATA=true

# 数据匿名化
DATA_ANONYMIZATION_ENABLED=true

审计日志

bash
# 启用审计日志
AUDIT_LOGGING_ENABLED=true
AUDIT_LOG_FILE=./logs/audit.log

# 审计事件类型
AUDIT_EVENTS=login,logout,document_upload,workspace_create,user_create

# 审计日志保留期
AUDIT_LOG_RETENTION_DAYS=2555  # 7年

合规配置

bash
# GDPR 合规
GDPR_COMPLIANCE_ENABLED=true
DATA_SUBJECT_RIGHTS_ENABLED=true

# HIPAA 合规
HIPAA_COMPLIANCE_ENABLED=false
PHI_ENCRYPTION_REQUIRED=true

# SOC 2 合规
SOC2_COMPLIANCE_ENABLED=true
ACCESS_LOGGING_REQUIRED=true

性能优化

应用性能

bash
# 工作进程数量
WORKER_PROCESSES=4

# 每个进程的最大内存
MAX_MEMORY_PER_WORKER=512m

# 请求超时时间
REQUEST_TIMEOUT=30000

# 文件上传超时
UPLOAD_TIMEOUT=300000

# 并发限制
MAX_CONCURRENT_REQUESTS=100

数据库性能

bash
# 查询超时时间
DB_QUERY_TIMEOUT=30000

# 连接超时时间
DB_CONNECTION_TIMEOUT=5000

# 慢查询阈值
SLOW_QUERY_THRESHOLD=1000

# 查询缓存
QUERY_CACHE_ENABLED=true
QUERY_CACHE_TTL=300

向量搜索性能

bash
# 向量搜索配置
VECTOR_SEARCH_TOP_K=10
VECTOR_SEARCH_THRESHOLD=0.7

# 批量处理配置
BATCH_PROCESSING_ENABLED=true
BATCH_SIZE=50
BATCH_TIMEOUT=5000

# 索引优化
INDEX_OPTIMIZATION_ENABLED=true
INDEX_REBUILD_INTERVAL=86400

开发和调试

开发模式配置

bash
# 开发模式
NODE_ENV=development
DEBUG_MODE=true

# 热重载
HOT_RELOAD_ENABLED=true

# 源映射
SOURCE_MAPS_ENABLED=true

# 详细错误信息
VERBOSE_ERRORS=true

调试配置

bash
# 调试端口
DEBUG_PORT=9229

# 调试日志
DEBUG_LOGGING=true
DEBUG_NAMESPACES=anythingllm:*

# 性能分析
PROFILING_ENABLED=false
PROFILING_INTERVAL=60000

# 内存使用监控
MEMORY_MONITORING=true
MEMORY_ALERT_THRESHOLD=80

配置文件示例

生产环境配置 (.env.production)

bash
# 生产环境配置
NODE_ENV=production
SERVER_PORT=3001
SERVER_HOST=0.0.0.0
APP_URL=https://anythingllm.yourdomain.com

# 安全配置
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
FORCE_HTTPS=true
CORS_ORIGINS=https://yourdomain.com

# 数据库配置
DATABASE_TYPE=postgres
DB_HOST=db.yourdomain.com
DB_PORT=5432
DB_USERNAME=anythingllm
DB_PASSWORD=your-secure-database-password
DB_NAME=anythingllm_prod
DB_SSL=true

# AI 模型配置
OPENAI_API_KEY=sk-your-production-openai-key
OPENAI_MODEL=gpt-4

# 向量数据库
PINECONE_API_KEY=your-production-pinecone-key
PINECONE_ENVIRONMENT=us-west1-gcp
PINECONE_INDEX=anythingllm-prod

# 存储配置
AWS_ACCESS_KEY_ID=your-production-aws-key
AWS_SECRET_ACCESS_KEY=your-production-aws-secret
AWS_REGION=us-east-1
AWS_S3_BUCKET=anythingllm-prod-documents

# 监控配置
MONITORING_ENABLED=true
LOG_LEVEL=info
SENTRY_DSN=your-production-sentry-dsn

# 缓存配置
REDIS_HOST=redis.yourdomain.com
REDIS_PORT=6379
REDIS_PASSWORD=your-redis-password

开发环境配置 (.env.development)

bash
# 开发环境配置
NODE_ENV=development
SERVER_PORT=3001
SERVER_HOST=localhost
APP_URL=http://localhost:3001

# 安全配置
JWT_SECRET=development-jwt-secret-not-for-production
FORCE_HTTPS=false

# 数据库配置
DATABASE_TYPE=sqlite
SQLITE_DB_PATH=./storage/development.db

# AI 模型配置
OPENAI_API_KEY=sk-your-development-openai-key
OPENAI_MODEL=gpt-3.5-turbo

# 本地向量数据库
CHROMA_ENDPOINT=http://localhost:8000
CHROMA_COLLECTION=anythingllm_dev

# 本地存储
STORAGE_DIR=./storage/dev

# 调试配置
DEBUG_MODE=true
VERBOSE_LOGGING=true
LOG_LEVEL=debug

Docker 环境配置 (.env.docker)

bash
# Docker 环境配置
NODE_ENV=production
SERVER_PORT=3001
SERVER_HOST=0.0.0.0

# 数据库配置(使用 Docker 服务名)
DATABASE_TYPE=postgres
DB_HOST=postgres
DB_PORT=5432
DB_USERNAME=anythingllm
DB_PASSWORD=docker-postgres-password
DB_NAME=anythingllm

# Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379

# 向量数据库配置
CHROMA_ENDPOINT=http://chroma:8000
CHROMA_COLLECTION=anythingllm

# 存储配置
STORAGE_DIR=/app/storage

配置验证

配置验证脚本

javascript
// config-validator.js
const fs = require('fs');
const path = require('path');

class ConfigValidator {
  constructor() {
    this.requiredVars = {
      production: [
        'JWT_SECRET',
        'DATABASE_TYPE',
        'OPENAI_API_KEY'
      ],
      development: [
        'JWT_SECRET'
      ]
    };
    
    this.warnings = [];
    this.errors = [];
  }

  validate() {
    const env = process.env.NODE_ENV || 'development';
    const required = this.requiredVars[env] || this.requiredVars.development;

    // 检查必需变量
    for (const varName of required) {
      if (!process.env[varName]) {
        this.errors.push(`缺少必需的环境变量: ${varName}`);
      }
    }

    // 检查 JWT 密钥强度
    if (process.env.JWT_SECRET && process.env.JWT_SECRET.length < 32) {
      this.warnings.push('JWT_SECRET 长度应至少为 32 个字符');
    }

    // 检查数据库配置
    this.validateDatabaseConfig();

    // 检查 AI 模型配置
    this.validateAIConfig();

    // 输出结果
    this.outputResults();

    return this.errors.length === 0;
  }

  validateDatabaseConfig() {
    const dbType = process.env.DATABASE_TYPE;
    
    if (dbType === 'postgres') {
      const required = ['DB_HOST', 'DB_USERNAME', 'DB_PASSWORD', 'DB_NAME'];
      for (const varName of required) {
        if (!process.env[varName]) {
          this.errors.push(`PostgreSQL 配置缺少: ${varName}`);
        }
      }
    } else if (dbType === 'mysql') {
      const required = ['MYSQL_HOST', 'MYSQL_USERNAME', 'MYSQL_PASSWORD', 'MYSQL_DATABASE'];
      for (const varName of required) {
        if (!process.env[varName]) {
          this.errors.push(`MySQL 配置缺少: ${varName}`);
        }
      }
    }
  }

  validateAIConfig() {
    const hasOpenAI = process.env.OPENAI_API_KEY;
    const hasAzure = process.env.AZURE_OPENAI_ENDPOINT && process.env.AZURE_OPENAI_API_KEY;
    const hasAnthropic = process.env.ANTHROPIC_API_KEY;
    const hasLocal = process.env.OLLAMA_BASE_URL || process.env.LM_STUDIO_BASE_URL;

    if (!hasOpenAI && !hasAzure && !hasAnthropic && !hasLocal) {
      this.errors.push('至少需要配置一个 AI 模型提供商');
    }
  }

  outputResults() {
    if (this.errors.length > 0) {
      console.error('❌ 配置验证失败:');
      this.errors.forEach(error => console.error(`  - ${error}`));
    }

    if (this.warnings.length > 0) {
      console.warn('⚠️  配置警告:');
      this.warnings.forEach(warning => console.warn(`  - ${warning}`));
    }

    if (this.errors.length === 0 && this.warnings.length === 0) {
      console.log('✅ 配置验证通过');
    }
  }
}

// 运行验证
const validator = new ConfigValidator();
const isValid = validator.validate();

if (!isValid) {
  process.exit(1);
}

使用配置验证

bash
# 在启动应用前验证配置
node config-validator.js

# 在 package.json 中添加脚本
{
  "scripts": {
    "validate-config": "node config-validator.js",
    "start": "npm run validate-config && node server.js"
  }
}

正确配置环境变量是 AnythingLLM 成功部署的关键。根据您的部署环境选择合适的配置选项,并确保所有必需的变量都已正确设置。定期审查和更新配置以保持系统的安全性和性能。

AnythingLLM 是一个功能强大的开源 AI 知识管理平台,支持多种 LLM 模型,让您轻松构建智能对话系统和知识库。