【问题标题】:Elastic Beanstalk cannot find the server.js fileElastic Beanstalk 找不到 server.js 文件
【发布时间】:2020-01-06 07:02:17
【问题描述】:

我正在尝试通过 GitHub Actions 将我的 Angular 应用程序部署到 Elastic 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"
  },
  ...
  ...
 }

ma​​in.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 我在哪里可以找到/var/app/current?我对 AWS 很陌生
  • @matesio 我已经添加了截图
  • 好的,看来您正在尝试提供 SPA,我建议您使用 s3 和 CloudFront 来为您的应用程序提供服务。如果您想在弹性 beantalk 上执行此操作,请不要创建缩小版本,只需将您的应用程序放在那里。如果你想创建一个缩小的构建,你需要将 nginx.conf 更改为服务器静态站点,而不是作为“npm start”托管。
  • 这就是你在进行缩小构建时不需要 server.js 的东西。

标签: amazon-elastic-beanstalk github-actions


【解决方案1】:

我终于明白了。

我们需要压缩整个根文件夹,不包括node_modules 文件夹。因此,在这种情况下,我不需要在 dist 文件夹中包含任何 server.jspackage.json

更新了 yml sn-p

- name: Building application
  run: npm run build

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

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 2020-09-28
    • 2016-05-25
    • 2018-04-26
    • 2020-01-17
    • 2013-08-24
    • 2015-01-31
    • 2020-03-14
    相关资源
    最近更新 更多