乐趣区

关于docker:docker一键编译部署启动ngrok

Ngrok 服务端

启动前的配置

批改 .env 文件配置。

  • 应用本人申请的证书时,将证书的 server.crtserver.keyrootCA.pem 文件放在我的项目的 ssl 目录内,并配置门路为/ssl/xxx
  • 如不应用本人的证书,将 .env 里的 NGROK_TLS_CRTNGROK_TLS_KEYNGROK_TLS_CA 去掉即可在编译时生成自签名证书。(若无 https 代理需要,应用自签名证书即可)
  • 如果应用本人申请的证书,旧证书过期后若新申请的证书 CA 与原来的统一,可间接批改此处的证书门路后重启 docker 服务,不须要从新编译客户端。
# ngrok 域名
NGROK_DOMAIN=ngrok.xxx.com

# http 端口
NGROK_HTTP_PORT=16880

# https 端口
NGROK_HTTPS_PORT=16844

# 隧道端口
NGROK_TUNNEL_PORT=4443

# ssl 证书门路(可不设置)NGROK_TLS_CRT=/ssl/server.crt

# ssl 证书密钥门路(可不设置)NGROK_TLS_KEY=/ssl/server.key

# ssl 证书 CA 门路(可不设置)NGROK_TLS_CA=/ssl/rootCA.pem

1.Docker 形式启动

  • 构建 Docker 镜像
docker build -t ngrok-docker .
  • 启动 Docker 容器
# 映射的端口别离是 http 端口 https 端口 隧道端口
docker run -itd --name ngrok-docker -p 16880:16880 -p 16844:16844 -p 4443:4443 -v $PWD/ssl:/ssl --env-file=.env ngrok-docker

2.docker-compose 形式启动

  • 构建镜像
docker-compose build ngrok
  • 启动
docker-compose up -d ngrok

Ngrok 客户端

将编译好的客户端从容器中拷贝进去

# Windows 版
docker cp ngrok-docker:/ngrok/bin/windows_amd64/ngrok.exe .

# Linux 版
docker cp ngrok-docker:/ngrok/bin/ngrok .

注:ngrok-docker为容器名称或容器 id,可用 docker ps -a 查看容器 id 或名称

Windows 版

  • 配置文件示例
# ngrok.cfg
server_addr: "ngrok.xxx.com:4443"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "test"
    proto:
      http: 8001
  tcp:
    remote_port: 23001
    proto:
      tcp: 8001

注:通过测试,若配置本人申请的 ssl 证书,若域名为ngrok.xxx.com,反对以下两种配置可失常拜访 https 链接:

  • 配置 1
    此形式服务端配置的证书域名为 *.ngrok.xxx.com,反对多个 https 链接。如下配置可失常拜访https://test1.ngrok.xxx.com:16844https://test2.ngrok.xxx.com:16844(16844 为我配置的 ngrok 监听的 https 端口)。
# ngrok.cfg
server_addr: "test.ngrok.xxx.com:4443"
trust_host_root_certs: true
tunnels:
  https:
    subdomain: "test1"
    proto:
      https: 8001
  https2:
    subdomain: "test2"
    proto:
      https: 8002
  • 配置 2

此形式服务端配置的证书域名为ngrok.xxx.com,只反对一个 https 链接。如下配置可失常拜访https://ngrok.xxx.com:16844(16844 为我配置的 ngrok 监听的 https 端口)。

# ngrok.cfg
server_addr: "ngrok.xxx.com:4443"
trust_host_root_certs: true
tunnels:
  https:
    hostname: "ngrok.xxx.com:16844"
    proto:
      https: 8001
  • 启动客户端
ngrok.exe -config=ngrok.cfg -log=log.log start-all

Linux 版

  • 配置文件
# ngrok.yml
server_addr: "ngrok.xxx.com:4443"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "test"
    proto:
      http: 8001
  tcp:
    remote_port: 23001
    proto:
      tcp: 8001
  • 启动客户端
./ngrok --config=ngrok.yml start-all -log stdout

其余

  • 测试发现不同证书编译进去的服务端是一样的,不同的是客户端。
  • 同一 CA 的证书编译进去的客户端是能够通用的。
  • 之前的证书过期后只须要替换最新的 .crt.key即可(待测试)
  • 若配置了 https 且没有用 443 端口,拜访时须要加端口号(如https://ngrok.xxx.com:16844),可通过配置 Nginx 去掉端口号拜访。具体参考:https://www.qinyu.cc/archives/128.html

我的项目地址

https://github.com/shanghaobo/ngrok-docker

参考

https://www.jianshu.com/p/80b…
https://blog.csdn.net/qq_4206…
https://www.qinyu.cc/archives…

退出移动版