最近国内国外的ngrok的服务都不能用了,国外的是被墙了,国内的服务器停止续费了。但是微信开发不能缺少ngrok啊,所以决定自己搭建一个ngrok服务。
服务环境:阿里云CentOS 6.5 X64
1、首先要安装go环境,参照我前面的文章安装go环境
2、安装git
mkdir ngrok
cd ngrok
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/root/ngrok
3、生成证书
export NGROK_DOMAIN="imququ.com"
#域名为你自己服务器的域名,需要做泛解析
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
cp base.pem assets/client/tls/ngrokroot.crt
4、编译服务端
export GOOS=linux
export GOARCH=amd64
#如果是32位,则命令为export GOARCH=386
make release-server
在编译过程中出现如下几个问题
1)一个update一直在download中,只好自己下载,然后上传到服务器,根据提示上传到ngrok/src下面对应的文件夹中
2)log4go
/root/ngrok/log/logger.go
第五行import中的 log 包,改为:
log "github.com/keepeye/log4go"
3)yaml.v1
注意前面是L的小写,后面阿拉伯数字1,根据提示从网上下载对应的包,然后上传到服务器ngrok/src下面对应的文件夹,命名也要根据提示命名
重新编译
make release-server
编译成功的话会在bin文件夹下面生成一个ngrokd文件
5、编译客户端
export GOOS=windows
#如果是mac系统则:export GOOS=darwin
编译成功后在bin下面会多一个windows_amd64的文件夹,里面有一个ngrok.exe文件,下载下来。
6、启动服务端,在ngrok目录下面打命令
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":8082"
#-httpAddr=":80"为监听网络端口,因为微信目前只支持80端口,所以我的服务器只能用80端口
7、启动客户端
1)把编译好的客户端下载下来,在客户端同级文件夹中,新建一个ngrok.cfg文件
内容如下
server_addr: "imququ.com:4443"
trust_host_root_certs: false
#4443为ngrok服务端监听客户端链接端口
2)进入dos界面,进入到ngrok.exe文件所在位置,输入命令
ngrok -config ngrok.cfg -subdomain hch8080
#hch为域名访问前缀
#8080为本地服务端口
这样就大功告成,外网就可以通过访问hch.imququ.com来访问本机的服务了
参考链接
http://tonybai.com/2015/03/14/selfhost-ngrok-service/
https://imququ.com/post/self-hosted-ngrokd.html
http://www.ekan001.com/articles/38
http://www.jinglingshu.org/?p=10444