AWS Beanstalk部署Laravel连接远程MySQL数据库问题排查
解决AWS Beanstalk上Laravel连接远程数据库时主机地址被覆盖的问题
遇到这种情况,大概率是AWS Beanstalk的配置优先级高于你本地的.env文件,导致数据库主机地址被覆盖了,我帮你梳理下几个关键的排查和解决方向:
检查Beanstalk环境变量
这是最常见的原因,Beanstalk的环境变量会直接覆盖Laravel.env里的配置。你可以这样操作:- 登录AWS控制台,找到你的Elastic Beanstalk环境
- 点击左侧菜单栏的「配置」,找到「软件」配置模块并点击编辑
- 查看环境变量列表里有没有
DB_HOST这一项,如果有,看看它的值是不是那个EC2域名?如果是,直接改成你想要的107.###.##.##就行,保存后重启环境生效。
排查.ebextensions自定义配置文件
如果你的项目根目录下有.ebextensions文件夹,里面的YAML配置文件也可能设置了数据库参数。打开文件夹里的配置文件(比如01-database.config这类命名的文件),查找是否有类似下面的配置:option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: DB_HOST value: ec2-54-###-###-##.eu-west-1.compute.amazonaws.com如果找到,把
value字段改成目标IP地址,然后重新部署项目到Beanstalk。确认Laravel数据库配置文件的默认值
最后再检查下Laravel的config/database.php文件,看看mysql连接的host配置是不是硬编码了默认值:'mysql' => [ // ...其他配置 'host' => env('DB_HOST', 'ec2-54-###-###-##.eu-west-1.compute.amazonaws.com'), // ...其他配置 ]如果这里的默认值是那个EC2域名,而环境变量和
.env的配置没生效的话,就会用这个默认值。你可以把默认值改成你的目标IP,或者直接写成env('DB_HOST')(不带默认值,强制使用环境变量或.env的配置)。
修改完配置后,记得重启你的Beanstalk环境,确保新配置生效。
内容的提问来源于stack exchange,提问作者Travis Cornelius
相关产品推荐
相关产品推荐

