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

AWS Beanstalk环境下Laravel通过控制器运行Artisan迁移命令报错求解

报错原因说明

你遇到的Nginx报错是因为生产环境的Nginx没有配置Laravel所需的路由重写规则:

  • Nginx默认会把请求路径直接映射到web根目录(/var/www/html/public)下的静态文件,当你访问/artisan/command/migrate路径时,Nginx没有把请求转发给Laravel的入口文件index.php处理,而是直接尝试查找对应路径的静态文件,自然找不到就返回500错误。
  • 本地环境能正常运行是因为本地开发服务器(比如php artisan serve、集成环境的Apache)默认自带了Laravel所需的重写规则,会把所有动态请求转发给入口文件处理。

AWS Beanstalk执行Laravel数据库迁移的可行方案

方案1:修复.ebextensions自动迁移配置(最推荐)

这是最符合CI/CD规范的方案,之前部署失败大概率是配置参数不全导致的,按以下规则配置即可:
在项目根目录创建.ebextensions/01_migrations.config文件,内容如下:

container_commands:
  01_run_migrations:
    command: "php artisan migrate --force"
    cwd: "/var/www/html"
    leader_only: true

参数说明:

  • --force:跳过生产环境下Laravel默认的迁移确认提示,否则命令会卡住导致部署超时
  • cwd:指定命令执行目录为项目根目录,避免找不到artisan文件
  • leader_only:多实例部署时仅在leader实例上执行一次迁移,避免重复执行冲突
    注意提前确认RDS的安全组已开放5432端口,允许Beanstalk所属EC2实例的安全组访问。

方案2:手动SSH到EC2实例执行迁移

你无法通过Putty连接是SSH配置问题,按以下步骤操作即可:

  1. 在AWS控制台的Beanstalk环境配置→安全选项中,绑定你自己的EC2密钥对,保存后等待环境更新完成
  2. 修改EC2实例所属的安全组,放开22端口的入站规则,仅允许你的本地公网IP访问
  3. 用Putty加载密钥对对应的ppk文件,以ec2-user为用户名连接实例IP
  4. 连接成功后执行命令:
cd /var/www/html
php artisan migrate --force

方案3:修复Nginx配置后通过控制器调用(不推荐生产长期使用)

如果临时需要用控制器调用的方式,先修复Nginx的重写规则即可解决报错:
在项目根目录创建.ebextensions/02_nginx.config文件,内容如下:

files:
  "/etc/nginx/conf.d/elasticbeanstalk/laravel.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      location / {
          try_files $uri $uri/ /index.php?$query_string;
      }

部署后Nginx会自动加载配置,所有动态请求都会转发给Laravel处理,就不会出现路径不存在的报错。注意该方式存在极高安全风险,测试完成后务必删除对应路由和控制器逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:02