如何使用MySQL在AWS EC2上为Laravel 5设置环境变量

Mar*_*nJH 16 mysql git environment-variables amazon-web-services laravel-5

我已成功将我的laravel 5应用程序部署到AWS EC2.我还使用AWS RDS创建了一个MySQL数据库,并将其与我的应用实例相关联.

现在我想设置我的env变量,以便在我开发的本地机器上使用homesteads默认值,在部署和生产时使用我的AWS数据库.

从这里开始,我对我原来的问题进行了重大编辑,以反映自从问到这些问题后我学到了什么

用于本地开发的laravel项目中的经典.env看起来大致如下:

APP_ENV=local
APP_DEBUG=true
APP_KEY=BF3nmfzXJ2T6XU8EVkyHtULCtwnakK5k (Note, not a real key)

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
Run Code Online (Sandbox Code Playgroud)

为了生产,我终于明白我只是用我的生产变量创建一个新的.env文件.使用AWS时,我的.env文件大致如下所示:

APP_ENV=production
APP_DEBUG=false
APP_KEY=BF3nmfzXJ2T6XU8EVkyHtULCtwnakK5k (Note, not a real key)

DB_HOST=aaxxxxxxxxxxxxx.cyxxxxxxxxxx.eu-central-1.rds.amazonaws.com:3306
DB_DATABASE=MyAppsDatabaseName
DB_USERNAME=MyAWSRDSUserName
DB_PASSWORD=NotARealPassword

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
Run Code Online (Sandbox Code Playgroud)

我现在的问题/问题

我使用AWS eb cli从git部署我的应用程序.但是如何部署我的生产.env文件而不必先将其推送到git?

Mar*_*nJH 21

上面的Russ Matney给出了正确的答案,所以他得到了复选标记.我会在这里写下自己的答案,详细说明我如何使事情发挥作用.我假设您确实已设置数据库并拥有所需的所有凭据.

1.转到弹性beanstalk仪表板

eb仪表板


2.接下来转到您的软件配置

eb软件配置


3.添加生产环境变量,如下所示.请记住将doc root设置为/ public,并在数据库端点的末尾添加:3306以避免PDOEXCEPTION错误.

请参阅下面的更大版本的图片

环境变量配置页面


4.下一个SSH进入你的应用程序eb实例.请在此处查看详细信息,或尝试以下操作:

$ ssh -i path/to/your/key/pair/pem/file.pem ec2-user@ec1-11-11-11-111.eu-central-1.compute.amazonaws.com

请注意ec1-11-11-11-111.eu-central-1.compute.amazonaws.com是您的应用程序公共DNS.你会在这里找到你的:

EC2实例仪表板上的公共DNS


5. cd到你的应用程序:$ cd /var/app/current


6.授予对存储文件夹的读/写访问权限,否则应用程序无法写入日志文件夹,并且在运行迁移时会导致错误.提供访问权限:$ sudo chmod -R ugo+rw storage


7.终于!如果您愿意,可以运行您的迁移并执行其他工匠命令!$ php artisan migrate成功应该从gitbash粗略看起来像这样:

在aws eb上迁移成功


Rus*_*ney 16

您可以在ec2实例上创建一个新的.env,并在其中添加所有env变量.一个选项是ssh-ing到框中并通过vi或cat创建文件.或者您可以编写一个脚本来远程从外部位置拉入.env.

您也可以将ssh放入框中以及export APP_ENV=production所有env变量(假设这是适合您操作系统的命令).

将env变量添加到您的环境将取决于您的ec2实例正在运行的操作系统,因此解决方案将依赖于此.ec2有一个"标签"的概念可能很有用,但文档显示它们将标签数量限制为10,所以你可能需要手动完成每个ec2实例:/

请参阅此处了解一种方法,该方法使用标记来引入并设置env变量(非特定于laravel).

我昨天刚刚经历了这个问题,同时让Laravel在Elastic Beanstalk上运行,解决方案很干净.您实际上可以通过aws控制台直接设置env变量(EB app/environment - > Configuration - > Software Configuration - > Environment Properties).

更新:

要理解的关键概念是Laravel只使用phpdotenv将.变量文件中的变量转储到php的全局$_ENV变量中,而$_ENV当php启动服务器(docs)时,任何现有的env变量都会自动包含在内.所以.env文件本身是不必要的,实际上只是开发方便.(除非我刚刚被弹性豆茎破坏了).