# 环境变量配置文档 ## 概述 本文档详细说明了知识库系统Docker部署所需的环境变量配置,包括生产环境和开发环境的不同设置。 ## 环境变量分类 ### 应用基础配置 | 变量名 | 生产环境默认值 | 开发环境默认值 | 说明 | |--------|----------------|----------------|------| | `APP_NAME` | "知识库系统" | "知识库系统-开发" | 应用名称 | | `APP_ENV` | production | local | 应用环境 | | `APP_KEY` | 必须设置 | 必须设置 | 应用加密密钥 | | `APP_DEBUG` | false | true | 调试模式 | | `APP_URL` | http://your-domain.com | http://localhost:8000 | 应用URL | ### 数据库配置 | 变量名 | 生产环境默认值 | 开发环境默认值 | 说明 | |--------|----------------|----------------|------| | `DB_CONNECTION` | mysql | mysql | 数据库类型 | | `DB_HOST` | mysql | mysql | 数据库主机(容器名) | | `DB_PORT` | 3306 | 3306 | 数据库端口 | | `DB_DATABASE` | knowledge_base | knowledge_base_dev | 数据库名 | | `DB_USERNAME` | knowledge_user | dev_user | 数据库用户名 | | `DB_PASSWORD` | 必须设置 | dev_password | 数据库密码 | ### Redis配置 | 变量名 | 生产环境默认值 | 开发环境默认值 | 说明 | |--------|----------------|----------------|------| | `REDIS_CLIENT` | phpredis | phpredis | Redis客户端 | | `REDIS_HOST` | redis | redis | Redis主机(容器名) | | `REDIS_PORT` | 6379 | 6379 | Redis端口 | | `REDIS_PASSWORD` | 空 | 空 | Redis密码 | | `CACHE_STORE` | redis | redis | 缓存驱动 | | `SESSION_DRIVER` | redis | redis | 会话驱动 | | `QUEUE_CONNECTION` | redis | redis | 队列驱动 | ### Meilisearch配置 | 变量名 | 生产环境默认值 | 开发环境默认值 | 说明 | |--------|----------------|----------------|------| | `SCOUT_DRIVER` | meilisearch | meilisearch | 搜索驱动 | | `MEILISEARCH_HOST` | http://meilisearch:7700 | http://meilisearch:7700 | 搜索引擎地址 | | `MEILISEARCH_KEY` | 必须设置 | dev-master-key | 搜索引擎密钥 | ### 日志配置 | 变量名 | 生产环境默认值 | 开发环境默认值 | 说明 | |--------|----------------|----------------|------| | `LOG_CHANNEL` | stack | stack | 日志通道 | | `LOG_LEVEL` | info | debug | 日志级别 | ### 邮件配置 | 变量名 | 生产环境默认值 | 开发环境默认值 | 说明 | |--------|----------------|----------------|------| | `MAIL_MAILER` | smtp | log | 邮件驱动 | | `MAIL_HOST` | 必须设置 | - | SMTP主机 | | `MAIL_PORT` | 587 | - | SMTP端口 | | `MAIL_USERNAME` | 必须设置 | - | SMTP用户名 | | `MAIL_PASSWORD` | 必须设置 | - | SMTP密码 | | `MAIL_ENCRYPTION` | tls | - | 加密方式 | ## 环境文件配置 ### 生产环境 (.env.production) ```bash # 应用配置 APP_NAME="知识库系统" APP_ENV=production APP_KEY=base64:your-app-key-here-change-this-in-production APP_DEBUG=false APP_URL=http://your-domain.com # 数据库配置 DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=knowledge_base DB_USERNAME=knowledge_user DB_PASSWORD=secure_password_change_this_in_production # Redis配置 REDIS_CLIENT=phpredis REDIS_HOST=redis REDIS_PORT=6379 REDIS_PASSWORD= # Meilisearch配置 SCOUT_DRIVER=meilisearch MEILISEARCH_HOST=http://meilisearch:7700 MEILISEARCH_KEY=your-master-key-change-this-in-production # 邮件配置 MAIL_MAILER=smtp MAIL_HOST=your-smtp-host.com MAIL_PORT=587 MAIL_USERNAME=your-email@domain.com MAIL_PASSWORD=your-email-password-change-this MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS="noreply@your-domain.com" MAIL_FROM_NAME="${APP_NAME}" ``` ### 开发环境 (.env.development) ```bash # 应用配置 APP_NAME="知识库系统-开发" APP_ENV=local APP_KEY=base64:your-dev-app-key-here APP_DEBUG=true APP_URL=http://localhost:8000 # 数据库配置 DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=knowledge_base_dev DB_USERNAME=dev_user DB_PASSWORD=dev_password # Redis配置 REDIS_CLIENT=phpredis REDIS_HOST=redis REDIS_PORT=6379 REDIS_PASSWORD= # Meilisearch配置 SCOUT_DRIVER=meilisearch MEILISEARCH_HOST=http://meilisearch:7700 MEILISEARCH_KEY=dev-master-key # 邮件配置(开发环境使用日志) MAIL_MAILER=log MAIL_FROM_ADDRESS="dev@knowledge-base.local" MAIL_FROM_NAME="${APP_NAME}" # 开发工具配置 TELESCOPE_ENABLED=true DEBUGBAR_ENABLED=true XDEBUG_MODE=develop,debug XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003 ``` ## Docker Compose环境变量 ### 生产环境 (docker-compose.yml) ```yaml environment: # 从.env文件读取或使用默认值 APP_NAME: ${APP_NAME:-知识库系统} APP_ENV: ${APP_ENV:-production} APP_KEY: ${APP_KEY} APP_DEBUG: ${APP_DEBUG:-false} APP_URL: ${APP_URL:-http://localhost} # 数据库配置 DB_CONNECTION: mysql DB_HOST: mysql DB_PORT: 3306 DB_DATABASE: ${DB_DATABASE:-knowledge_base} DB_USERNAME: ${DB_USERNAME:-knowledge_user} DB_PASSWORD: ${DB_PASSWORD:-secure_password} ``` ### 开发环境 (docker-compose.dev.yml) ```yaml environment: # 开发环境特定配置 APP_NAME: ${APP_NAME:-知识库系统-开发} APP_ENV: ${APP_ENV:-local} APP_DEBUG: ${APP_DEBUG:-true} LOG_LEVEL: debug # 开发工具配置 TELESCOPE_ENABLED: true DEBUGBAR_ENABLED: true ``` ## 安全注意事项 ### 必须更改的默认值 生产环境部署前必须更改以下默认值: 1. **APP_KEY**: 使用 `php artisan key:generate` 生成 2. **DB_PASSWORD**: 设置强密码 3. **MEILISEARCH_KEY**: 设置复杂的主密钥 4. **MAIL_PASSWORD**: 设置邮件服务密码 ### 敏感信息保护 1. **不要将敏感信息提交到版本控制** 2. **使用Docker secrets管理敏感数据** 3. **定期轮换密钥和密码** 4. **限制环境变量的访问权限** ## 环境变量验证 ### 启动前检查 创建验证脚本检查必要的环境变量: ```bash #!/bin/bash # validate-env.sh required_vars=( "APP_KEY" "DB_PASSWORD" "MEILISEARCH_KEY" ) for var in "${required_vars[@]}"; do if [ -z "${!var}" ]; then echo "错误: 环境变量 $var 未设置" exit 1 fi done echo "环境变量验证通过" ``` ### 运行时检查 Laravel应用启动时会自动验证关键配置: - 数据库连接 - Redis连接 - Meilisearch连接 - 应用密钥格式 ## 故障排除 ### 常见问题 1. **APP_KEY未设置**: ```bash php artisan key:generate ``` 2. **数据库连接失败**: - 检查DB_HOST是否为容器名 - 验证数据库密码 - 确认MySQL容器已启动 3. **Redis连接失败**: - 检查REDIS_HOST是否为容器名 - 验证Redis容器状态 4. **Meilisearch连接失败**: - 检查MEILISEARCH_HOST格式 - 验证MEILISEARCH_KEY ### 调试命令 ```bash # 查看容器环境变量 docker exec knowledge_base_app env # 测试数据库连接 docker exec knowledge_base_app php artisan tinker >>> DB::connection()->getPdo(); # 测试Redis连接 docker exec knowledge_base_app php artisan tinker >>> Redis::ping(); # 测试Meilisearch连接 docker exec knowledge_base_app php artisan scout:status ``` ## 最佳实践 1. **使用环境特定的配置文件** 2. **为不同环境设置不同的密钥** 3. **定期备份环境配置** 4. **使用配置管理工具** 5. **监控配置变更** 6. **文档化所有环境变量**