2016-11-23 135 views
2

我的node.js应用程序由两部分组成,一个表达后端和一个响应前端。Elastic Beanstalk运行后部署脚本

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

package.json 
/app/package.json 

我想要做的就是在我的前端文件夹,应用程序,即建立我的代码运行的脚本。

我想运行的脚本是npm installnpm run build 如何在部署发生后运行此脚本?

commands: 
    01_app_npm_install: 
     command: npm install 
     cwd: app/ 
    02_app_npm_build: 
     command: npm run build 
     cwd: app/ 

但它返回一个错误,说“没有这样的文件或直销 保守党:‘应用程序/’。”

这是可能的,以在AWS上做弹性魔豆?

回答

1

感谢@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 

硬编码的节点版本是不完美的,但它适用于现在。

+0

我不认为你需要创建该目录,它应该已经在那里。我不必在python环境中这样做。如果你愿意的话,你显然也可以将一个文件移动到container_commands中的那个目录中。 – Gustaf

0

如果您参考文档,你会发现,container_commands是你应该把应用程序相关的东西。

该文件是基于各个部分的首选项执行的,commands是第一个,container_commands是最后一个。在此阶段,应用程序尚未复制到所需位置(/var/app/current)。

此外,如果您设置环境变量,这些将提供给您只container_commands

+0

即使我将其更改为container_commands,它仍然无法找到目录app /。 我在.ebextensions目录下有.config文件,是否正确? –

4

我还没有自己的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 
相关问题