一、安装gcc和git(用于下载ngrok源码)
yum install gcc -y
yum install git -y
二、安装go语言环境
yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386
三、检查环境安装
git --version //( >= 1.7 )
go version
四、在服务器上搭建Ngrok服务
1)、下载源码
cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
2)、生成证书
cd ngrok
export NGROK_DOMAIN="ngrok.zhqwfj.xyz" //记得域名换成自己的
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 device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
3)、替换证书
//一行一行执行,然后会提示是否覆盖,输入 “y” 回车就可以了
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
4)、生成服务端
GOOS=linux GOARCH=amd64 make release-server
5)、生成客户端
我的是window 64位,所以我生成的window版本,其他版本不知道对不对。
GOOS=windows GOARCH=amd64 make release-client //windows 64位
GOOS=windows GOARCH=amd64 make release-client //windows 32位
GOOS=darwin GOARCH=386 make release-client //Mac OS 32位
GOOS=darwin GOARCH=amd64 make release-client //Mac OS 64位
GOOS=linux GOARCH=amd64 make release-client //Linux 64位
GOOS=linux GOARCH=arm make release-client //ARM 平台
服务端和客户端会在/usr/local/ngrok/bin
文件夹中生成如下文件
6)、启动服务端
cd /usr/local/ngrok
./bin/ngrokd -domain="ngrok.zhqwfj.xyz" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
//或者
./bin/ngrokd -domain="ngrok.zhqwfj.xyz"
ngrok
用来转发http
服务的端口,默认80
端口ngrok
用来转发https
服务的端口,默认443
端口ngrok
用来跟客户端通讯的端口,默认4443
端口7)、启动客户端
把/usr/local/ngrok/bin/windows_amd64
里面的文件下载到本地来,我放在了本地E:\Ngrok
文件夹里面。
然后在同级目录中创建ngrok.cfg
和start.bat
文件。
ngrok.cfg
文件内容
server_addr: "ngrok.zhqwfj.xyz:4443"
trust_host_root_certs: false
start.bat
文件内容
ngrok -config=ngrok.cfg -subdomain zhq 8080
// haiyang就是你想要访问域名的前缀
// 80表示本地需要穿透的端口
创建完成后双击start.bat
文件运行
这就表示已经成功了。
注意:前置条件配置域名解析和安全组策略
域名:按自己实际情况,如果想多用户可以*.ngrok
安全组:允许80 443 4443(安自己实际配置的为准)
8)、测试
五、将Ngrok(服务端)添加到系统服务
每次关闭Xshell
,服务就关掉了,总不能一直开着窗口吧,怎么才能后台运行呢或者安装成服务设置开机启动?
1)、新建ngrok.service文件
cd /usr/lib/systemd/system //进入目录
cat >>ngrok.service //创建文件夹,回车后直接按`ctrl+d`
vim ngrok.service //编辑文件
输入一下信息:
[Unit]
Description=Share local port(s) with ngrok
After=syslog.target network.target
[Service]
PrivateTmp=true
Type=simple
Restart=always
RestartSec=1min
StandardOutput=null
StandardError=null
ExecStart=/usr/local/ngrok/bin/ngrokd -domain=ngrok.intolearn.com -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443 %i
ExecStop=/usr/bin/killall ngrok
[Install]
WantedBy=multi-user.target
[Unit]
部分主要是对这个服务的说明Description
用于描述服务After
用于描述服务类别[Service]
部分是服务的关键,是服务的一些具体运行参数的设置Type=forking
是后台运行的形式;User=users
是设置服务运行的用户;Group=users
是设置服务运行的用户组;PIDFile
为存放PID的文件路径;ExecStart
为服务的具体运行命令;ExecReload
为重启命令;ExecStop
为停止命令;PrivateTmp=True
表示给服务分配独立的临时空间[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
[Install]
部分是服务安装的相关设置,可设置为多用户的
systemctl
是管制服务的主要工具, 它整合了chkconfig
与 service
功能于一体。
systemctl enable ngrok.service #加入开机启动
systemctl daemon-reload #重新载入 systemd,扫描新的或有变动的单元
systemctl is-enabled iptables.service
systemctl is-enabled ngrok.service #查询服务是否开机启动
systemctl enable ngrok.service #开机运行服务
systemctl disable ngrok.service #取消开机运行
systemctl start ngrok.service #启动服务
systemctl stop ngrok.service #停止服务
systemctl restart ngrok.service #重启服务
systemctl reload ngrok.service #重新加载服务配置文件
systemctl status ngrok.service #查询服务运行状态
systemctl --failed #显示启动失败的服务
然后运行:
systemctl daemon-reload
systemctl start ngrok.service