AWS Elastic Beanstalk - 在环境属性中设置 .env Laravel
Posted
技术标签:
【中文标题】AWS Elastic Beanstalk - 在环境属性中设置 .env Laravel【英文标题】:AWS Elastic Beanstalk - Set .env Laravel in Environment Properties 【发布时间】:2019-02-19 02:05:25 【问题描述】:据我了解,AWS Elastic Beanstalk 在软件配置面板中有自己的环境属性,单击齿轮图标。在我的 Laravel 的 .env 文件中,我有我的 S3Bucket 之类的信息,我在其中上传图像、我的邮件服务和其他一些信息。这是否意味着我必须将 Laravel 的 .env 文件中的每个键值对添加到 AWS Elastic Beanstalk 的环境属性中?
【问题讨论】:
您是否在您的 git 存储库中提交了.env
文件?需要知道以便我可以帮助您
不,出于安全原因,我不会这样做
所以我认为您可能需要在软件配置面板中创建所有环境变量,dillieodigital.wordpress.com/2015/05/29/…
【参考方案1】:
简短的回答是是。
如果您在软件配置中添加环境变量,特别是,如果您不将 .env 文件上传到服务器,则必须在代码中引用这些变量。
例如,您可以通过以下方式在服务器上的 Elastic Beanstalk 中引用此配置并在本地使用 .env 文件:
在 config/app.php 中:
<?php
return [
...
'env' => array_key_exists('APP_ENV', $_SERVER) ? $_SERVER['APP_ENV'] : env('APP_ENV'),
'debug' => array_key_exists('APP_DEBUG', $_SERVER) && $_SERVER['APP_DEBUG'] === 'false' ? false : env('APP_DEBUG'),
...
请注意,我在这里做两件事。
对于 APP_ENV,由于我希望在服务器上进行“生产”,但在本地进行“开发”,所以如果可用(即仅在生产服务器上),我希望使用 $_SERVER['APP_ENV'],否则使用 APP_ENV我在本地的 .env 文件中定义的。请注意,在 Elastic Beanstalk 上,您也只需将变量命名为 APP_ENV。
这有点小问题。您在 Elastic Beanstalk 中设置的任何变量都将以字符串形式出现。因此,当然,您需要在生产时将 APP_DEBUG 设置为 false。但是,这会出现在字符串“false”中,如果您对其进行测试,则为“false”== true。因此,这将在服务器上证明是正确的。为了解决这个问题,我使用上面的代码来测试它是否 APP_DEBUG 设置为'false',如果是,我将其设置为布尔值false
现在,这只是 config/app 文件中的 2 个示例。对于您来说,您必须在各自的配置文件中对您的 S3 存储桶和邮件服务器执行相同的操作。
我知道我回复得太晚了,但我希望这对其他人有帮助! :)
【讨论】:
我们可以使用这个在控制台中运行的应用吗? @mssb,如果你的意思是在本地主机上运行它,那么,是的。请注意,三元运算符中的问题是查看 $_SERVER 中是否存在特定键,如果不存在,则它将从 .env 文件中获取信息,这将是在 localhost 上处理项目的情况 AWS EBS 将环境属性保存在 $_SERVER 中,Laravel 使用 Vance Lucas 的 [DotEnv][1] PHP 库,该库将环境变量从.env
加载到 getenv()
、$_ENV
和 @987654327 @ 自动地。这意味着您可以简单地保留 env() 函数,而无需使用 array_key_exists() 函数。 [1]:github.com/vlucas/phpdotenv以上是关于AWS Elastic Beanstalk - 在环境属性中设置 .env Laravel的主要内容,如果未能解决你的问题,请参考以下文章
如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本
无法在 AWS Elastic Beanstalk 中创建环境?
在 Elastic Beanstalk(AWS) 中守护 Celerybeat