我的node.js应用程序包含两个东西,一个快速后端和一个反应前端。
我在这个结构中有两个package.json文件
package.json
/app/package.json
我想要做的是在我的前端文件夹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/
但它返回一个错误,说“没有这样的文件或目录:'app /'。”
这有可能在aws弹性豆茎上做吗?
我自己没有用Elastic Beanstalk做过nodejs,但是我做了很多Django。
commands:
section在项目文件到位之前运行。 您可以在此处安装服务器软件包。
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
感谢@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
硬编码节点版本并不完美,但现在可以使用。
如果您参考文档,您会发现container_commands
是应该放置应用相关内容的地方。
该文件基于各个部分的首选项执行, commands
是第一个, container_commands
是最后一个。 在此阶段,应用程序尚未复制到所需位置( /var/app/current
)。
此外,如果设置环境变量,则只能在container_commands
使用这些变量。