AWS Elastic Beanstalk ebextension不执行shell脚本以使用npm install

时间:2016-06-10 13:15:10

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

我需要在弹性beanstalk上运行的节点js应用程序中安装一个单独的框架。

我已经尝试将脚本放在我的主package.json文件中,但是在安装时我得到了权限错误。

所以我创建了一个配置文件,并尝试从container_commands运行npm install。它没有想要运行npm,因为它说命令丢失了。我尝试将正确的环境路径变量添加到npm,当通过ssh手动完成时,它会起作用,但是它给出了相同的错误,它无法找到npm命令。

最后。

我通过ebextension创建了一个bash脚本,它安装了应用程序,并从container_commands运行该脚本。

脚本被正确创建但从未运行过。如果我ssh到实例并手动执行它作为sudo工作。 该应用程序部署没有错误但它似乎永远不会执行脚本,我知道这是因为从未创建node_modules文件夹。

我不确定在我的日志中查找错误的位置,当我尝试时,我找不到任何有用的内容。

这是我的ebextension:

files:
    "/tmp/install_application.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash
            export PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
            eval "cd /var/app/current/library/server && npm install --production"
            eval "cd /var/app/current && npm install --production"

container_commands:
    00-install-application:
    command: "sh /tmp/install_application.sh"

1 个答案:

答案 0 :(得分:1)

我设法找到了答案。 我的脚本有一些问题。

  1. 以前的尝试中旧脚​​本仍然在钩子文件夹中。
  2. 在项目解压之前我正在解雇脚本,或者在部署项目后我正在解雇脚本。
  3. 我正在将模块安装到最终目的地/ var / app / current,一旦安装部署的应用程序,该模块就会被覆盖。
  4. 这是最终的脚本。

    files:
       "/opt/elasticbeanstalk/hooks/appdeploy/enact/00-install-application.sh":
       mode: "000755"
       owner: root
       group: root
       content: |
           #!/bin/bash
           PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
           cd "/tmp/deployment/application/library/server"
           npm install --production