Bolt-js slack 应用程序 Jenkins PM2 部署 EADDRINUSE 问题

问题描述 投票:0回答:1

我正在使用 Bolt-js、node.js 和 slack api 制作一个 slack 应用程序。

我已经使用 PM2 设置了 Jenkins CI/CD 管道,以将 node.js 部署到 AWS EC2,但我在 pm2 重新加载步骤中遇到了一些问题。

EC2 实例中有两个核心,因此当我在 PM2 集群模式下运行它时,会出现两次运行。

以下是我的

ecosystem.config.js

module.exports = {
  apps: [{
  name: 'project-name',
  cwd: './project-path',
  script: 'npm',
  args: 'start',
  instances: 0,
  exec_mode: 'cluster_mode' 
  }]

当我运行

pm2 start ecosystem.config.js
命令时,它运行良好 - 没有
port already in use
错误。 但是当我用
pm2 reload <appname>
重新加载 pm2 时,显示以下错误:

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1740:16)
    at listenInCluster (node:net:1788:12)
    at Server.listen (node:net:1876:7)
    at project-path/node_modules/@slack/bolt/dist/receivers/HTTPReceiver.js:177:25
    at new Promise (<anonymous>)
    at HTTPReceiver.start (project-path/node_modules/@slack/bolt/dist/receivers/HTTPReceiver.js:143:16)
    at App.start (project-path/node_modules/@slack/bolt/dist/App.js:241:30)
    at project-path/app.js:320:13
    at Object.<anonymous> (project-path/app.js:322:3)
    at Module._compile (node:internal/modules/cjs/loader:1256:14) {
  code: 'EADDRINUSE',
  errno: -98,
  syscall: 'listen',
  address: '::',
  port: 3000

它说我的3000端口已经被使用,并且自己重新加载了3次。

当集群从集群 0 切换到集群 1 时,多次重新加载成功 - 它完成其工作并在多次重新加载后成功部署更新的代码,如下所示:

[nodemon] app crashed - waiting for file changes before starting...

2023-09-13T15:40:12: PM2 log: Stopping app:project-name id:_old_0
2023-09-13T15:40:12: PM2 log: App name:project-name id:_old_0 disconnected
2023-09-13T15:40:12: PM2 log: App [project-name:_old_0] exited with code [0] via signal [SIGINT]
2023-09-13T15:40:12: PM2 log: pid=13051 msg=process killed
2023-09-13T15:40:12: PM2 log: App [project-name:1] starting in -cluster mode-
2023-09-13T15:40:12: PM2 log: App [project-name:1] online

但是,当集群从集群 1 切换到集群 0 时,它只是卡住了应用程序崩溃的消息,如下所示:

[nodemon] app crashed - waiting for file changes before starting...
并且新集群没有启动。

[nodemon] app crashed - waiting for file changes before starting...

2023-09-13T15:32:41: PM2 log: Stopping app:project-name id:_old_1
2023-09-13T15:32:41: PM2 log: App name:project-name id:_old_1 disconnected
2023-09-13T15:32:41: PM2 log: App [project-name :_old_1] exited with code [0] via signal [SIGINT]
2023-09-13T15:32:41: PM2 log: pid=12638 msg=process killed

为什么会出现这种情况?

  • bolt.js 与 AWS EC2 部署不兼容吗?
  • 是什么原因导致集群从集群 1 切换到集群 0 不起作用?

有可能解决这个问题吗?

node.js amazon-ec2 slack pm2 bolts-framework
1个回答
0
投票

很久以前就解决了.. 起始脚本错误。

而不是

  script: 'npm',
  args: 'start',

,

  script: 'app.js',

效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.