必须先复制.env.example为.env并执行php artisan key:generate,否则因APP_KEY缺失导致加密组件初始化失败,报错“Missing APP_KEY and no cipher is set”;生成后需确认APP_KEY已写入且config/app.php中'cipher'未被注释。

直接复制 .env.example 并生成 APP_KEY
项目根目录没有 .env 文件,Laravel 启动时会 fallback 到 env() 函数返回 null,导致 APP_KEY 缺失、加密组件初始化失败,报错典型提示是:Missing APP_KEY and no cipher is set。这不是配置问题,是启动阻断错误。
最简路径就是复用 Laravel 官方预留的模板文件:
- 在项目根目录执行
copy .env.example .env(Windows)或cp .env.example .env(macOS/Linux) - 立刻运行
php artisan key:generate—— 这步不能跳,否则APP_KEY=行为空,应用仍无法启动 - 检查
.env文件头部是否已写入类似APP_KEY=base64:...的有效值,没写入说明命令未成功(常见于权限不足或 config/app.php 中'cipher'被注释)
DB_* 配置项填错会导致连接超时或拒绝访问
.env.example 里的 DB_HOST=localhost、DB_PORT=3306 是开发默认值,但实际环境经常不匹配。填错不会报语法错误,而是让 php artisan migrate 或页面加载卡住几秒后抛出模糊异常,比如:
-
SQLSTATE[HY000] [1045] Access denied for user:大概率是DB_USERNAME/DB_PASSWORD错,或 MySQL 对localhost和127.0.0.1的用户权限分开配置了 -
Connection refused或超时:DB_PORT不对(Docker 常映射为3307),或DB_HOST指向了容器名(如mysql)却在宿主机直连 -
Database myapp does not exist:DB_DATABASE名字拼错,或数据库尚未手动创建(Laravel 不自动建库)
填完务必运行 php artisan config:clear,否则旧缓存配置仍在内存中,改了也不生效。
部署环境别靠上传 .env 文件来配
本地重建 .env 是调试必需,但上线后上传 .env 文件属于高危操作——APP_KEY、DB_PASSWORD、MAIL_PASSWORD 全部明文落盘,Git 历史里还能挖出来。
生产环境应绕过 .env 文件,改用系统级环境变量注入:
- Nginx 配置里加
fastcgi_param APP_KEY "base64:..."; - systemd service 文件里写
Environment="APP_KEY=base64:..." - Docker run 时用
-e APP_KEY=...传入
Laravel 会优先读取系统变量,.env 仅作 fallback。这样既安全,又避免因服务器权限限制导致 .env 无法读取的问题。
确认 .gitignore 是否误删了 .env 规则
如果项目是从 Git 克隆下来的,且始终没有 .env,先检查 .gitignore 文件里是否还保留着这一行:
/.env
默认 Laravel 项目都带这条,但如果有人手抖删了,就可能把 .env 提交进仓库——这比丢失更危险。已经误提交的,不能只删文件,得执行:
-
git rm --cached .env(从暂存区移除,保留在磁盘) echo ".env" >> .gitignoregit commit -m "remove .env from repo"
否则下次 git pull 又会把线上密钥拉下来,覆盖本地安全配置。
真正容易被忽略的是:APP_KEY 生成后必须确保 config/app.php 中 'cipher' => 'AES-256-CBC' 没被注释或删掉,否则 key:generate 成功也白搭——加密组件压根起不来。


















