我无法在aws弹性豆茎上设置幼虫护照。 eb客户端设置正确,我可以部署代码更改。没有显示错误。
但是,向laravel发送请求后,错误500告诉我,我在“ app / current / storage / oauth-public.key \”中缺少护照密钥。在本地一切正常。
我想我缺少artisan命令“ php artisanpassport:install”,所以我将其添加到了composer文件中:
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"@php artisan passport:install"
]
但是显然它不会创建密钥。
或者在运行eb deploy之后未执行安装后挂钩,或者出现另一个错误使我无法创建密钥文件(缺少写权限?)
如何验证安装后挂钩是否已执行? 有人遇到过类似的问题吗?
我遵循了本期中的建议,但到目前为止没有帮助: https://github.com/laravel/passport/issues/418
更新: 我进入应用程序并尝试手动运行php artisanpassport:install,这导致了错误。我必须首先授予对该文件夹的权限(sudo chmod -R 777存储),然后它才能工作。 不幸的是,每次我运行eb deploy时,密钥都会被删除,因此我每次都必须重做这些步骤-非常麻烦。任何人都找到了一种自动化的好方法吗?
答案 0 :(得分:1)
显然,此PR https://github.com/laravel/passport/pull/683使得envvars可以传递密钥。
/*
|--------------------------------------------------------------------------
| Encryption Keys
|--------------------------------------------------------------------------
|
| Passport uses encryption keys while generating secure access tokens for
| your application. By default, the keys are stored as local files but
| can be set via environment variables when that is more convenient.
|
*/
'private_key' => env('PASSPORT_PRIVATE_KEY'),
'public_key' => env('PASSPORT_PUBLIC_KEY'),
我还没有测试,但是我会很快的。
更新
我们尝试过,并且达到了4K的envvars大小限制:https://forums.aws.amazon.com/thread.jspa?messageID=618423򖾷
最后,我们最终改为使用CI。
答案 1 :(得分:0)
在.ebextensions文件夹(在项目的根目录中)中添加文件或命令,这将在部署时创建新密钥。
container_commands:
01_passport_install:
command: "php artisan passport:keys --force"
这有优点也有缺点:
答案 2 :(得分:0)
您还可以在部署后自动执行命令。
如 Elastic Beanstalk deployment workflow 中所述,部署后挂钩是按字母数字顺序最后执行的。
在您的源代码的根目录中创建文件夹 .platform/hooks/postdeploy/ 并在“postdeploy/”文件夹中创建一个包含您要执行的命令的 bash 脚本。即:
#! /bin/bash
sudo php artisan passport:install
然后(正如 Markus Lechner 在 this forum 中对 amesStreet 的回答)您还必须创建一个带有 container_commands 的配置文件,以便授予执行 bash 脚本的权限(也在第一个链接中解释,您必须使用 chmod +x
设置对钩子文件的执行权限)
在源代码的根目录中创建一个名为 .ebextensions/ 的文件夹,并在该文件夹中创建一个配置文件:“.ebextensions/some_name.config”并键入:
container_commands:
10_deploy_hook_permissions:
command: |
sudo find .platform/ -type f -iname "*.sh" -exec chmod -R 755 {} \;
sudo find /var/app/staging/.platform/ -type f -iname "*.sh" -exec chmod -R 755 {} \;
相当于为 .platform 文件夹中的每个 .sh 文件和 staging/ 文件夹中的每个 .sh 文件授予执行权限(这是预构建和预部署阶段的部署工作流的一部分)
答案 3 :(得分:-1)
诀窍是使用不同的.ebignore和.gitignore文件。
因此将不会在git中跟踪密钥,但仍会使用 eb deploy 命令将其上传到Elasticbeanstalk。