弹性Beanstalk找不到server.js文件。

4

我试图通过GitHub Actions将我的Angular应用程序部署到弹性Beanstalk。我正在使用GitHub actions来部署到ELB。

我的问题是,部署失败了,因为ELB找不到server.js文件。我已经尝试将server.js文件添加到deploy.zip文件中,但然后它会抛出不同的错误。

我明白它需要server.js来运行,但当我下载使用Travis CI推送到ELB的同一应用程序的构建时,它不会抛出这样的错误,CI/CD可以正常工作。

这是ELB记录的错误(未将server.js添加到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! climber-mentee-fe@1.0.1 aws: `node server.js && npm run serve`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the climber-mentee-fe@1.0.1 aws script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

> climber-mentee-fe@1.0.1 aws /var/app/current
> node server.js && npm run serve

我也附上了我的package.jsonmain.yml(用于CI)文件。

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

var/app/current屏幕截图 在此输入图片描述


请添加/var/app/current文件夹中的文件截图。 - matesio
@mastesio,我在哪里可以找到/var/app/current?我对AWS还很陌生。 - Yashwardhan Pauranik
@matesio 我已经添加了截图。 - Yashwardhan Pauranik
@matesio 我刚刚找到了解决方案并在下面发布了答案。 - Yashwardhan Pauranik
1
当您使用压缩构建时,前进时不需要 server.js。 - matesio
显示剩余2条评论
2个回答

1
我终于想通了。 我们需要压缩完整的根目录,但不包括node_modules文件夹。在这种情况下,dist文件夹中不需要包含任何server.jspackage.json文件。 更新的yml片段。
- name: Building application
  run: npm run build

- name: Generate deployment package
  run: zip -r deploy.zip * -x ./node_modules

0

我通过添加一个名为.ebextensions的目录并包含一个名为python.config的单个文件来解决了这个问题。该文件的内容如下:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: server:app

这个文件告诉 Elastic Beanstalk FastAPI 应用程序位于 server.py 文件中,并且命名为 app


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接