真是让人头皮发麻
一、准备工作
首先得有个域名,和一台外网服务器
建立两个A记录,把域名解析到服务器上,用来关联ngrok服务。
比如我的域名是:ailitonia.com,那么建立 ngrok.ailitonia.com 和 *.ngrok.ailitonia.com 解析到vps服务器上。
二、搭建ngrok服务
1.安装go语言环境
ngrok是基于go语言开发的,所以需要先安装go语言开发环境,CentOS可以使用yum安装:
yum install golang
安装完成之后,执行 go version 看到如下信息,证明安装成功:
$ go version
$ go1.7.3 linux/amd64
安装好后,需设置go环境变量,在 ~/.bash_profile 或 ~/.zshrc 文件添加如下代码:
export GOPATH=$HOME/go
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$GOPATH/bin
保存后,重新加载配置文件:
source ~/.bash_profile
执行完成后,echo $GOPATH 可查看go路径,或通过 go env 查看是否配置生效。
2.安装git
直接yum install了事:
yum -y install git
系统CentOS 7 x64,默认安装版本为1.8.3.1,后续操作无问题,直接跳过网上其他教程的编译安装环节。
3.下载ngrok源码
新建一个目录,并clone一份源码
mkdir ~/go
cd ~/go
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=~/go/ngrok
4.生成自签名证书
使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自己建立ngrok服务,需要我们生成自己的证书,并提供携带该证书的ngrok客户端。
证书生成过程需要有自己的一个基础域名,官网随机生成的地址,如:693c358d.ngrok.com,基础域名就是ngrok.com。而在上文中提到的二级域名 ngrok.ailitonia.com 就是用来作为这次要提供的基础域名。如果你的域名是 abc.com,那么域名基础域名可以设置为 ngrok.abc.com。
以我的基础域名为例(注意替换成自己的域名),生成证书过程如下:
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.ailitonia.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.ailitonia.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
执行完成以上命令后,在ngrok目录下,会新生成6个文件
device.crt
device.csr
device.key
rootCA.key
rootCA.pem
rootCA.srl
我们在编译可执行文件之前,需要把生成的证书分别替换到 assets/client/tls和assets/server/tls中,这两个目录分别存放着ngrok和ngrokd的默认证书。
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
5.编译ngrok
首先需要知道,ngrokd 为服务端的执行文件,ngrok为客户端的执行文件。
接下来我们来编译ngrokd(服务端),在ngrok目录下,执行如下命令:
make release-server
编译过程需要等待一会,因为需要通过git安装相关依赖包。
然后编译客户端。
由于客户端的平台版本较多,我们需要交叉编译来选择生成的平台。
以windows、arm、linux版本编译,如下:
GOOS=linux GOARCH=amd64 make release-client
GOOS=windows GOARCH=amd64 make release-client
不同平台使用不同的 GOOS 和 GOARCH,GOOS为go编译出来的操作系统 (windows,linux,darwin),GOARCH, 对应的构架 (386,amd64,arm)
Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
ARM 平台:GOOS=linux GOARCH=arm
通过上面的步骤,将生成所有客户端文件,客户端文件放在对于的文件夹中,如windows 64位的为:windows_amd64,linux客户端在bin目录下的ngrok文件。当然,也可以简单的使用$ make release-client进行编译成默认的ngrok客户端文件。
6.启动ngrok服务器
将 bin/ngrokd 放入环境变量中,启动命令:
ngrokd -domain="ngrok.ailitonia.com" -httpAddr=":8088" -httpsAddr=":8089"
其中,-domain为你的ngrok服务域名,-httpAddr为http服务端口地址,访问形式为:xxx.ngrok.ailitonia.com:8088,也可设置为80默认端口,-httpsAddr为https服务,同上。
ngrokd启动后,退出命令行即关闭服务。如果想要在后台运行,则执行:
nohup ngrokd -domain="ngrok.ailitonia.com" -httpAddr=":8000" &
注意末尾需要有 & 号,详细搜索 nohup 了解。
关闭服务只需通过:
ps -A #找到PID,执行关闭
kill xxxid
三、启动客户端
由于在准备工作中,已经把 ngrok.ailitonia.com 的域名解析到服务器上,接下启动客户端测试是否可用。
1.建立配置文件
新建配置文件ngrok_config.cfg:
server_addr: “ngrok.ailitonia.com:4443"
trust_host_root_certs: false
server_addr端口默认4443,可通过ngrokd服务端启动修改端口
2.运行客户端
运行客户端,暴露本地80端口站点:
ngrok -config=./ngrok_config.cfg -subdomain testpage 80
3.访问页面
浏览器中输入:testpage.ngrok.ailitonia.com,就能访问本地80端口的站点内容。
浏览器输入:127.0.0.1:4040 查看页面请求情况。
至此,搭建成功。
参考:morongs,aotu.io,bbear.me,xicheng412
本文被阅读了:3,038次