亚马逊弹性Beanstalk上的Node.js部署问题

12
我正在尝试使用亚马逊弹性Beanstalk服务部署一个Node.js应用程序。根据这篇教程(http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.sdlc.html),我成功地部署了该应用程序。但是,一旦上传到亚马逊上,应用程序无法启动。检查日志后发现以下错误:“运行npm install失败”。
有没有人知道问题可能是什么?该应用程序在本地工作得很好。
谢谢您的帮助!
4个回答

16

我之前也遇到了同样的问题,Kevin的解决方案帮了我大忙,但同时也引入了另一个问题:EB新生成的自动扩展实例也需要手动配置。以下是我对Kevin方法的修改,以解决这两个问题:

另一种解决Kevin问题的方法是将所需的软件包添加到应用程序的配置文件中。创建一个以 .config 为扩展名的配置文件(例如 myapp.config),并将其放置在源捆绑包的 .ebextensions 顶级目录中。为了要求 openssl-devel 软件包,请在配置文件中包含以下行:

packages:
    yum:
        openssl-devel: []

有关配置文件的详细信息,请参见:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_custom_container.html

有关在配置文件中包含软件包(以及更多信息)的详细信息,请参见:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html


我还需要添加gccmakelibxml2libxml2-devel才能让我的npm安装正常工作,下面是我的app.config文件中yum部分的内容:npm install error - shaond
4
嗨@sHz,我又遇到了一个不同的项目出现了同样的问题。我必须再次添加额外的包,但我真的很想避免试错来找到正确的包。你是如何找出你需要的依赖关系的呢? - jakeorr
谢谢@jakeorr,但是这个配置文件不是在npm安装包之后运行吗?我们应该将其添加为AppDeployPreHook/xxfile-name.sh文件(名称前缀数字小于50npm.sh)。 - asaf am

1
我找出了问题所在。下面是解释。
npm包管理器无法安装某些软件包的原因是因为某些软件包需要先安装Linux库(例如OpenSSL-devel)。为了解决这个问题,我必须执行以下操作:
1. SSH到与我的Node.js Elastic Beanstalk实例关联的EC2实例
首先,取消EC2实例上的“终止保护”(单击EC2实例,然后查找“更改终止保护”)。然后,您需要向EC2实例添加“KeyPair”。为此,请转到ELB管理器并编辑ELB应用程序的配置文件。有关详细说明,请查看此链接(SSH到Elastic Beanstalk实例
2. 安装缺少的库(在我的情况下,因为bcrypt npm包需要它)
sudo yum update

sudo yum install openssl-devel

希望这有所帮助!

1
这正是我的问题,也是100%的解决方案。请注意,在添加密钥对时,EB会将所有内容标记为红色,并使仪表板看起来像是崩溃了,直到进行了新的部署 - 在您SSH登录并修复问题之后。 - Catalyst
9
如果你正在阅读并遵循这篇文章,请避免在 Elastic Beanstalk 实例上手动安装软件包 - 当你自动扩展或重新构建环境时,它们将不会存在。相反,按照 jakeorr 的回答,将软件包添加到 .ebextensions 配置中,以便自动安装。 - Josh Hunt
2
被踩反对了。这样做违背了使用 EB 的初衷。新创建的实例将会丢失这些更改。 - Lucky Soni

1
我遇到了这个问题,通过选择下一个更大的实例类型来解决它。

0

我遇到了类似的问题,我的错误是由于一个节点包没有成功安装造成的。因此,当我从package.json中删除了那个节点包,因为我真的不需要它时,问题就解决了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接