'Elastic Beanstalk cannot find the server.js file
I'm trying to deploy my Angular application through GitHub Actions to Elastic Beanstalk. I'm using this GitHub actions for the deploying to ELB.
My problem is, the deployment is failing as the ELB cannot find the server.js
file. I have tried adding server.js
file into the deploy.zip file, but then it throws a different error.
I get it, it needs server.js
to run, but when I download the build for the same application which is pushed to ELB using Travis CI. It doesn't throw such error and CI/CD is working just fine.
Here is the error logged by ELB (when server.js
is not added to deploy.zip):
throw err;
^
Error: Cannot find module '/var/app/current/server.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] aws: `node server.js && npm run serve`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] aws script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
> [email protected] aws /var/app/current
> node server.js && npm run serve
I'm also attaching my package.json
and main.yml
(for CI) files.
package.json:
"name": "climber-mentee-fe",
"version": "1.0.1",
"scripts": {
"ng": "ng",
"start": "node server.js",
"serve": "ng serve --configuration=dev",
"start:staging": "gulp set --env=staging && concurrently --kill-others \"node server.js\" \"npm run serve\"",
"start:prod": "gulp set --env=prod && concurrently --kill-others \"node server.js\" \"npm run serve\"",
"build": "ng build --configuration=production",
"test": "ng test",
"aws": "node server.js && npm run serve",
"lint": "ng lint",
"e2e": "ng e2e"
},
...
...
}
main.yml:
name: My application CI
on:
push:
branches:
- dry-run-actions
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x]
steps:
- uses: actions/checkout@v1
- name: Node ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Installing NPM
run: npm install
- name: Building application and copying package.json to dist
run: npm run build && cp package.json dist/
- name: Generate deployment package
run: cd dist && zip -r ../deploy.zip ./*
- name: Beanstalk Deploy for App
uses: einaregilsson/beanstalk-deploy@v3
with:
aws_access_key: ${{secrets.AWS_ACCESS_KEY}}
aws_secret_key: ${{secrets.AWS_SECRET_KEY}}
application_name: my-app
environment_name: my-app-env
region: ap-south-1
version_label: 455
deployment_package: deploy.zip
Solution 1:[1]
I figured it out finally.
We need to zip the complete root folder excluding the node_modules
folder. So, in that case, I won't need any server.js
and package.json
included inside the dist
folder.
Updated yml snippet
- name: Building application
run: npm run build
- name: Generate deployment package
run: zip -r deploy.zip * -x ./node_modules
Solution 2:[2]
I solved this problem by adding an .ebextensions
directory containing a single file named python.config
. The contents of that file are:
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: server:app
This file tells Elastic Beanstalk that the FastAPI application is located in the server.py
file and is named app
.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Yashwardhan Pauranik |
Solution 2 | Stephen |