我在aws elastic beanstalk上设置laravels passport时遇到问题。eb客户端设置正确,我可以部署代码更改。没有显示错误。
然而,向laravel发出请求之后会出现错误500,告诉我“app/current/storage/oauth-public.key”中缺少passport密钥。
我想我遗漏了artisan命令“php artisan passport:install”,所以我在composer文件中添加了它:
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"@php artisan passport:install"
]
但显然它并不创建密钥。
要么是在运行eb deploy之后没有执行post-install钩子,要么是有另一个错误不允许我创建密钥文件(缺少写权限?)
我怎样才能验证安装后钩子是否被执行?有人遇到过类似的问题吗?
我遵循了这一问题中的建议,但到目前为止没有帮助:https://github.com/laravel/passport/issues/418
更新:我尝试手动运行php artisan passport:install,结果出现了错误。我必须先给予文件夹(sudo chmod -R777存储)权限,然后才能正常工作。不幸的是,每次运行eb deploy时,密钥都会被删除,所以每次我都必须重做这些步骤--相当麻烦。有人找到了一个自动化的好方法吗?
4条答案
按热度按时间bhmjp9jg1#
显然,这个PR https://github.com/laravel/passport/pull/683使通过envars传递密钥成为可能。
我还没有测试过,但我很快就会测试。
更新
我们尝试了一下,我们达到了4K的envars大小限制:https://forums.aws.amazon.com/thread.jspa?messageID=618423򖾷
最后,我们最终使用了我们的CI。
jq6vz3qz2#
在.ebextensions文件夹(在项目的根目录下)中添加一个文件或命令,它将在部署时创建新密钥。
这有其优点和缺点:
yc0p9oo03#
您还可以在部署后自动执行命令。
如Elastic Beanstalk部署工作流中所述,部署后钩子是按字母数字顺序最后执行的钩子。
在源代码的根目录中创建文件夹.platform/hooks/postdeploy/,并在“postdeploy/”文件夹中创建一个bash脚本,其中包含您要执行的命令,例如:
然后(正如Markus Lechner在this forum中回答amesStreet的问题一样),您还必须创建一个包含container_commands的配置文件,以便给予执行bash脚本的权限(在第一个链接中也有解释,您必须使用
chmod +x
来设置hook文件的执行权限)在源代码的根目录中创建一个名为.ebextensions/的文件夹,并在该文件夹中创建一个配置文件:“.ebextensions/一些名称.config”并键入:
这相当于向.platform文件夹中的每个.sh文件给予执行权限,在staging/文件夹中也是如此(这是预构建和预部署阶段部署工作流的一部分)
zbwhf8kr4#
诀窍是使用不同的.ebignore和.gitignore文件。
1.在本地环境中生成密钥。
1.在.gitignore(/storage/.keys)中忽略它
1.允许它在.ebignore中(#/storage/.keys)
所以在git中密钥不会被跟踪,但仍然会使用eb deploy命令上传到elasticbeanstalk。