废话休提,直接code!
很简单不要怕!image.png

1.安装go

下载
wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
解压
tar -zxvf go1.8.linux-amd64.tar.gz
把go塞到全局变量
sudo vim /etc/profile

  1. #末尾添加:
  2. export GOROOT=/usr/local/go #这个目录就是解压出来的go目录,根据自己的实际情况配置
  3. export GOPATH=$GOROOT/bin
  4. export PATH=$PATH:$GOPATH

sorce一下
source /etc/profile
看看好了没有
go version

2.安装ngrok

github上面开源去下载源码

在ngrok文件夹内,生成证书

  1. openssl genrsa -out rootCA.key 2048
  2. openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=xxxx.com" -days 5000 -out rootCA.pem #xxxx.com是公网主机域名
  3. openssl genrsa -out device.key 2048
  4. openssl req -new -key device.key -subj "/CN=xxxx.com" -out device.csr #xxxx.com是公网主机域名
  5. openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

替换证书,这样就不用在启动的时候 在命令上面加参数了

  1. cp rootCA.pem assets/client/tls/ngrokroot.crt
  2. cp device.crt assets/server/tls/snakeoil.crt
  3. cp device.key assets/server/tls/snakeoil.key

否则你可能需要这样启动
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=$NGROK_DOMAIN -httpAddr=":8081" -httpsAddr=":8082"
但是你复制到默认 配置 path的话,就可以在命令中不写了,所以启动的时候不用写 tlskey 和tlscrt

3.编译ngrok

服务端
make release-server

linux客户端
make release-client

mac客户端
GOOS=darwin GOARCH=amd64 make release-client

win客户端
GOOS=darwin GOARCH=amd64 ./make.bash

以上命令都是在ngrok根目录运行!

4.启动服务端ngrokd

./bin/ngrokd -domain="ngrok.masteryu.site" -httpAddr=":8088" -httpsAddr=":8089"
上面是域名,端口http和https的,s的一般用不到,用了的话你还得申请证书,配置443啥的这里略
用pm2守护进程
pm2 start ./bin/ngrokd -- -domain="ngrok.masteryu.site" -httpAddr=":8088" -httpsAddr=":8089" --name=ngrok

5.启动客户端ngrok

./ngrok -subdomain pub -proto=http -config=ngrok.cfg 8080

这里要注意,这里运行的ngrok是上面编译的客户端执行文件,不同系统自己选一个。

6. 80端口转发

注意到,用三级啊二级啊域名访问,后面还得加端口,不优雅,配置nginx,

  1. server {
  2. listen 80;
  3. server_name *.ngrok.masteryu.site; # 任意三级域名
  4. location / {
  5. proxy_pass http://localhost:8088/;
  6. proxy_set_header Host $host:8088; # 重要,替换掉端口!
  7. }
  8. }

7. 还差一个问题,本地启动的时候,老是带上端口,我不服!

8. 后台执行(服务端+客户端)

将以下代码保存为ngrokd.service文件,放在/etc/systemd/system/目录

注意替换路径 root/ngrok-server/bin/linux_386/ 为ngrok服务端目录

  1. #/etc/systemd/system/ngrokd.service
  2. [Unit]
  3. Description=ngrok
  4. After=network.target
  5. [Service]
  6. ExecStart=/root/ngrok-server/bin/linux_386/ngrokd -tlsKey="/root/ngrok-server/assets/server/tls/snakeoil.key" -tlsCrt="/root/ngrok-server/assets/server/tls/snakeoil.crt" -domain="ngrok.你的域名.com" -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092"
  7. LimitNOFILE=1048576
  8. LimitNPROC=1048576
  9. Restart=always
  10. RestartSec=10
  11. StartLimitInterval=0
  12. [Install]
  13. WantedBy=multi-user.target
  1. systemctl enable ngrokd.service #开机启动ngrokd服务
  2. systemctl start ngrokd.service #启动ngrokd服务

重要!

  1. 服务商那里配置的安全规则,4443端口一定要开,没有配置nginx 80端口的,你配置的端口也要开。
  2. 域名解析的地方,记得配置任意三级/二级域名。

ngrok.cfg配置文件内容:

  1. server_addr: "xxxx.com:4443" # xxxx.com是公网主机的域名,4443是公网主机默认的端口不要改动
  2. trust_host_root_certs: false

补充1 构建客户端

  1. #Linux 平台 32 位系统:GOOS=linux GOARCH=386
  2. #Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
  3. #Windows 平台 32 位系统:GOOS=windows GOARCH=386
  4. #Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
  5. #MAC 平台 32 位系统:GOOS=darwin GOARCH=386
  6. #MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
  7. #ARM 平台:GOOS=linux GOARCH=arm

参考:
https://blog.csdn.net/weixin_34185364/article/details/93129442
https://blog.csdn.net/truong/article/details/73250683
https://www.jianshu.com/p/cd937631a88b
https://pm2.keymetrics.io/docs/usage/process-management/#start-any-process-type
https://github.com/inconshreveable/ngrok
https://www.jianshu.com/p/b413a2e18e2a
https://blog.csdn.net/qq_43239721/article/details/82772670

https://www.jianshu.com/p/8d060f6cdd5f