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

How to set environment variables for Laravel 5 on AWS EC2 with MySQL

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

现在我想设置我的环境变量,以便它在开发中的本地计算机上使用 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

对于生产,我终于明白我只是用我的生产变量创建一个新的 .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

我现在的question/problem

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

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

您也可以通过 ssh 进入该框并 export APP_ENV=production 您所有的环境变量(假设这是您的 OS 的正确命令)。

将环境变量添加到您的环境将取决于 OS 您的 ec2 实例是 运行,因此解决方案将取决于此。 ec2 有一个可能有用的 'tags' 概念,但文档显示它们将标签的数量限制为 10,因此您可能必须针对每个 ec2 实例手动执行此操作:/

请参阅 了解一种使用标签引入和设置环境变量的方法(非 laravel 特定)。

我昨天刚在 Elastic Beanstalk 上获取 Laravel 运行 时经历了这个问题,解决方案很干净。您实际上可以直接通过 aws 控制台设置环境变量(EB app/environment -> 配置 -> 软件配置 -> 环境属性)。

更新:

要理解的关键概念是 Laravel 只是使用 phpdotenv to dump vars from the .env file into php's global $_ENV, whereas any already existing env vars are automatically included in $_ENV when php starts the server (docs)。所以 .env 文件本身是不必要的,实际上只是为了开发方便。 (除非到目前为止我刚刚被弹性豆茎宠坏了)。

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

1. 转到您的 Elastic Beanstalk 仪表板


2. 接下来进入你的软件配置


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

See bigger version of picture below


4. 接下来通过 SSH 进入您的应用程序 eb 实例。 See details here,或尝试以下操作:

$ 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 是您的应用 public DNS。你会在这里找到你的:


5. cd 到您的应用:$ cd /var/app/current


6. 授予 read/write 访问您的存储文件夹的权限,否则应用程序无法写入日志文件夹,当 运行 迁移。授予访问权限:$ sudo chmod -R ugo+rw storage


7.终于来了! 运行 您的迁移并执行其他 artisan 命令,如果您愿意的话! $ php artisan migrate 从 gitbash 看成功应该大致如下所示: