我想知道使用弹性beanstalk部署复杂node.js的最佳做法是什么,而不依赖于外部npm存储库的可用性(以及处理内部开发的软件包的凭据和私有管理git存储库的高可用性)。
看起来有一种思想流派,它实际上将node_modules检入到实际部署的项目的源代码树中。
来源1:http://www.futurealoof.com/posts/nodemodules-in-git.html
来源2:http://eng.yammer.com/managing-node-js-dependencies-and-deployments-at-yammer/
所以听起来像检查它们是正确的方法,但是对于某些已编译的软件包(在Mac上开发并部署到linux)存在不同二进制格式的问题
我尝试过像yammer家伙建议的那样(签入模块除了bin文件夹),但即便如此,本地" npm重建"命令失败(它尝试在bin文件夹中chmod某些东西,而不是在express.js模块中存在),所以我甚至没有试图查看beanstalk默认部署环境将对这样的存储库做什么。我认为它运行" npm install" (它什么都不做),但它会运行" npm rebuild"?
那么,再次,部署具有多个依赖项的复杂项目的最佳实践是什么?现在在node / beanstalk世界中它一定是一个已经解决的问题,不是吗?
由于
答案 0 :(得分:2)
这是我的配置,可以完成您正在谈论的内容。将其保存在.ebextensions文件夹中,即可进行设置。我和https://stackoverflow.com/a/23242623/34340中的优秀答案之间的唯一区别是 NPM_CONFIG_UNSAFE_PERM = true 行,我从https://forums.aws.amazon.com/thread.jspa?messageID=534612
中学到了这一点。packages:
yum:
git: []
gcc: []
make: []
openssl-devel: []
libxml2: []
libxml2-devel: []
files:
"/opt/elasticbeanstalk/env.vars" :
mode: "000775"
owner: root
group: users
content: |
export HOME=/home/ec2-user # ADDED EXPORT COMMAND
export NPM_CONFIG_LOGLEVEL=error
export NPM_CONFIG_UNSAFE_PERM=true
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