Skip to main content
Glama
ENV_SETUP.md9.11 kB
# 环境变量配置指南 ## 概述 Database Search MCP Server 支持按环境分离的配置管理,提供灵活的环境变量配置方案,确保开发、测试、生产环境的配置安全和独立。 ## 🏗️ 配置架构 ### 双层配置系统 - **JSON配置文件** - 结构化配置和环境变量占位符 - **环境变量文件** - 实际的敏感信息和环境特定配置 ### 文件结构 ``` packages/database-search/ ├── config/ # JSON配置文件 │ ├── database-development.json │ ├── database-test.json │ └── database-production.json ├── env-templates/ # 环境变量模板文件 │ ├── development.env.template │ ├── test.env.template │ └── production.env.template ├── .env.development # 开发环境变量(需要创建) ├── .env.test # 测试环境变量(需要创建) ├── .env.production # 生产环境变量(需要创建) ├── setup-env.js # 自动化环境设置脚本 └── .gitignore # 忽略 .env* 文件 ``` ## 🚀 快速设置 ### 方法一:自动化脚本(推荐) ```bash # 创建所有环境配置文件 npm run setup-env # 或创建特定环境 npm run setup-env:dev # 开发环境 npm run setup-env:test # 测试环境 npm run setup-env:prod # 生产环境 ``` ### 方法二:手动设置 ```bash # 复制模板文件 cp env-templates/development.env.template .env.development cp env-templates/test.env.template .env.test cp env-templates/production.env.template .env.production # 编辑配置文件 nano .env.development ``` ## ⚙️ 环境变量详解 ### 核心配置 | 变量名 | 描述 | 类型 | 默认值 | 必需 | |--------|------|------|--------|------| | `NODE_ENV` | 运行环境标识 | string | development | 否 | | `OPENAI_API_KEY` | OpenAI API 密钥 | string | - | 是 | | `DEFAULT_DATABASE` | 默认数据库连接ID | string | - | 否 | | `MAX_QUERY_RESULTS` | 查询结果数量限制 | number | 100 | 否 | | `ENABLE_CACHE` | 启用查询缓存 | boolean | true | 否 | | `LOG_LEVEL` | 日志详细程度 | debug/info/warn/error | info | 否 | ### MySQL 数据库配置 ```env # 格式:DB_[连接ID]_[属性] DB_LOCAL_MYSQL_HOST=localhost DB_LOCAL_MYSQL_PORT=3306 DB_LOCAL_MYSQL_USERNAME=root DB_LOCAL_MYSQL_PASSWORD=your_password DB_LOCAL_MYSQL_DATABASE=learn-mysql DB_LOCAL_MYSQL_DATABASES=db1,db2,db3 # 可访问的数据库列表 ``` ### PostgreSQL 数据库配置 ```env DB_PROD_POSTGRES_HOST=pg.example.com DB_PROD_POSTGRES_PORT=5432 DB_PROD_POSTGRES_USERNAME=pg_user DB_PROD_POSTGRES_PASSWORD=pg_password DB_PROD_POSTGRES_DATABASE=main DB_PROD_POSTGRES_DATABASES=main,analytics,logs ``` ### SQLite 数据库配置 ```env DB_TEST_SQLITE_DATABASE=./test.db DB_TEST_SQLITE_DATABASES=test,backup # 可选 ``` ## 🔧 配置文件占位符 JSON配置文件支持环境变量占位符语法: ### 基本语法 ```json { "host": "${DB_LOCAL_MYSQL_HOST}", // 直接引用 "port": "${DB_LOCAL_MYSQL_PORT:-3306}", // 带默认值 "database": "${DB_LOCAL_MYSQL_DATABASE}" } ``` ### 示例配置文件 **config/database-development.json**: ```json { "environment": { "openaiApiKey": "${OPENAI_API_KEY}", "defaultDatabase": "local-mysql", "maxQueryResults": 50, "enableCache": true, "logLevel": "debug" }, "databases": [ { "id": "local-mysql", "name": "本地MySQL开发数据库", "type": "mysql", "host": "${DB_LOCAL_MYSQL_HOST:-localhost}", "port": 3306, "username": "${DB_LOCAL_MYSQL_USERNAME:-root}", "password": "${DB_LOCAL_MYSQL_PASSWORD}", "database": "${DB_LOCAL_MYSQL_DATABASE:-learn-mysql}", "databases": ["learn-mysql", "test_db"] } ] } ``` ## 🏃‍♂️ 运行不同环境 ### 开发环境 ```bash # 直接运行 TypeScript(推荐开发使用) npm run dev # 或构建后运行 npm run build:dev npm run start:dev # 监听模式 npm run watch ``` ### 测试环境 ```bash npm run test:run # 直接运行 npm run build:test # 构建测试版本 npm run start:test # 运行测试版本 ``` ### 生产环境 ```bash npm run build:prod # 构建生产版本 npm run start:prod # 运行生产版本 ``` ## 📋 配置示例 ### 开发环境 (.env.development) ```env # 开发环境配置 NODE_ENV=development LOG_LEVEL=debug # OpenAI配置 OPENAI_API_KEY=sk-dev-your-key-here # 数据库设置 DEFAULT_DATABASE=local-mysql MAX_QUERY_RESULTS=50 ENABLE_CACHE=true # 本地MySQL数据库 DB_LOCAL_MYSQL_HOST=localhost DB_LOCAL_MYSQL_PORT=3306 DB_LOCAL_MYSQL_USERNAME=root DB_LOCAL_MYSQL_PASSWORD=dev_password DB_LOCAL_MYSQL_DATABASE=learn-mysql # 本地SQLite测试库 DB_LOCAL_SQLITE_DATABASE=./dev.db ``` ### 测试环境 (.env.test) ```env # 测试环境配置 NODE_ENV=test LOG_LEVEL=debug # OpenAI配置(测试key) OPENAI_API_KEY=sk-test-your-key-here # 测试设置 DEFAULT_DATABASE=test-sqlite MAX_QUERY_RESULTS=10 ENABLE_CACHE=false # 测试SQLite数据库 DB_TEST_SQLITE_DATABASE=./test.db ``` ### 生产环境 (.env.production) ```env # 生产环境配置 NODE_ENV=production LOG_LEVEL=warn # OpenAI配置 OPENAI_API_KEY=sk-prod-your-actual-key # 生产设置 DEFAULT_DATABASE=prod-mysql MAX_QUERY_RESULTS=200 ENABLE_CACHE=true # 生产MySQL数据库 DB_PROD_MYSQL_HOST=mysql.production.com DB_PROD_MYSQL_PORT=3306 DB_PROD_MYSQL_USERNAME=prod_user DB_PROD_MYSQL_PASSWORD=secure_prod_password DB_PROD_MYSQL_DATABASE=production # 生产PostgreSQL数据库 DB_PROD_POSTGRES_HOST=pg.production.com DB_PROD_POSTGRES_PORT=5432 DB_PROD_POSTGRES_USERNAME=pg_prod_user DB_PROD_POSTGRES_PASSWORD=secure_pg_password DB_PROD_POSTGRES_DATABASE=analytics ``` ## 🔒 安全最佳实践 ### 1. 敏感信息保护 - ✅ 所有 `.env*` 文件已添加到 `.gitignore` - ✅ 生产环境使用系统环境变量而非文件 - ✅ 定期轮换 API 密钥和数据库密码 - ❌ 绝不在代码或配置文件中硬编码密码 ### 2. 权限管理 ```sql -- 为应用创建专用数据库用户 CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'secure_password'; -- 只授予必要权限(只读查询) GRANT SELECT ON learn_mysql.* TO 'app_user'@'localhost'; -- 不授予危险权限 -- REVOKE INSERT, UPDATE, DELETE, DROP ON *.* FROM 'app_user'@'localhost'; ``` ### 3. 网络安全 - 使用 SSL/TLS 连接数据库 - 配置防火墙限制数据库访问 - 使用VPN或私有网络连接生产数据库 ## 🔧 配置加载优先级 系统按以下顺序加载配置(后加载会覆盖先加载): 1. **默认配置** (src/database.ts) 2. **JSON配置文件** (config/database-{env}.json) 3. **通用环境变量文件** (.env) 4. **特定环境变量文件** (.env.{env}) 5. **系统环境变量** (process.env) ## 🐛 故障排除 ### 环境变量未加载 **检查步骤:** ```bash # 1. 检查文件是否存在 ls -la .env.* # 2. 检查文件权限 ls -l .env.development # 3. 验证文件内容格式 cat .env.development | head -10 # 4. 检查环境变量是否被正确解析 LOG_LEVEL=debug npm run dev ``` ### 数据库连接失败 **诊断清单:** - [ ] 数据库服务是否运行? - [ ] 主机地址和端口是否正确? - [ ] 用户名和密码是否正确? - [ ] 数据库名称是否存在? - [ ] 网络连接是否正常? - [ ] 防火墙是否允许连接? ```bash # 测试MySQL连接 mysql -h $DB_LOCAL_MYSQL_HOST -u $DB_LOCAL_MYSQL_USERNAME -p # 测试PostgreSQL连接 psql -h $DB_PROD_POSTGRES_HOST -U $DB_PROD_POSTGRES_USERNAME -d $DB_PROD_POSTGRES_DATABASE ``` ### OpenAI API 调用失败 **检查要点:** - [ ] API 密钥格式是否正确? - [ ] 账户是否有足够余额? - [ ] API 限制是否达到? - [ ] 网络是否能访问 API 端点? ```bash # 测试API连接 curl -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ https://api.openai.com/v1/models ``` ### 配置占位符解析失败 **常见问题:** ```env # ❌ 错误:缺少闭合大括号 MYSQL_HOST=${DB_HOST # ❌ 错误:语法不正确 MYSQL_HOST=$DB_HOST # ✅ 正确:标准占位符语法 MYSQL_HOST=${DB_HOST} MYSQL_HOST=${DB_HOST:-localhost} ``` ## 📚 相关文档 - [README.md](./README.md) - 项目总体文档 - [USAGE_EXAMPLE.md](./USAGE_EXAMPLE.md) - 使用示例 - [config/](./config/) - 配置文件示例 ## 💡 高级技巧 ### 动态数据库配置 通过环境变量动态添加数据库连接: ```env # 新增Redis缓存数据库 DB_CACHE_REDIS_HOST=redis.example.com DB_CACHE_REDIS_PORT=6379 DB_CACHE_REDIS_TYPE=redis DB_CACHE_REDIS_NAME=Redis缓存 # 新增分析数据库 DB_ANALYTICS_POSTGRES_HOST=analytics.db.com DB_ANALYTICS_POSTGRES_TYPE=postgresql DB_ANALYTICS_POSTGRES_NAME=数据分析库 ``` ### 条件配置 ```env # 开发环境启用调试功能 DB_DEBUG_MODE=true DB_SLOW_QUERY_LOG=true # 生产环境性能优化 DB_CONNECTION_POOL_SIZE=20 DB_QUERY_TIMEOUT=30000 ```

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CH-122/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server