废话休提,直接code!
很简单不要怕!
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
#末尾添加:
export GOROOT=/usr/local/go #这个目录就是解压出来的go目录,根据自己的实际情况配置
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
sorce一下source /etc/profile
看看好了没有go version
2.安装ngrok
github上面开源去下载源码
在ngrok文件夹内,生成证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=xxxx.com" -days 5000 -out rootCA.pem #xxxx.com是公网主机域名
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=xxxx.com" -out device.csr #xxxx.com是公网主机域名
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
替换证书,这样就不用在启动的时候 在命令上面加参数了
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
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,
server {
listen 80;
server_name *.ngrok.masteryu.site; # 任意三级域名
location / {
proxy_pass http://localhost:8088/;
proxy_set_header Host $host:8088; # 重要,替换掉端口!
}
}
7. 还差一个问题,本地启动的时候,老是带上端口,我不服!
8. 后台执行(服务端+客户端)
将以下代码保存为ngrokd.service文件,放在/etc/systemd/system/目录
注意替换路径 root/ngrok-server/bin/linux_386/ 为ngrok服务端目录
#/etc/systemd/system/ngrokd.service
[Unit]
Description=ngrok
After=network.target
[Service]
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"
LimitNOFILE=1048576
LimitNPROC=1048576
Restart=always
RestartSec=10
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
systemctl enable ngrokd.service #开机启动ngrokd服务
systemctl start ngrokd.service #启动ngrokd服务
重要!
- 服务商那里配置的安全规则,4443端口一定要开,没有配置nginx 80端口的,你配置的端口也要开。
- 域名解析的地方,记得配置任意三级/二级域名。
ngrok.cfg配置文件内容:
server_addr: "xxxx.com:4443" # xxxx.com是公网主机的域名,4443是公网主机默认的端口不要改动
trust_host_root_certs: false
补充1 构建客户端
#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
参考:
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