Heroku Node.js 和 uWebsockets.js R10 错误,无法绑定端口
Heroku Node.js and uWebsockets.js R10 Error, failed to bind port
我创建了一个最小的应用程序,用于测试使用 dockerfile 在 heroku 上部署 node.js uWebsockets.js 服务器。
Heroku 日志显示它因 R10(启动超时)错误而失败,无法绑定到 $PORT,尽管它之前的日志显示它正在该端口上侦听。
server.js
const uWS = require('uWebSockets.js');
const port = process.env.PORT || 9001;
const host = '0.0.0.0'
const app = uWS.App()
.ws('/*', {
maxPayloadLength: 16 * 1024 * 1024,
idleTimeout: 160,
})
.listen(port, host, (token) => {
if (token) {
console.log('Listening to port ' + port);
} else {
console.log('Failed to listen to port ' + port);
}
});
Dockerfile
# syntax=docker/dockerfile:1
FROM node:17.0.1
ENV NODE_ENV=production
WORKDIR /app
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install --production
COPY . .
EXPOSE $PORT
CMD [ "npm", "start" ]
Heroku 日志
2021-12-02T15:34:50.509492+00:00 app[web.1]: > dummyserver@1.0.0 start
2021-12-02T15:34:50.509492+00:00 app[web.1]: > node server.js
2021-12-02T15:34:50.509492+00:00 app[web.1]:
2021-12-02T15:34:50.586940+00:00 app[web.1]: Listening to port 39686
2021-12-02T15:35:49.393274+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2021-12-02T15:35:49.424793+00:00 heroku[web.1]: Stopping process with SIGKILL
2021-12-02T15:35:49.596430+00:00 heroku[web.1]: Process exited with status 0
我尝试过的事情:
- 用过process.env.PORT
- 使用的主机为 0.0.0.0
- 直接推送到 heroku 而不是 dockerfile
我做了很多更改,但我认为这是一个 docker 问题,将我的 docker 文件更改为下面的代码片段使它起作用。
# syntax=docker/dockerfile:1
FROM node:17.0.1
WORKDIR /app
COPY "package.json" .
RUN npm install
COPY . .
EXPOSE $PORT
CMD [ "npm", "start" ]
同时确保在前端使用 wss://app-name.herokuapp.com 而不是 ws:// 进行连接。
我创建了一个最小的应用程序,用于测试使用 dockerfile 在 heroku 上部署 node.js uWebsockets.js 服务器。 Heroku 日志显示它因 R10(启动超时)错误而失败,无法绑定到 $PORT,尽管它之前的日志显示它正在该端口上侦听。
server.js
const uWS = require('uWebSockets.js');
const port = process.env.PORT || 9001;
const host = '0.0.0.0'
const app = uWS.App()
.ws('/*', {
maxPayloadLength: 16 * 1024 * 1024,
idleTimeout: 160,
})
.listen(port, host, (token) => {
if (token) {
console.log('Listening to port ' + port);
} else {
console.log('Failed to listen to port ' + port);
}
});
Dockerfile
# syntax=docker/dockerfile:1
FROM node:17.0.1
ENV NODE_ENV=production
WORKDIR /app
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install --production
COPY . .
EXPOSE $PORT
CMD [ "npm", "start" ]
Heroku 日志
2021-12-02T15:34:50.509492+00:00 app[web.1]: > dummyserver@1.0.0 start
2021-12-02T15:34:50.509492+00:00 app[web.1]: > node server.js
2021-12-02T15:34:50.509492+00:00 app[web.1]:
2021-12-02T15:34:50.586940+00:00 app[web.1]: Listening to port 39686
2021-12-02T15:35:49.393274+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2021-12-02T15:35:49.424793+00:00 heroku[web.1]: Stopping process with SIGKILL
2021-12-02T15:35:49.596430+00:00 heroku[web.1]: Process exited with status 0
我尝试过的事情:
- 用过process.env.PORT
- 使用的主机为 0.0.0.0
- 直接推送到 heroku 而不是 dockerfile
我做了很多更改,但我认为这是一个 docker 问题,将我的 docker 文件更改为下面的代码片段使它起作用。
# syntax=docker/dockerfile:1
FROM node:17.0.1
WORKDIR /app
COPY "package.json" .
RUN npm install
COPY . .
EXPOSE $PORT
CMD [ "npm", "start" ]
同时确保在前端使用 wss://app-name.herokuapp.com 而不是 ws:// 进行连接。