Heroku部署Laravel Passport应用报错:oauth私钥文件不存在或不可读
解决Laravel Passport部署Heroku时的密钥缺失错误
这是Laravel部署Heroku时很常见的坑——本地环境你已经生成了Passport的加密密钥,但Heroku每次部署都是全新容器,默认不会保留这些文件,再加上storage目录权限可能出问题,就会触发这个"密钥路径不存在或不可读"的错误。下面给你几个实用的解决办法:
方法一:手动在Heroku上生成Passport密钥
这是最直接的操作方式,打开终端跟着步骤来:
- 先登录Heroku账户:
heroku login - 切换到你的项目本地目录,运行Passport安装命令:
heroku run php artisan passport:install
这个命令会在Heroku的storage目录下自动生成oauth-private.key和oauth-public.key,同时创建Passport必需的客户端记录,执行完再用Postman测试应该就能正常请求了。
方法二:自动化部署时生成密钥(推荐)
如果不想每次部署都手动操作,可以在composer.json里加一个部署后脚本,让Heroku自动处理权限和密钥生成:
打开项目根目录的composer.json,找到scripts节点,添加以下内容:
"scripts": { "post-install-cmd": [ "chmod -R 775 storage", "php artisan passport:install --force" ] }
chmod -R 775 storage确保storage目录有可写权限,避免密钥生成失败--force参数会覆盖已有的密钥(如果之前生成过),保证每次部署的密钥都是有效的
修改完后提交composer.json到Git,再推送到Heroku,以后每次部署都会自动完成这些操作,省心很多。
方法三:将本地密钥提交到版本控制(不推荐)
这个方法只适合测试环境应急,绝对不要在生产环境用——因为Passport的私钥是敏感信息,提交到Git有泄露风险。操作步骤:
- 打开项目的
.gitignore文件,找到storage/*相关的忽略规则,把storage/oauth-private.key和storage/oauth-public.key从列表中移除 - 提交这两个文件到Git:
git add storage/oauth-*.key && git commit -m "Add Passport keys for Heroku" - 推送到Heroku:
git push heroku main
额外排查小技巧
如果还是没解决,可以做这两项检查:
- 确认Heroku上的
APP_KEY已设置:运行heroku config:get APP_KEY,如果为空,本地生成一个php artisan key:generate --show,再用heroku config:set APP_KEY=你的密钥内容设置 - 检查storage目录是否存在密钥:运行
heroku run ls storage,看看列表里有没有oauth-private.key和oauth-public.key
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

