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

8dtrkrch  于 5个月前  发布在  Node.js
关注(0)|答案(1)|浏览(60)

我用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已经在使用中,并自行重新加载三次。
当集群从集群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的群集切换无法正常工作?

是否有可能解决此问题?

ibrsph3r

ibrsph3r1#

很久以前就解决了..开始的剧本是错误的。
而不是

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

字符串

script: 'app.js',


工作正常。

相关问题