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