You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel部署AWS Elastic Beanstalk后执行artisan命令报数据库主机数组空错误

Laravel在Beanstalk SSH会话中无法读取环境属性的原因与解决方法

问题原因

AWS Elastic Beanstalk配置的环境属性不会自动注入到SSH登录后的终端会话中:

  • 项目正常运行时,Web服务器(Apache/Nginx)的进程由Beanstalk管理启动,此时Beanstalk会自动把环境属性加载到进程的环境变量里,所以Laravel能读取到数据库配置。
  • 但SSH登录属于独立的终端会话,这个会话不会自动加载Beanstalk的环境变量,导致php artisan命令找不到数据库配置,抛出"Database hosts array is empty"错误。

你手动复制项目到EC2能正常执行,是因为当时你大概率已经把必要的配置写入了.env文件,或者会话中已经存在对应的环境变量,和Beanstalk自动部署的环境逻辑不同。

解决方法

1. 手动加载Beanstalk环境变量文件

Beanstalk会把所有环境属性存储在/opt/elasticbeanstalk/deployment/env文件中,执行以下命令加载变量后再运行artisan:

source /opt/elasticbeanstalk/deployment/env && php artisan migrate

如果需要在当前SSH会话中多次执行artisan命令,先单独执行source /opt/elasticbeanstalk/deployment/env,之后整个会话内的命令都能读取到环境变量。

2. 通过Beanstalk CLI执行容器命令(推荐)

用Beanstalk的官方CLI命令直接在容器环境中执行artisan,这种方式会自动加载环境变量,无需手动处理:

eb ssh --command "php artisan migrate"

3. 写入.env文件(不推荐)

应急情况下可以把Beanstalk的环境属性内容复制到Laravel根目录的.env文件中,但这种方式会把数据库密码等敏感信息明文存储,存在安全风险,不建议长期使用。


内容的提问来源于stack exchange,提问作者ashique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:24:57