I have a Laravel (5.4) application that uses npm, bower and gulp for frontend.
I have configured all with success on deploy but the npm install or npm install --production (that in my case is the same) command give me errors and makes the deploy to fail.
Here is the "Causes" as response from AWS when i run eb deploy command.
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 [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: Use uuid module instead
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: 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 [email protected] should be installed with -g
npm WARN prefer global [email protected] should be installed with -g
> [email protected] 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! [email protected] install: `node scripts/install.js`
npm ERR! spawn sh ENOENT
npm ERR!
npm ERR! Failed at the [email protected] 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).
The .ebextensions/05-frontend-install.config file has this content
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"
I solved my problem by using a custom elastic beanstalk post-deploy platform hook (sounds great eh?)
my 04-nodenpm.config file has this content:
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
The part that solved the problem is under files: where i am manually adding an /opt/elasticbeanstalk/hooks/appdeploy/post/99npminstall.sh file with content: that as a post deploy action makes the npm install ... and all the stuff i wanted.
npm seems not be totally available on container_commands. Use a post deploy hook to fire those npm installation commands.
Refs & Usefull links:
http://www.eq8.eu/blogs/29-aws-elasticbeanstalk-deployment-hooks https://forums.aws.amazon.com/thread.jspa?threadID=137136
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With