如何在 localhost 上运行 nats ws 服务器
Posted
技术标签:
【中文标题】如何在 localhost 上运行 nats ws 服务器【英文标题】:How to run a nats ws server on localhost 【发布时间】:2021-03-23 18:33:48 【问题描述】:我在 localhost 或具有 WS 配置的本地 docker 上有一个 nats 服务器。 Nats 需要用于 websocket 的 tls。我创建了一个证书和密钥。但是,在连接时会引发错误TLS handshake error from 127.0.0.1:61732: remote error: tls: unknown certificate authority
。我该怎么办?
【问题讨论】:
可能你的证书不受信任,所以你的机器拒绝连接。 【参考方案1】:对于测试环境,您需要像这样创建一个 conf 文件:
# ws.conf
websocket
# Specify a host and port to listen for websocket connections
#
# listen: "host:port"
# It can also be configured with individual parameters,
# namely host and port.
#
# host: "hostname"
port: 443
# For test environments, you can disable the need for TLS
# by explicitly setting this option to `true`
#
no_tls: true
我在这里将其称为 ws.conf,但您可以随意命名。请注意,我将 no_tls
明确设置为 true 并且没有通过任何证书。
Docker方式
之后你需要创建一个 Dockerfile,因为 nats 镜像的入口点是 nats 可执行文件,我们可以这样做:
FROM nats:alpine
COPY ws.conf ws.conf
CMD [ "-c", "ws.conf" ]
注意在 CMD 中我传递了一些参数,让我解释一下:
-c
是 nats 服务器的 --config
选项的简写
ws.conf
是我们创建的配置文件
现在您可以构建并运行此映像。或者你也可以创建一个 docker-compose 来为你做这件事,就像这样:
version: "3.8"
services:
nats-ws:
dockerfile: Dockerfile
ports:
- 443:443
- 4222:4222
独立方式
创建 ws.conf 后,使用等于 docker 方式的参数启动 nats。
nats-server -c path/to/ws.conf
就是这样,如果一切正常,您将在 nats 日志/标准输出中看到此消息:
[1] 2021/04/25 18:29:52.854288 [INF] Starting nats-server
[1] 2021/04/25 18:29:52.854402 [INF] Version: 2.2.2
[1] 2021/04/25 18:29:52.854407 [INF] Git: [a5f3aab]
[1] 2021/04/25 18:29:52.854411 [INF] Name: NCXFZRJ6L2PYQM6DND5YRKZA5OMQBQTFGH7ATZULU3US7KBWQDU4RKE3
[1] 2021/04/25 18:29:52.854416 [INF] ID: NCXFZRJ6L2PYQM6DND5YRKZA5OMQBQTFGH7ATZULU3US7KBWQDU4RKE3
[1] 2021/04/25 18:29:52.854421 [INF] Using configuration file: ws.conf
[1] 2021/04/25 18:29:52.858602 [INF] Listening for websocket clients on ws://0.0.0.0:443
[1] 2021/04/25 18:29:52.858643 [WRN] Websocket not configured with TLS. DO NOT USE IN PRODUCTION!
[1] 2021/04/25 18:29:52.859209 [INF] Listening for client connections on 0.0.0.0:4222
[1] 2021/04/25 18:29:52.859696 [INF] Server is ready
参考
nats flags websocker config file【讨论】:
是唯一的方法传入.conf文件吗?我想通过命令行标志更改 websocket 端口 - 我正在运行 docker compose 并从另一个文件中读取环境变量 - 我想将它们保存在该文件中,而不是将它们分成 ws.conf ...跨度> 对任何感兴趣的人来说,我刚刚意识到 NATS .conf 文件可以读取环境变量(前缀为 $)。所以只需将它添加到您的 docker-compose.yaml 并在您的 .conf 文件中使用它。 docs.nats.io/running-a-nats-service/configuration#variables 很有趣,也是一个很好的用例。我会更新答案。以上是关于如何在 localhost 上运行 nats ws 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Nodejs 无法在 ws:// apache 代理服务器上建立连接
如何在共享主机上部署 laravel websockets?
带有 stomp js 的 Spring Boot Websocket:我不断收到哎呀!与 http://localhost:8080/ws 的连接丢失