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 install和npm 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弹性豆茎上进行吗?
感谢 @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)
硬编码节点版本并不完美,但现在可以使用。
我自己还没有使用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)