如何在 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 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 ngrok 使用 ws(websocket)

Nodejs 无法在 ws:// apache 代理服务器上建立连接

如何在共享主机上部署 laravel websockets?

我如何在扭曲的高速公路上使用不同的网址?

带有 stomp js 的 Spring Boot Websocket:我不断收到哎呀!与 http://localhost:8080/ws 的连接丢失

缺少 Websocket 标头