AWS Elastic Beanstalk部署Laravel时Composer依赖安装失败
问题背景
在Amazon Linux 2 + PHP 8.1环境的Elastic Beanstalk部署Laravel应用时,部署失败,提示无法安装composer.json指定的依赖。查看eb-engine.log发现核心错误:
执行命令[app-deploy]-[Install composer dependencies]时出错,停止运行命令。错误:安装Composer依赖失败,命令/bin/sh -c composer.phar install --no-ansi --no-interaction执行失败,退出状态1。标准错误:不要以root/超级用户身份运行Composer!
注:应用原运行环境为PHP 7,composer.json中PHP版本约束为^7.3|^8.0,与PHP 8.1兼容,版本兼容性并非问题根源。
解决方案
方法一:临时允许root用户执行Composer(快速修复)
在项目根目录创建.ebextensions/composer.config文件,添加以下内容:
commands: 01_enable_composer_root: command: echo "COMPOSER_ALLOW_SUPERUSER=1" >> /etc/profile.d/composer.sh ignoreErrors: false
该配置会在实例启动时设置环境变量,允许Composer以root身份执行。
方法二:以非root用户执行Composer(推荐)
Elastic Beanstalk默认使用webapp用户运行Web应用,可通过配置切换到该用户执行Composer安装:
在项目根目录创建.ebextensions/override-composer-user.config文件,添加以下内容:
container_commands: 01_install_composer_as_webapp: command: su -c "composer.phar install --no-ansi --no-interaction" webapp cwd: /var/app/staging
此配置会覆盖默认的Composer安装命令,以webapp用户身份执行依赖安装,符合Composer的安全规范。
后续操作
完成配置文件创建后,重新打包并部署应用到Elastic Beanstalk即可解决依赖安装失败问题。
内容的提问来源于stack exchange,提问作者Calum Childs

