Laravel三环境需统一管控.env、缓存与部署脚本:开发时复制.env.example并设APP_ENV=local、APP_DEBUG=true,运行key:generate和config:clear;生产推荐Docker --env-file注入或CI/CD动态生成.env,严禁Dockerfile中COPY .env。

你需要让Laravel项目在开发、测试、生产三套环境中稳定运行,又不想每次部署都手动改配置、漏删敏感信息、缓存不更新导致新环境变量失效——这必须从.env文件管理、缓存机制和部署脚本三个层面同时控制。
本地开发环境初始化
进入项目根目录,执行cp .env.example .env生成本地配置文件。
用文本编辑器打开.env,确保APP_ENV=local且APP_DEBUG=true,这两项必须显式设置,Laravel不会自动推导默认值。
运行php artisan key:generate生成APP_KEY,这一步不可跳过,否则会报“Application key not set”错误。
执行php artisan config:clear清空旧缓存,避免残留的生产配置干扰本地调试。
生产环境安全注入配置
方法一:Docker运行时注入(推荐)
准备一个仅限服务器本地存在的.env.prod文件,内容不含Git跟踪,只写真实密钥与数据库地址。
启动容器时用--env-file .env.prod挂载,【禁止在Dockerfile中COPY .env文件】,否则密钥会固化进镜像层,即使后续RUN rm也清除不净。
方法二:Shell脚本动态生成
在CI/CD流水线中,用cat > .env 语法拼接环境变量,把<code>APP_KEY、DB_PASSWORD等从密钥管理系统读出后写入,确保每次部署都是全新生成的.env文件。
写完立即执行chmod 600 .env,防止Web服务器进程以外的用户读取。
配置缓存强制刷新流程
第一步:确认.env已就位且Web用户可读(ls -l .env检查权限)。
第二步:运行php artisan config:clear删除bootstrap/cache/config.php旧缓存。
第三步:执行php artisan config:cache重新生成固化配置——这一步会让所有env()调用结果被静态写入PHP数组,后续请求完全绕过.env文件解析。
注意:php artisan serve命令不自动重载.env变更,必须重启服务才能生效;生产环境Nginx+PHP-FPM架构下,改完缓存后需重载PHP-FPM进程或整个Web服务。
多环境变量一致性校验
在tinker中分别执行env('APP_NAME')和config('app.name'),若两者返回不同值,说明配置缓存未更新或.env存在格式错误(比如漏引号、用了中文等号、行尾空格)。
检查.env文件是否含BOM头:用file -i .env查看编码,BOM会导致Laravel解析失败且静默忽略整行。
确保APP_ENV与APP_DEBUG在.env中独立设置,不能依赖APP_ENV=production自动推导APP_DEBUG=false,Laravel不支持此逻辑。


















