在开发过程中,有些应用调试过程不方便,之前用 ngrok 这个东西,用起来实在顺手!最近免费的ngrok服务都不好使了,没办法只好自己来搭建一个了。
1. 导出源代码
mkdir ngrok
apt-get update
apt-get install git
git clone https://github.com/inconshreveable/ngrok.git
2. 安装Golang
apt-get install golang
3. 更改ngrok域名
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="ngrok.yourdomain.com"
PS. subdomain随意就好,推荐 ngrok
或者 tunnel
4. 为域名生成证书
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
5. 拷贝证书到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
6. 编译
make release-server release-client
GOOS=windows GOARCH=amd64 make release-client
PS. 第一句会编译好server,即 ngrokd
,还有一个linux的客户端 ngrok
。不过我们一般开发的时候都需要用到Windows平台的,再运行第二句就可以编译出一个Windows版本的 ngrok.exe
。
同样的,使用ftp工具下载到本地即可。
7. 运行Server
./ngrokd -tlsKey="../assets/server/tls/snakeoil.key" -tlsCrt="../assets/server/tls/snakeoil.crt" -domain="ngrok.yourdomain.com"
自定义端口
./ngrokd -tlsKey="../assets/server/tls/snakeoil.key" -tlsCrt="../assets/server/tls/snakeoil.crt" -domain="ngrok.yourdomain.com" -httpAddr=":8888" -httpsAddr=":444" > /home/logs/ngrok.log &
PS. 在运行命令的最后加上 &
可以让程序在后台默默运行,然后把控制台让出来干其他活。
服务运行起来后直接在浏览器中输入你的ngrok域名测试服务是否正常启动,如果看到 Tunnel xxx.ngrok.yourdomain.com not found
的提示,那就成功了!
8. 运行Client
按照我上面的编译命令,应该生成了一个 windows_amd64
文件夹,该文件夹里面只有一个 ngrok.exe
文件,你还需要在该文件夹中新建一个 ngrok.cfg
配置文件。
配置文件里面加上如下内容:
server_addr: "ngrok.yourdomain.com:4443"
trust_host_root_certs: false
PS. server_addr
的值必须和上面第3步输入的域名一致,否则Server端会出现 remote error: bad certificate
的错误输出,然后Client端将一直处于connecting...
的状态。
接下来命令行输入命令运行Client:
ngrok.exe -subdomain yourdomain -config=ngrok.cfg port
出现绿色的Tunnel Status: online
就OK了!