在 Amazon Linux 2 上将 node.js 应用程序部署到 Elastic Beanstalk 时出错

Posted

技术标签:

【中文标题】在 Amazon Linux 2 上将 node.js 应用程序部署到 Elastic Beanstalk 时出错【英文标题】:Error deploying a node.js app to Elastic Beanstalk on Amazon Linux 2 【发布时间】:2021-01-01 04:23:11 【问题描述】:

我正在尝试在 Elastic Beanstalk 上创建一个节点 js 应用程序。 在 Amazon Linux Image 上,环境被创建并且运行顺利。为了完成它,我遵循了 AWS 文档本身中给出的说明。它适用于单个实例。此外,使用 nginx 并按照信息 here 终止了实例上的 HTTPS 应用的根目录包含:

.ebextensions index.js package.json

按照 AWS 文档中提供的所有这些说明逐步创建环境并成功部署应用程序(对于 Amazon Linux 映像)。

但是,一直尝试将其部署到 Amazon Linux 2。部署失败,环境的健康状态为“DEGRADED”。

eb-engine.log 的 sn-p:

[INFO] 
> grpc@1.24.3 install /var/app/staging/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library

Failed to execute '/opt/elasticbeanstalk/node-install/node-v10.15.1-linux-x64/bin/node /opt/elasticbeanstalk/node-install/node-v10.15.1-linux-x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --library=static_library --module=/var/app/staging/node_modules/grpc/src/node/extension_binary/node-v64-linux-x64-glibc/grpc_node.node --module_name=grpc_node --module_path=/var/app/staging/node_modules/grpc/src/node/extension_binary/node-v64-linux-x64-glibc --napi_version=3 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v64' (1)

web.stdout.log 的片段:

Sep 13 12:55:31 ip-172-31-1-73 web: > nodetryapp@1.0.0 start /var/app/current
Sep 13 12:55:31 ip-172-31-1-73 web: > node index.js
Sep 13 12:55:31 ip-172-31-1-73 web: [DEFAULT]
Sep 13 12:55:32 ip-172-31-1-73 web: events.js:174
Sep 13 12:55:32 ip-172-31-1-73 web: throw er; // Unhandled 'error' event
Sep 13 12:55:32 ip-172-31-1-73 web: ^
Sep 13 12:55:32 ip-172-31-1-73 web: Error: listen EACCES: permission denied 0.0.0.0:80
Sep 13 12:55:32 ip-172-31-1-73 web: at Server.setupListenHandle [as _listen2] (net.js:1260:19)

来自 nginx/error.log 的片段:

 2020/09/13 13:06:31 [alert] 4023#0: *1021 1024 worker_connections are not enough while connecting to upstream, client: 127.0.0.1, server: , request: "GET /hudson HTTP/1.1", upstream: "http://127.0.0.1:80/hudson", host: "*SOME IP ADDRESS*"

为了在 Amazon Linux 2 Elastic beanstalk 上部署应用程序,应用程序的根文件夹包含以下文件/文件夹:

.ebextensions/https-instance.config 和 .ebextensions/https-instance-single.config .platform/nginx/conf.d/extendnginx.conf(为了扩展nginx配置,从而终止实例的https) index.js package.json

实例类型是Single实例,t2.micro。

【问题讨论】:

【参考方案1】:

是的,现在它正在工作!所以遵循@Raul Barreto 在上面的回答中所说的话。 进行了以下更改: “端口”环境变量现在设置为 8080。 在 .platform/nginx/conf.d/extendnginx.conf 文件中添加

upstream nodejs 
    server 127.0.0.1:8080;
 

而不是

upstream nodejs 
    server 127.0.0.1:80;
 

【讨论】:

docs.aws.amazon.com/elasticbeanstalk/latest/dg/…【参考方案2】:

您不能在端口 80 和 443 上运行您的应用程序,因为这些端口是 Beanstalk AMI 内的 Nginx/Apache 服务专有的。不要使用这些端口,而是使用 8080 进行 HTTP 连接,使用 8443 进行 HTTPS 连接。

【讨论】:

以上是关于在 Amazon Linux 2 上将 node.js 应用程序部署到 Elastic Beanstalk 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Amazon Linux 2 平台上使用 Elastic Beanstalk 部署的 Node Js 中实现 gzip 压缩?

如何在 Amazon EMR 上将连接器添加到 presto

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

在 Windows 上将 Node.js 的版本切换到 6.11.5

centos / amazon linux / rhel的authbind等效项

在 node.js 上将 float32array 保存到磁盘的紧凑方法是啥?