【发布时间】:2016-09-21 12:06:40
【问题描述】:
我一直在尝试将我的 Node 项目部署在一个全新的 DO 液滴上,但我遇到了一些 PM2 问题。
我的步骤如下:
- Node 已安装在 Droplet 映像上(Ubuntu,Node v4.4.4)
- 全球安装 PM2
- 将 Nginx 设置为反向代理 127.0.0.1:3000
- 克隆了我的项目并安装了 npm
我得到的只是 Nginx 抱怨 502 Bad Gateway。
如果我查看 Nginx error.log 我会得到:
connect() 在连接到时失败(111:连接被拒绝) 上游,客户端:client.ip,服务器:my.server,请求: “GET / HTTP/1.1”,上游:“http://127.0.0.1:3000/”,主机: “my.server”
PM2 没什么好说的。 pm2 日志中没有任何内容,状态为 online。
我尝试跳过 PM2,只执行 npm start,效果很好。我还尝试设置一个虚拟的 hello world 应用程序,并将其与 PM2 一起使用 - 它也有效。
所以这就是我目前所处的位置:
- 我的项目 + PM2:不起作用。
- 我的项目没有 PM2:工作正常。
- Hello World 应用 + PM2:有效。
我不确定从这里去哪里.. 我可以跳过 PM2 并使用节点,但我确实想要 PM2 的功能。
有什么想法吗?
【问题讨论】:
-
您确定您的应用实际上是在端口 3000 上启动的吗?
-
嗯.. 这可能不是 Nginx 抱怨的那样。我只是不知道如何检查。 PM2 说一切都很好并且在线并且日志很干净。
-
我的问题实际上变得如此愚蠢,我注意到仅针对确实修改数据库的 POST 请求给出了 502,这是应用程序目录中的一个 sqllite 文件,导致 PM2 重新启动应用程序在写入该文件时发送响应之前,因为它是使用 --watch 标志运行的。在其他情况下,可能是 --kill-timeout 对您的响应时间来说太短了,这也会导致应用重新启动。