Elastic Beanstalk运行部署后脚本

And*_*ren 5 amazon-web-services node.js npm amazon-elastic-beanstalk

我的node.js应用程序由两部分组成,一个是后端,一个是前端。

我在这个结构中有两个package.json文件

package.json 
/app/package.json
Run Code Online (Sandbox Code Playgroud)

我想做的是在前端文件夹app中运行一个脚本,以构建我的代码。

我要运行该脚本npm installnpm run build 如何运行此脚本部署发生后?

commands:
    01_app_npm_install:
        command: npm install
        cwd: app/
    02_app_npm_build:
        command: npm run build
        cwd: app/
Run Code Online (Sandbox Code Playgroud)

但是它返回一个错误,指出“没有这样的文件或目录:'app /'。”

这可以在AWS弹性豆茎上进行吗?

And*_*ren 6

感谢 @gustaf 和其他一些网站,我设法将解决方案放在一起。它不漂亮,但它有效。

我创建了一个文件 .ebextensions/01_build.config

commands:
  create_post_dir:
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
    ignoreErrors: true
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      cd /var/app/current/app/
      sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm install
      sudo /opt/elasticbeanstalk/node-install/node-v6.2.2-linux-x64/bin/npm run build
Run Code Online (Sandbox Code Playgroud)

硬编码节点版本并不完美,但现在可以使用。


Gus*_*taf 5

我自己还没有使用Elastic Beanstalk完成nodejs,但是我做了很多Django。

commands:部分在放置项目文件之前运行。例如,您可以在此处安装服务器软件包。

container_commands:在将文件放置到最终目的地之前,该部分在暂存目录中运行(对于nodejs而言,它似乎是/ var / app / current)。如果需要,您可以在此处修改文件。

上面的参考:http : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

您还可以运行部署后脚本。这没有很好的记录(至少没有记录)。您可以执行以下操作:

files:
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/usr/bin/env bash
            service httpd restart
Run Code Online (Sandbox Code Playgroud)