搭建ngrok服务器

在开发的时候难免会遇到一些特殊场景,比如需要在测试服务器上进行远程调试。为了方便我们将工程使用Debug模式部署在测试服务器上,然后本地可以进行远程断点调试。但是这样做还是不够方便,比如开发者本地新增或者修改了代码,就没法实时进行远程断点调试了。
目前比较好的方案就是把开发者自己的电脑当做测试服务器,搭建一个属于自己的ngrok服务器,实现内网穿透,外网通过绑定的域名进行访问,开发者就可以直接在本机进行需要域名才能调试的开发任务,比如微信开发。

很早之前在做微信开发的时候,我就已经在自己的Linux服务器上搭建好了ngrok,由于我自己使用的是苹果笔记本,所以ngrok编译的版本也是针对MacOS系统的,以前以为不会用到Windows系统,就没有编译,结果在工作中使用的是Windows系统。
由于习惯了MacOS的开发环境和强大的触控板,在Windows上的我各种不适应。原本几分钟搞定的事搞了大半天。

为了后续开发方便,接下来我通过编译ngrok源码生成Windows版本的可执行程序。

准备工作

  1. Git
  2. GoLang
  3. 一台拥有公网ip的服务器
  4. 一个绑定到公网ip服务器上的域名

Git和Golang的下载和安装很简单,不再阐述。
这里顺便再安利一波GoLang,之前学过go,感觉在携程方面确实很强大。
运行效率可以和C语言媲美,很适合系统编程(目前很火的区块链大多数用go写),开发效率也很快。
还有真正的跨平台,这里从编译ngrok源码就可以看出来,go写的程序可以编译成目前主流平台的可执行程序。

好了,接下来步入正题。

步骤

  1. 下载ngrok源码

    1
    git clone https://github.com/inconshreveable/ngrok.git
  2. 生成证书 (依次执行如下命令)

    1
    2
    3
    4
    5
    6
    7
    export NGROK_DOMAIN="mac.lanshiqin.com"
    cd ngrok
    openssl genrsa -out rootCA.key 2048
    openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
    openssl genrsa -out server.key 2048
    openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
    openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

上面 NGROK_DOMAIN的 值为自己的域名

将生成的客户端和服务端证书拷贝到对应资源目录下(这一步很重要)

1
2
3
cp rootCA.pem assets/client/tls/ngrokroot.crt 
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

  1. 编译ngrok服务端(我的服务器是linux系统,所以这里指定编译成linux平台的可执行程序)

    1
    2
    3
    4
    #32位Linux系统
    GOOS=linux GOARCH=386 make release-server
    #64位Linux系统
    GOOS=linux GOARCH=amd64 make release-server
  2. 编译ngrok客户端
    Mac版本

    1
    GOOS=darwin GOARCH=amd64 make release-client

Windows版本

1
GOOS=windows GOARCH=amd64 make release-client


编译之后,在ngrok源码的bin目录下生成了对应不同平台的ngrok可执行程序

为了启动方便,新建一个ngrok.cfg配置文件

1
2
server_addr: "mac.lanshiqin.com:4443"
trust_host_root_certs: false

为Windows平台新建一个startup.bat文件

1
2
3
@echo on
cd %cd%
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=mac 9000

ngrok服务端启动

1
./ngrokd -domain="lanshiqin.com" -httpAddr=":80" &

启动MacOS上的ngrok客户端(最后的端口号为本地端口号,可以指定为其他任意端口)

1
./ngrok -config=./ngrok.cfg -subdomain=mac 9000

发现成功连接上ngrok服务器,这时外网就可以通过访问域名 http://mac.lanshiqin.com 来访问本机了

发现成功连接上ngrok服务器。
我们本机9000端口运行一个程序,通过 http://mac.lanshiqin.com 域名访问来验证一下ngrok服务是否可用

发现外网可以通过域名访问到本机对应端口上的服务,到此私人ngrok服务搭建完毕。

0%