gpt4 book ai didi

node.js - 避免在弹性 beantalk 中重建 node_modules

转载 作者:IT老高 更新时间:2023-10-28 21:52:44 28 4
gpt4 key购买 nike

我们有一个相当简单的 node.js 应用程序,但由于 AWS Elastic Beanstalk 部署机制,推出新版本(通过 git aws.push)大约需要 5 分钟。单个文件提交。

即提交本身(和上传)很快(只有 1 个文件要推送),但随后 Elastic Beanstalk 从 S3 获取整个包,解压缩并运行 npm install,这会导致 node-gyp 编译一些模块.安装/构建完成后,Elastic Beanstalk 会删除 /var/app/current 并将其替换为新的应用程序版本。

不用说,不断的 node_modules 重建是不必要的,在我的旧 Macbook Air 上重建需要 30 秒,在 ec2.micro 实例上需要超过 5 分钟,并不好玩。

我在这里看到了两种方法:

  1. 调整 /opt/containerfiles/ebnode.py 并使用 node_modules 位置以避免在部署时将其删除和重建。
  2. 在 Elastic Beanstalk EC2 实例上设置一个 git 存储库,基本上我们自己重写部署过程,因此/var/app/current 接收推送并仅在必要时运行 npm install(这使得 Elastic Beanstalk看起来像 OpsWorks..)

当亚马逊更新他们的 Elastic Beanstalk 钩子(Hook)和架构时,这两个选项都缺乏优雅并且容易出现问题。

也许有人对如何避免不断重建已经存在于应用程序目录中的 node_modules 有更好的想法?谢谢。

最佳答案

感谢基里尔,这真的很有帮助!

我只是为那些只看npm install 的简单解决方案的人分享我的配置文件。该文件需要放在项目的.ebextensions文件夹中,因为它不包含最新版本的 Node 安装,所以它更轻,并且可以使用。

它还会动态检查安装的 Node 版本,因此无需将其包含在 env.vars 文件中。

.ebextensions/00_deploy_npm.config

files:
"/opt/elasticbeanstalk/env.vars" :
mode: "000775"
owner: root
group: users
content: |
export NPM_CONFIG_LOGLEVEL=error
export NODE_PATH=`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
"/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" :
mode: "000775"
owner: root
group: users
content: |
#!/bin/bash
. /opt/elasticbeanstalk/env.vars
function error_exit
{
eventHelper.py --msg "$1" --severity ERROR
exit $2
}

#install not-installed yet app node_modules
if [ ! -d "/var/node_modules" ]; then
mkdir /var/node_modules ;
fi
if [ -d /tmp/deployment/application ]; then
ln -s /var/node_modules /tmp/deployment/application/
fi

OUT=$([ -d "/tmp/deployment/application" ] && cd /tmp/deployment/application && $NODE_PATH/npm install 2>&1) || error_exit "Failed to run npm install. $OUT" $?
echo $OUT
"/opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh" :
mode: "000666"
owner: root
group: users
content: |
#no need to run npm install during configdeploy

关于node.js - 避免在弹性 beantalk 中重建 node_modules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21200251/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com