您现在的位置是: 首页 > 运维 自建Ngrok服务端

自建Ngrok服务端

2020-05-26 运维 1640人已围观 3313次浏览

简介自建Ngrok服务端

日常开发中,经常会涉及到一些需要通过公网来调试的服务,比如微信公众号、微信登录等,限于线上服务调试不方便的原因,就需要用内网穿透的服务,来直接访问本地的应用程序,类似花生壳(收费太贵)之类的服务,这里介绍的是自建 ngrok 服务端(官方也提供了服务,但由于是在国外,一来一回的速度不佳)

环境准备

  1. VPS、云服务器等(需要有公网IP),本文以 CentOS 7 64位系统为例进行安装
  2. 域名(如果公网IP在国内的,还需要进行备案,公网IP在香港或国外的,则不需要备案)

安装步骤

首先需要给域名添加两条A记录,解析到服务器IP上,比如

ngrok.xxxx.com 100.101.102.103
*.ngrok.xxxx.com 100.101.102.103

开放服务器 80、443、4443 端口(这是默认的端口,如果自定义的话则根据自己的端口进行开放)

在服务器上安装常用的依赖包(因为是 CentOS 系统,所以是 yum 命令,其他系统需自行调整命令)

yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++

其次是安装 go 环境,可以参考这篇文章进行安装 CentOS 7 安装 Golang 环境

ngrok 安装包可以去GitHub上下载(目前官方的已经升级到了2.x,已经不开源了。目前最新的开源版本是 1.7.1),比如 https://github.com/inconshreveable/ngrok/releases/tag/1.7.1,或者是在服务器上安装 Git,然后直接拉取代码(由于服务器上访问GitHub很慢,所以本文是先下载源码包然后上传到服务器上的,获取ngrok的方式不限)

首先是解压文件到 /usr/local 下

tar -zxvf ngrok-1.7.1.tar.gz

然后进入目录,在目录下给域名生成证书

cd /usr/local/ngrok

为域名生成证书(其中 ngrok.xxxx.com 根据自己的域名进行修改)

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.xxxx.com" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=ngrok.xxxx.com" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

之后在软件源代码目录下面会生成一些证书文件,我们需要把这些文件拷贝到指定位置(出现提示需要覆盖,Y 确认即可)

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

进行到这里,正常来说是可以直接编译了。但是由于 Google 无法访问,导致编译过程中,需要从 code.google.com 上下载的 log4go 依赖包超时而编译失败,会提示

make: *** [deps] 错误 1
package log

所以,我们需要修改依赖包的下载地址改为 GitHub(虽然也很慢,但好在不会出错)

vim /usr/local/ngrok/src/ngrok/log/logger.go

将里面的第四行修改为

log "github.com/keepeye/log4go"

然后保存退出,就可以正常进行编译了

编译服务端

由于已经是服务器环境了,所以可以直接进行编译

需要注意的是,你的当前目录一定是在  /usr/local/ngrok  下面

执行编译

make release-server

这一步需要等待一段时间,因为有部分依赖包都是从国外下载回来的,速度可能会比较慢,耐心等待即可

编译客户端

根据自己客户端系统进行编译即可(同样都是在 /usr/local/ngrok 下面执行)

# Mac
GOOS=darwin GOARCH=amd64 make release-client
# Linux 64
GOOS=linux GOARCH=amd64 make release-client
# Windows 64
GOOS=windows GOARCH=amd64 make release-client

编译完成后,可以在 /usr/local/ngrok/bin 下找到对应的服务端和客户端程序

启动服务端

后台启动

nohup /usr/local/ngrok/bin/ngrokd -domain="ngrok.chabug.com" -httpAddr=":81" > /dev/null 2>&1 &

启动客户端

需要新建一个配置文件(yml 语法格式),这里以 Mac 系统为例,其他系统文件内容都类似

# 新建空的文件
touch ngrok.conf

文件内容是

server_addr: "ngrok.xxxx.com:4443"
trust_host_root_certs: false

最后以配置文件启动客户端(ngrok 文件,就是上面编译出来的客户端程序,下载到本地即可)

./ngrok -config=./ngrok.conf -subdomain=test 8080 > /dev/null 2>&1

客户端程序应该也需要后台运行的,但是在测试的过程中发现 nohup 后台启动无法正常运行,访问的时候会提示找不到,具体原因未知。后续如果研究出来了再更新,这里先前台启动

启动完成之后,还会默认监听自己本地的 4040 端口,提供一个 web 端的查看页面,里面会展示出来最近的访问日志,可以很方便的查看 API 接口或程序的访问信息,方便开发者调试

 

 

很赞哦! (0)

站长推荐

站点信息

  • 网站地图