Node.js 在Elastic Beanstalck上运行npm安装时出现问题 处境
我有一个Laravel(5.4)应用程序,它使用npm、bower和gulp作为前端 我已经成功地配置了所有部署,但是Node.js 在Elastic Beanstalck上运行npm安装时出现问题 处境,node.js,laravel,amazon-web-services,deployment,amazon-elastic-beanstalk,Node.js,Laravel,Amazon Web Services,Deployment,Amazon Elastic Beanstalk,我有一个Laravel(5.4)应用程序,它使用npm、bower和gulp作为前端 我已经成功地配置了所有部署,但是npm install或npm install--production(在我的情况下是相同的)命令给了我错误并使部署失败 问题 以下是我运行eb deploy命令时AWS的响应“原因” Application update failed at 2017-06-07T17:08:38Z with exit status 1 and error: container_command
npm install
或npm install--production
(在我的情况下是相同的)命令给了我错误并使部署失败
问题
以下是我运行eb deploy
命令时AWS的响应“原因”
Application update failed at 2017-06-07T17:08:38Z with exit status 1 and error: container_command 01-npm-install in .ebextensions/05-frontend-install.config failed.
npm WARN lifecycle npm is using /usr/bin/node but there is no node binary in the current PATH. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@1.0.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.2.3: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN prefer global node-gyp@3.6.2 should be installed with -g
npm WARN prefer global marked@0.3.6 should be installed with -g
> node-sass@3.13.1 install /var/app/ondeck/node_modules/node-sass
> node scripts/install.js
npm ERR! file sh
npm ERR! path sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn sh
npm ERR! node-sass@3.13.1 install: `node scripts/install.js`
npm ERR! spawn sh ENOENT
npm ERR!
npm ERR! Failed at the node-sass@3.13.1 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2017-06-07T17_08_38_740Z-debug.log.
Incorrect application version "app-5d9c-170607_190633" (deployment 40). Expected version "app-0466-170606_110037" (deployment 31).
.ebextensions/05 frontend install.config
文件包含以下内容
container_commands:
00-npm-upgrade:
command: "npm install -g npm@latest"
01-npm-install:
command: "npm install --production"
02-gulp-install:
command: "sudo npm install gulp"
03-bower-install:
command: "sudo npm install bower"
04-bower-deploy:
command: "sudo bower install --allow-root"
05-gulp-deploy:
command: "sudo npm run prod"
用一个EB钩子!
我通过使用定制弹性豆茎部署后
解决了我的问题(听起来不错吧?)
我的04 nodenpm.config
文件包含以下内容:
container_commands:
00-entersudoi:
command: "sudo -i"
01-removeoldnode:
command: " yum remove -y nodejs npm"
02-get-noderpm:
command: " curl --silent --location https://rpm.nodesource.com/setup_7.x | bash -"
03-ensurecggmake:
command: " yum install -y gcc-c++ make"
04-installnodenpm:
command: " yum install -y nodejs"
05-exitsudoi:
command: "exit"
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99npminstall.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
cd /var/app/current/
sudo npm install -g gulp bower laravel-elixir
sudo bower install --allow-root
sudo gulp --production
解决问题的部分在文件下:
我正在手动添加一个/opt/elasticbeanstalk/hooks/appdeploy/post/99npminstall.sh
文件,该文件的内容为:
,作为部署后操作使npm安装…
以及我想要的所有东西
TL;博士:
npm似乎不能完全用于container_命令。使用post-deploy钩子来触发这些npm安装命令
参考和有用链接:
为什么你需要大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大
sudo npm run prod
等于我的package.json
中的sudo gulp--production
,它缩小了用于生产的2个文件中的所有js和所有css。有些资产是定制的,有些资产是依赖项(甚至来自bower),我想我的意思是,为什么不在CI/CD服务器上执行此操作,然后eb deploy
?在我的例子中,我在gitlab上有repo,我进行测试->部署登台|部署生产(手动)因此,您建议在gitlab容器中构建css js操作,然后全部压缩并部署到aws的登台/生产?我没有考虑过,但我会试一试。Thx@SamH.uuh。。。我正在尝试这一点,但这将是棘手的-我不喜欢这作为解决方案这正是我所需要的Laravel mixnpm run prod
。奇怪的是,似乎很少有人遇到这个问题。我猜每个人都只是提交他们的编译资产。¯_(ツ)_/“@wimbrace从这个答案开始几年后,我发现在生产环境中构建资产并不是最佳做法。我现在在测试后在ci中构建资产……然后部署。