AWS CodeDeploy部署Node应用报错:GLIBC_2.27缺失及127退出码问题
解决AWS CodeDeploy部署时Node依赖GLIBC_2.27缺失及NVM安装无效问题
问题根源
- GLIBC版本不兼容:较新的Node.js版本(如v16+)要求系统GLIBC版本≥2.27,但AWS EC2的部分镜像(如Amazon Linux 2默认GLIBC为2.26)无法满足,导致Node无法启动。
- NVM安装命令错误:你使用的
nvm install --lt是无效参数,正确的长期支持版参数应为--lts,且未指定具体兼容版本,导致Node版本未切换成功。 - 127退出码原因:因Node依赖缺失无法运行,或NVM环境未正确加载导致PATH中找不到Node/pm2可执行文件。
具体解决方案
1. 修复NVM安装脚本,安装兼容GLIBC的Node LTS版本
首先确认系统GLIBC版本:
ldd --version
若输出为GLIBC 2.26(如Amazon Linux 2),选择Node.js v14.x LTS(代号Fermium),该版本最高仅依赖GLIBC 2.17,完全兼容旧系统。
修改前置Node安装脚本:
# 若未安装NVM,先手动安装 mkdir -p "$HOME/.nvm" git clone https://github.com/nvm-sh/nvm.git "$HOME/.nvm" cd "$HOME/.nvm" git checkout v0.39.7 # 选择稳定的NVM版本 cd ~ # 加载NVM环境 export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # 安装Node.js v14 LTS并设置为默认版本 nvm install --lts=fermium nvm alias default lts/fermium
注意:若CodeDeploy以root用户运行,需将
$HOME替换为/root,确保NVM目录路径正确。
2. 确保application_start.sh正确加载NVM环境
修改原脚本的NVM加载部分,添加版本验证,避免环境变量失效:
#!/bin/bash # 若以root用户部署,调整NVM_DIR路径 export NVM_DIR="/root/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # 验证Node版本,确保环境加载成功 node --version npm --version # 授予目录权限 sudo chmod -R 777 /directory/backend # 进入工作目录 cd /directory/backend || exit # 安装依赖及PM2 npm install npm install pm2@latest -g # 重启应用 pm2 stop backend || true # 添加|| true避免停止不存在的进程导致报错 pm2 start ecosystem.config.js --env prodaws
3. 处理127退出码
若仍出现127错误,手动指定Node/PM2的PATH:
# 替换为实际安装的Node版本路径 export PATH="$PATH:/root/.nvm/versions/node/v14.21.3/bin"
添加到application_start.sh的开头,确保可执行文件能被找到。
验证步骤
- 在EC2实例上手动运行
application_start.sh,观察是否有报错。 - 检查Node依赖兼容性:
ldd $(which node)
确认输出中无GLIBC版本缺失的提示。
3. 查看PM2应用状态:
pm2 list
确认backend应用已正常启动。
内容的提问来源于stack exchange,提问作者Isaak
相关产品推荐
相关产品推荐

