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

Amazon Linux 2 ElasticBeanstalk PHP环境出现npm命令不存在错误

问题原因分析

1. AWS ElasticBeanstalk近期变更触发故障

近期Amazon Linux 2环境的PHP平台镜像做了例行安全更新,调整了sudo命令的secure_path配置,默认移除了/usr/local/bin(NodeSource源默认安装npm、node的路径),导致sudo调用npm时系统无法定位到可执行文件。
同时你依赖的NodeSource 12.x安装源早已停止维护,近期源端的安装脚本出现了路径配置缺陷,安装完成后不会自动将npm软链接到系统默认路径,两个问题叠加导致所有实例重新部署后集体触发故障。

2. 现有配置存在的问题

  • .ebextensions配置存在语法错误:document_root的参数被错误拆分为两行/p和ublic,正确值应为/public,该语法错误会导致站点目录配置失效。
  • sudo调用npm不符合当前安全路径规则:02_install_node_dependencies步骤中使用sudo npm install,而sudo的安全路径不包含npm的安装目录,直接触发command not found报错。
  • 依赖停止维护的安装源:prebuild钩子中使用的NodeSource 12.x安装源已终止服务,安装逻辑不稳定,随时可能失效。
修复方案
  • 优先回滚ElasticBeanstalk平台版本到最近一次正常运行的历史版本,快速恢复业务。
  • 修改.ebextensions中的container_commands配置:
    1. 修复document_root的断行错误,修正为value: /public
    2. 调用npm时要么移除sudo(/var/app/staging目录权限无需sudo即可操作),要么使用绝对路径调用,例如将sudo npm install改为/usr/local/bin/npm install
  • 修改.platform/hooks/prebuild/install_latest_node_js.sh脚本:
    1. 替换为仍在维护期的Node版本安装源,例如16.x/18.x
    2. 安装完成后新增软链接逻辑,确保npm可被全局找到,示例代码:
    sudo ln -s /usr/local/bin/node /usr/bin/node
    sudo ln -s /usr/local/bin/npm /usr/bin/npm
    
  • 后续建议关闭平台自动更新,先在测试环境验证新版本镜像兼容性后再手动升级,避免批量故障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:48:01