网络上现成的ngrok服务,有诸多限制,为了方便微信联调和本地开发调试研究了一下ngrok服务器搭建,踩了一些坑,还好 搭建成功了 下面把过程罗列一下
准备材料:
-
一个一级域名(国外有0.99刀的域名自行摸索 然后我用dnspod进行解析的)
-
一个vps或者拥有公网IP的服务器(我用的AWS免费12月的 原因:穷)
-
一个自己的电脑(这个没啥说的)
vps咱选择Linux系统
如果是ubuntu :apt-get install build-essential golang mercurial git
安装go语言环境 (ngrok基于go语言)
ubuntu通过apt-get安装的是1.6.2的版本 ngrok编译会通不过(不信你用go version
命令查一下子)
下面我们给它升级一下
下载较新版本的压缩包(tmp为缓存目录 重启后文件会消失)
cd /tmp
wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz
现在提取下载的存档并将其安装到系统上的所需位置。我通常将其保存在/usr/local标准建议的目录下
sudo tar -xvf go1.11.linux-amd64.tar.gz
sudo mv go /usr/local
打开.profile
文件并在文件末尾添加如下的全局变量
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
更新环境变量
source ~/.profile
验证
go version
// go version go1.11 linux/amd64
假如成功了 那么恭喜你可以接着走下去了,else你得去度娘找别的解决办法(目的 使用新版本的Go环境)
下载ngrok源码
此处使用非官方地址,修复了部分包无法获取(摘自网络)
mkdir ngrok
cd ngrok
git clone https://github.com/inconshreveable/ngrok.git
生成自签名证书
cd ngrok //确保在ngrok目录下 先ls看下目录结构吧
NGROK_DOMAIN="你的域名"//替换成自己的域名 如 ngrok.mydomain.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
重点来了 !!这里有个大坑
先解析一个二级域名如:ngrok.mydomain.com到你的vps服务器上(A记录)
如 ngrok这个二级域名解析到你的vps地址 还需要解析一个*.ngrok的泛解析(还是A记录)
因为没有泛解析 捣鼓了好久!
替换(官方的)证书
cp base.pem assets/client/tls/ngrokroot.crt
编译服务端
make release-server
生成windows客户端程序
GOOS=windows GOARCH=amd64 make release-client
客户端生成好了可以用sftp传到本地(生成的exe在bin目录下) 这里推荐一个ssh客户端 Bitvise SSH Client
启动服务端程序(在ngrok目录下)
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="我的域名" -httpAddr=":80" -httpsAddr=":443"
httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。由于微信限制不能出现端口号,因此这个使用了80、443端口。
这里注意一下 假如你要更换域名 需要重复以上步骤(从生成签名开始)!
把exe拿到需要部署端口转发的电脑上。在同级目录下创建配置文件ngrok.cfg,写下面内容
server_addr: "你的域名:4443" (如以上的ngrok.mydomain.com)
trust_host_root_certs: false
一定要有域名,用ip是不行的
同级目录下新建一个启动脚本startup.bat
@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080
其中,-config指向配置文件,-log存放日志文件位置,-subdomain为自定义的域名前缀(随意指定 不指定则会随机生成)。8080为端口号。
启动,点击启动脚本startup.bat完成启动。
如果现实绿色online则恭喜你 否则 再倒腾倒腾吧