前文
最近在学习开发微信公众号,由于微信官方要求需要可访问的域名才能测试,使用他人的ngrok又时常掉线等各种原因,故搭建了个ngrok服务器作为个人测试用
1、此文用于个人笔记
2、不保证正确性(有些东西我自己还没摸索清楚)
3、欢迎指正
正文
1、域名问题:
自己去买个域名,并将一级域名解析到自己的服务器的ip下(域名解析各大云服务商都有提供)(xxx.cn)
ngrok作为测试使用,自然不可能使用一级域名,然后由于项目,或者未来需要使用,我们可以添加二级域名作为ngrok专用域名
(ngrok.xxx.cn),在未来使用时我们可能需要使用不同的前缀去区分项目,那么我们可以使用多项的三级域名(*.ngrok.xxx.cn)
2、搭建ngrok——安装git
# 安装git所需要的依赖包
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++
# 下载新版本git (版本列表 https://www.kernel.org/pub/software/scm/git/)
cd /usr/local
wget https://www.kernel.org/pub/software/scm/git/git-2.16.2.tar.gz
# 解压
tar zxvf git-2.16.2.tar.gz
# 编译git
cd git-2.16.2
./configure --prefix=/usr/local/git
make
make install
#删除刚才下载的git包
cd /usr/local
rm -r git-2.16.2.tar.gz
3、搭建ngrok——安装go环境
# 下载go
cd /usr/local
www.golangtc.com/static/go (这里是列表,注意自己的系统是多少位的,linux-amd64是64位的。linux-386是32位的)
wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
如果很慢,可以下载到本地,在上传到服务器
# 解压
tar -zxvf go1.9.2.linux-amd64.tar.gz /usr/local/
# go的命令需要做软连接到/usr/bin
ln -s /usr/local/go/bin/* /usr/bin/
#删除下载的go包
rm -r go1.9.2.linux-amd64.tar.gz
#安装go语言的安装环境
yum install mercurial bzr subversion
#新建go目录作为项目目录
mkdir -p $HOME/go
#用cat的方法在尾部增加配置配置golang的 GOROOT GOPATH
#(注意,这里GOROOT 后面的路径是你go解压的路径,如果不是按照我的方法解压的,请注意看一下)
下面这段,整段复制粘贴过去
cat >>$HOME/.bash_profile<<EOF
export GOROOT=/usr/local/go
export GOPATH=\$HOME/go
export PATH=\$PATH:\$GOROOT/bin
EOF
#让配置生效
source $HOME/.bash_profile
3.检查下go的env环境变量
go env
4、搭建ngrok——从git上下载ngrok、配置环境变量
cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="ngrok.xxx.com" #这里写你自己的域名,不要前缀,比如www
5、搭建ngrok——生成证书
cd /usr/local/ngrok
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
#拷贝证书覆盖ngrok原来的证书
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、搭建ngrok——生成可执行的服务端ngrokd、客户端ngrok
# 以下操作需在ngrok目录下执行
# 生成服务端
make release-server
# 生成客户端(windows 64位,其他系统编译请自行百度)
GOOS=windows GOARCH=amd64 make release-client
7、搭建ngrok——启动服务端
cd /usr/local/ngrok/bin
./ngrokd -domain="ngrok.xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"
#-domain后面你上面写的域名 -httpAddr http端口 -httpsAddr https 端口
#-tunnerlAddr 客户端端口,连接端口
#-如需后台运行
setsid ./ngrokd -domain="ngrok.xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"
8、启动客户端——命令启动
首先在客户端同级目录下创建ngrok.config文件,内容如下
server_addr: "ngrok.xxx.cn:4443"
trust_host_root_certs: false
启动
#目录下打开命令行
ngrok -config=./ngrok.config -subdomain=bg 8080
#这里subdomain后面的是二级域名前缀,你可以改,
#注意要在域名解析里添加二级域名解析
9、启动失败的原因
9.1、检查4443端口是否开启,如果没有开启的请开启4443端口,或者更换其他没有被占用的端口,重新启动服务端
9.2、检查域名是否正确解析到服务器ip下
9.3、centos7系统开启端口的方式和以前版本不同使用的是firewalld命令,具体操作自行百度
9.4、检查腾讯云安全组是否将ngrok端口过滤(默认不会,25端口默认禁用)
10、成功运行图