【问题标题】:Node.js deployment issue on Amazon Elastic BeanstalkAmazon Elastic Beanstalk 上的 Node.js 部署问题
【发布时间】:2013-03-05 20:19:28
【问题描述】:

我正在尝试使用 Amazon Elastic Beanstalk 服务部署 node.js 应用程序。按照本教程 (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.sdlc.html),我设法部署了该应用程序。但是,一旦上传到亚马逊,应用程序就无法启动。调查日志显示以下错误:“无法运行 npm install”。

有人知道问题可能是什么吗?该应用程序在本地运行良好。

提前感谢您的帮助!

【问题讨论】:

    标签: node.js amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    我遇到了同样的问题,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.
    • 嗨@sHz,我在另一个项目中再次遇到同样的问题。我必须再次添加额外的包,但我真的很想避免反复试验以找到正确的包。您是如何确定需要的依赖项的?
    • 谢谢@jakeorr,但是这个配置文件不是在npm安装包之后运行吗?我们不应该将它添加为 AppDeployPreHook/xxfile-name.sh 文件(名称的前缀编号低于 50npm.sh)
    【解决方案2】:

    我发现了问题所在。这是解释。

    npm 包管理器无法安装某些包的原因是因为某些包需要先安装 linux 库(即 OpenSSL-devel)。为了解决这个问题,我不得不:

    1.通过 SSH 连接到与我的 Node.js Elastic Beanstalk 实例关联的 EC2 实例

    首先,删除您的 EC2 实例上的“终止保护”(单击您的 EC2 实例,然后查找“更改终止保护”。然后,您需要向 EC2 实例添加“密钥对”。为此,请转到ELB 管理器并编辑您的 ELB 应用程序的配置文件。有关详细说明,请查看此链接 (SSH to Elastic Beanstalk instance)

    2。安装缺少的库 (在我的情况下,因为 bcrypt npm 包需要它)

    sudo yum update
    
    sudo yum install openssl-devel
    

    希望这会有所帮助!

    【讨论】:

    • 正是我的问题和 100% 修复。请注意,在添加密钥对时,eb 将所有内容标记为红色并让仪表板看起来像死了一样,直到新的部署被推送——在你 ssh 进入并解决问题之后,这是正常的。
    • 如果您正在阅读并遵循此内容,请避免在弹性 beanstalk 实例上手动安装软件包 - 当您自动扩展或重建环境时,它们将不存在。相反,请按照 jakeorr 的回答并将包添加到 .ebextensions 配置中,以便自动安装。
    • 投反对票。这违背了使用 EB 的目的。新配置的实例将丢失这些更改。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我发现了一个类似的问题,对我来说,这个错误是因为一个节点包没有成功安装,所以当我从我的 package.json 中删除那个节点包时,因为我真的不需要它,它起作用了!

      【讨论】:

        猜你喜欢
        • 2013-06-14
        • 2014-12-25
        • 2014-03-31
        • 2012-02-24
        • 2019-11-22
        • 1970-01-01
        • 2016-07-08
        • 2014-12-13
        • 2015-01-06
        相关资源
        最近更新 更多