【问题标题】:Deploying a laravel application on aws elastic beanstalk with code pipeline and code build with the laravel application using rds使用代码管道在 aws elastic beanstalk 上部署 laravel 应用程序,并使用 rds 使用 laravel 应用程序构建代码
【发布时间】:2020-10-11 05:27:34
【问题描述】:

所以我正在尝试将我的 laravel 应用程序 (v7) 部署到弹性 beantalk。我看过指导上传包含 .env 文件的 zip 文件并更新 config.database 以使用全局 RDS_* 环境变量的教程。

这对我不起作用,因为我想使用 codepipline 和 codebuild 来使用 git hooks 构建我的应用程序。我试图设置它,但我的代码构建没有成功构建,因为在我的 pubsec.yaml 文件中我添加了常用的 laravel 设置命令,例如安装依赖项和迁移应用程序的数据库。

迁移数据库是我遇到的问题。不知何故,codebuild 似乎没有为我的应用程序数据库获取 RDS_* 变量。我在这里被困了一段时间。

这让我质疑 codebuild 如何处理环境变量。它如何创建用于部署的 .env 文件?我什至添加了一个 Linux 命令来将我的 .env.example 复制到一个新的 .env 文件中,但遇到了同样的问题。

任何帮助将不胜感激。谢谢

日志上的错误:

SQLSTATE[HY000] [2002] 连接被拒绝(SQL: select * from information_schema.tables 其中 table_schema = forge 和 table_name = 迁移 和 table_type = 'BASE TABLE') ```

【问题讨论】:

  • 你能澄清你的意思吗? CodeDeploy 无法部署到 ElasticBeanstalk。 CodePipeline 本身使用 AWS Elastic BeanstalkDeploy 操作提供程序处理向 EB 的存款。
  • 我的管道的 codedeploy 构建步骤失败,因为似乎由 codeploy 在其容器中构建的应用程序无法访问 RDS_* 数据库 .env 变量,因此我的数据库迁移失败。跨度>
  • 你是说 CodeBuild 吗?抱歉,我不明白 CodeDeploy 在您的 CodePipeline 中的作用。
  • Yes codebuild... 我已经编辑了我的问题以反映这一点。感谢收看
  • 那么你的buildspec.yml 文件是什么? CodeBuild 仅执行您在 buildspec.yml 文件中指定的内容。

标签: laravel amazon-web-services amazon-elastic-beanstalk amazon-rds


【解决方案1】:

Codebuild 在与 elastic beanstalk 不同的环境中运行,因此无法在运行 AWS codebuild 的容器中访问在 elastic beanstalk 中创建的环境变量。

代码构建的实际作用是构建您的应用程序并将其传输到 s3 存储桶,以便在部署期间可以访问您的应用程序并将其移动到您的 VPC,在我的例子中是由弹性 beanstalk 管理的 ec2 实例。

部署后(即应用移动到vpc),应用可以访问EB环境变量。

因此,如果您要运行需要访问 EB 环境变量的命令,则在代码构建中使用命令是放置它们的错误位置。您应该使用 EB 扩展。你可以阅读他们的信息here

对于我的 Laravel 应用程序,我在应用程序根目录的 .ebextentions 目录中添加了一个 init.config 文件,然后将迁移命令添加为容器命令。这适用于我的用例。

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 2019-07-22
    • 2015-10-22
    • 2017-05-11
    • 2017-09-28
    • 2020-06-14
    • 2020-02-21
    • 2018-09-13
    相关资源
    最近更新 更多