【发布时间】:2020-06-14 06:12:47
【问题描述】:
我想开始将我的 laravel 应用部署到生产环境。为了避免在不久的将来更改 AWS 配置,我决定尝试添加持续集成。为此,我使用弹性 beanstalk 并使用另一个 AWS 工具将代码推送到那里。这一切都完美无缺。我在 /public/index.php 中放置了一条测试消息以输出“hello world”,它在访问 URL 时按预期工作。当我删除此文本并正常运行我的 laravel 应用程序时,我收到 500 内部服务器错误。我不确定弹性 beantalk 在部署 laravel 应用程序时所做的一切。因此,我不确定此错误是否是由于数据库连接错误或 laravel 应用程序尚未完全设置引起的。
我在弹性 beanstalk 之外创建了一个 RDS 数据库实例。我可以从 sequel pro 访问它,并添加了用于存储所有数据的数据库。我将所有必要的数据库连接值(主机、端口、数据库、用户名、密码)添加到 /config/database.php 和弹性 beanstalk 服务器配置环境变量。
我在网上搜索了几天的信息,但没有找到任何具体的信息。我的问题还有一部分是对在 beanstalk 中部署期间如何设置 laravel 缺乏了解。 /.ebextensions 有什么东西可以帮助我实现这些目标吗?
当我部署我的代码时,我需要确保所有供应商文件都通过 composer 安装,然后我还需要确保所有数据库迁移/更改都发生。我想自动化尽可能多的步骤,这样我就可以推送代码更改,服务器将更改代码并继续工作。
我还想确保在设置数据库连接时没有遗漏任何东西。我需要在 laravel 中设置其他文件还是需要配置弹性 beanstalk 中的其他文件?我保持我的数据库对所有连接开放,然后我可以稍后收紧限制
编辑:我的数据库可能尚未正确配置,但这似乎不是问题的根源。我认为我的问题是知道哪些脚本以及如何在部署期间运行它们。我想确保运行 composer 和 php artisan migrate 以使所有内容保持最新。我怎样才能用弹性豆茎做到这一点?
【问题讨论】:
-
如果您有外部RDS,您需要为其确保正确的安全组。如果你这样做了,从你的描述中不确定。您可以随时 ssh 到弹性 beanstalk 实例,并从内部检查 RDS 和其他人员是否工作。
-
@Marcin 我确保外部 RDS 对所有公众开放,因此这不是权限问题。另外,我刚刚注意到当数据库未连接时,我的生产站点不会给出 500 错误。在需要 db 之前,它将显示页面并且不会显示任何问题。
-
应用程序似乎崩溃了。我认为您必须查看日志。 EB 可以向您显示来自应用程序的日志,或者只需 ssh 到实例并查看那里。
-
@Marcin 我查看了日志没有运气,但这次我在运行命令 01_drop_tables 时看到错误“连接超时”。由于它已超时,我猜您对未正确设置 RDS 的第一个猜测是正确的。因为我的安全组允许所有入站和出站请求,所以我认为权限不是问题。我不确定解决这个问题的最佳方法
-
显然有些东西阻塞了连接。 RDS 是否在同一子网或 vpc 中? RDS 子网 NACL 呢?也许它是非默认的并阻止连接?
标签: php laravel amazon-web-services amazon-elastic-beanstalk amazon-rds