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

AWS CodeCommit中Laravel CI/CD开发求助:数据库连接与404错误

AWS CodeCommit + Laravel CI/CD 问题排查与解决方案

一、数据库连接问题修复

  • 禁止在CodeBuild阶段执行数据库操作:你当前build命令里的php artisan migrate --force和db:seed完全错误——CodeBuild是临时构建环境,没有权限安全访问Elastic Beanstalk/EC2的数据库(开公网权限会导致数据泄露风险)。正确做法是把迁移/种子操作放到Elastic Beanstalk部署后钩子:
    1. 在项目根目录创建.ebextensions/01-migrate.config文件,内容如下:
      container_commands:
        01_migrate:
          command: "php artisan migrate --force"
          leader_only: true # 只在主实例执行,避免多实例重复操作
        02_seed:
          command: "php artisan db:seed --force"
          leader_only: true
      
    2. 配置安全组权限:将Elastic Beanstalk实例的安全组,添加到数据库(RDS/自建)安全组的入站规则中,允许对应端口访问(MySQL用3306,PostgreSQL用5432)。
  • 环境变量正确配置:不要在CodeBuild里复制.env.beta,直接在Elastic Beanstalk控制台的「配置」→「软件」中设置所有.env所需变量(比如DB_HOST、DB_DATABASE、DB_USERNAME等),Laravel会自动读取这些系统环境变量,无需在项目中包含.env文件(防止敏感信息泄露)。

二、Nginx 404 错误解决

即使配置了/public仍报错,大概率是配置或权限问题:

  • 强制Nginx指向public目录:创建.ebextensions/02-nginx.config文件,覆盖默认Nginx配置:
    files:
      "/etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
          server {
              listen 80;
              location / {
                  root /var/app/current/public;
                  try_files $uri $uri/ /index.php?$query_string;
              }
              location ~ \.php$ {
                  fastcgi_pass unix:/var/run/php-fpm/www.sock;
                  fastcgi_index index.php;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  include fastcgi_params;
              }
          }
    
  • 修复目录权限:Elastic Beanstalk实例的storage和bootstrap/cache需要写入权限,创建.ebextensions/03-permissions.config:
    container_commands:
      01_set_permissions:
        command: "chmod -R 775 storage bootstrap/cache && chown -R webapp:webapp storage bootstrap/cache"
    

三、CI/CD 流程优化

  • 标准流程:CodeCommit存代码 → CodeBuild做编译构建 → Elastic Beanstalk部署运行
    1. CodeBuild仅负责:安装生产依赖、编译前端资源,不碰数据库操作。
    2. 用CodePipeline串联整个流程,设置分支触发规则(比如推送到beta分支自动构建部署)。
  • 修改后的buildspec.yml:
    version: 0.2
    phases:
       install:
         runtime-versions:
             php: 7.4
             nodejs: 12.x
         commands:
             - apt-get update -y
             - apt-get install -y libpq-dev libzip-dev
             - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
       pre_build:
         commands:
             - composer install --no-dev --optimize-autoloader # 只装生产依赖,优化自动加载
             - npm install
       build:
         commands:
             - npm run production
             - rm -rf node_modules # 移除前端开发依赖,减小产物体积
    artifacts:
       files:
           - '**/*'
       name: $(date +%Y-%m-%dT%H:%M:%S).zip
    

四、实用学习方向

不用找零散第三方教程,直接啃AWS官方文档核心内容:

  • Elastic Beanstalk部署Laravel章节:重点看环境变量配置、容器命令、自定义Nginx配置。
  • CodePipeline串联CodeCommit+CodeBuild+Elastic Beanstalk章节:重点看分支触发规则、构建产物传递逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:40:27