【发布时间】:2021-04-28 01:18:35
【问题描述】:
我正在尝试将我的 NestJS 应用程序部署到 AWS 弹性 beanstalk,但没有任何成功,有人可以一步一步地写下我该如何实现吗?
完整解释:
我有一个带有 typeorm 的 nestjs 应用程序,但没有将其配置为与 RDS 一起使用,所以我们暂时保留它(也许有一个连接,idk)。
首先,我创建了一个 CodePipline,当我将新版本推送到我的 github 存储库时,它会自动将整个存储库部署到我在节点 12.x 上运行的 eb 实例。
现在,我希望在每次 git push 时,实例都会安装依赖项,构建嵌套应用程序,并从 /dist/main.js 启动服务器。
我添加了一个 Procfile:
web: npm install && npm run build && npm run start:prod
我还在 EB 上添加了 PORT 环境变量,该变量在 main.ts 上配置,当找不到使用 8080 时。
而我的 package.json 脚本就像一个新创建的 Nest 应用程序:
"scripts": {
"prebuild": "rimraf dist",
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
}
在部署时,我在日志中看到它做了这样的事情:
Jan 23 20:01:14 web: > app@0.0.1 start /var/app/current
Jan 23 20:01:14 ip-172-31-17-171 web: > sudo npm i -g @nestjs/cli && node dist/main
Jan 23 20:01:14 web: We trust you have received the usual lecture from the local System
Jan 23 20:01:14 web: Administrator. It usually boils down to these three things:
Jan 23 20:01:14 web: #1) Respect the privacy of others.
Jan 23 20:01:14 web: #2) Think before you type.
Jan 23 20:01:14 web: #3) With great power comes great responsibility.
Jan 23 20:01:14 web: sudo: no tty present and no askpass program specified
Jan 23 20:01:14 web: npm ERR! code ELIFECYCLE
Jan 23 20:01:14 web: npm ERR! errno 1
Jan 23 20:01:14 web: npm ERR! app@0.0.1 start: `sudo npm i -g @nestjs/cli && node dist/main`
Jan 23 20:01:14 web: npm ERR! Exit status 1
Jan 23 20:01:14 web: npm ERR!
Jan 23 20:01:14 web: npm ERR! Failed at the app@0.0.1 start script.
所以我在输入 env url 时得到 502。
所以可能是 npm 的权限问题?或者我需要以某种方式仅部署 /dist 文件夹? 您认为问题出在哪里?
这是我第一次尝试将后端服务器部署到 eb :)
【问题讨论】:
-
你试过什么?什么不起作用?没有足够的信息知道该建议什么。
-
我创建了一个 CodePipeline,可以自动从我的 Github 存储库部署应用程序,然后我在我的根文件夹中添加了一个 Procfile,其中包含:“web: npm install && npm run build && npm run start:prod” , 要安装依赖项,构建 nest 应用程序并从新文件夹 /dist 启动它。通过这些步骤,我得到了 EB 日志: 1. sudo npm i -g @nestjs/cli && node dist/main 2. NPM 错误!此行存在状态 1:开始:
sudo npm i -g @nestjs/cli && node dist/main请帮助 -
用更多信息更新问题。不要把它放在你被限制在一定数量的字符和换行符不是一件事的评论中。
-
更新问题,谢谢!
-
我不知道如何根据可用信息修复它,但您的问题是 sudo 失败(它试图提示输入密码并从键盘读取值 - 但没有标准输入/附加到脚本的标准输出因此失败)。避免使用 sudo,或者使 sudo 无密码。免责声明:如果您以 sudo 用户身份运行的节点存在安全风险。
标签: amazon-web-services amazon-elastic-beanstalk nestjs