如何在64位Amazon Linux 2的Elastic Beanstalk Python3.7环境安装Node
问题原因
你通过nvm安装的Node仅将执行路径写入了root用户的.bashrc配置文件,该配置仅会在交互式shell登录时加载。而Elastic Beanstalk执行container_commands时使用的是非交互式shell,不会加载用户目录下的bash配置,因此默认PATH中没有nvm管理的Node二进制路径,导致调用cssmin、terser时找不到node命令。
解决方案
以下两种方案任选其一即可:
方案1:将Node二进制软链接到系统全局路径
该方案可以让所有脚本都能直接调用node命令,适用范围更广。修改你的.ebextensions配置中的安装Node命令,安装完成后添加软链接步骤:
commands: 05_install_node: command: | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash export NVM_DIR="/root/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install node # 软链接到系统默认PATH包含的目录 ln -sf $(which node) /usr/local/bin/node ln -sf $(which npm) /usr/local/bin/npm
方案2:执行collectstatic前手动加载nvm环境
如果不想全局暴露node,可直接修改collectstatic的执行命令,在运行Django命令前先加载nvm配置:
container_commands: ... 07_collectstatic: command: > export NVM_DIR="/root/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && source /var/app/venv/*/bin/activate && python3 manage.py collectstatic --noinput
验证
可新增一个临时的container command确认node是否能被正常识别:
container_commands: 06_test_node: command: "node -v"
如果该命令执行成功输出Node版本号,说明配置生效。
内容的提问来源于stack exchange,提问作者Jarad
相关产品推荐
相关产品推荐

