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部署后钩子:- 在项目根目录创建
.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 - 配置安全组权限:将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部署运行
- CodeBuild仅负责:安装生产依赖、编译前端资源,不碰数据库操作。
- 用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
相关产品推荐
相关产品推荐

