您现在的位置是: 首页 > 运维 自建Ngrok服务端
自建Ngrok服务端
2020-05-26 【运维】 1868人已围观 3656次浏览
简介自建Ngrok服务端
日常开发中,经常会涉及到一些需要通过公网来调试的服务,比如微信公众号、微信登录等,限于线上服务调试不方便的原因,就需要用内网穿透的服务,来直接访问本地的应用程序,类似花生壳(收费太贵)之类的服务,这里介绍的是自建 ngrok 服务端(官方也提供了服务,但由于是在国外,一来一回的速度不佳)
环境准备
- VPS、云服务器等(需要有公网IP),本文以 CentOS 7 64位系统为例进行安装
- 域名(如果公网IP在国内的,还需要进行备案,公网IP在香港或国外的,则不需要备案)
安装步骤
首先需要给域名添加两条A记录,解析到服务器IP上,比如
ngrok.xxxx.com 100.101.102.103
*.ngrok.xxxx.com 100.101.102.103
开放服务器 80、443、4443 端口(这是默认的端口,如果自定义的话则根据自己的端口进行开放)
在服务器上安装常用的依赖包(因为是 CentOS 系统,所以是 yum 命令,其他系统需自行调整命令)
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++
其次是安装 go 环境,可以参考这篇文章进行安装 CentOS 7 安装 Golang 环境
ngrok 安装包可以去GitHub上下载(目前官方的已经升级到了2.x,已经不开源了。目前最新的开源版本是 1.7.1),比如 https://github.com/inconshreveable/ngrok/releases/tag/1.7.1,或者是在服务器上安装 Git,然后直接拉取代码(由于服务器上访问GitHub很慢,所以本文是先下载源码包然后上传到服务器上的,获取ngrok的方式不限)
首先是解压文件到 /usr/local 下
tar -zxvf ngrok-1.7.1.tar.gz
然后进入目录,在目录下给域名生成证书
cd /usr/local/ngrok
为域名生成证书(其中 ngrok.xxxx.com 根据自己的域名进行修改)
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.xxxx.com" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=ngrok.xxxx.com" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
之后在软件源代码目录下面会生成一些证书文件,我们需要把这些文件拷贝到指定位置(出现提示需要覆盖,Y 确认即可)
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
进行到这里,正常来说是可以直接编译了。但是由于 Google 无法访问,导致编译过程中,需要从 code.google.com 上下载的 log4go 依赖包超时而编译失败,会提示
make: *** [deps] 错误 1
package log
所以,我们需要修改依赖包的下载地址改为 GitHub(虽然也很慢,但好在不会出错)
vim /usr/local/ngrok/src/ngrok/log/logger.go
将里面的第四行修改为
log "github.com/keepeye/log4go"
然后保存退出,就可以正常进行编译了
编译服务端
由于已经是服务器环境了,所以可以直接进行编译
需要注意的是,你的当前目录一定是在 /usr/local/ngrok 下面
执行编译
make release-server
这一步需要等待一段时间,因为有部分依赖包都是从国外下载回来的,速度可能会比较慢,耐心等待即可
编译客户端
根据自己客户端系统进行编译即可(同样都是在 /usr/local/ngrok 下面执行)
# Mac
GOOS=darwin GOARCH=amd64 make release-client
# Linux 64
GOOS=linux GOARCH=amd64 make release-client
# Windows 64
GOOS=windows GOARCH=amd64 make release-client
编译完成后,可以在 /usr/local/ngrok/bin 下找到对应的服务端和客户端程序
启动服务端
后台启动
nohup /usr/local/ngrok/bin/ngrokd -domain="ngrok.chabug.com" -httpAddr=":81" > /dev/null 2>&1 &
启动客户端
需要新建一个配置文件(yml 语法格式),这里以 Mac 系统为例,其他系统文件内容都类似
# 新建空的文件
touch ngrok.conf
文件内容是
server_addr: "ngrok.xxxx.com:4443"
trust_host_root_certs: false
最后以配置文件启动客户端(ngrok 文件,就是上面编译出来的客户端程序,下载到本地即可)
./ngrok -config=./ngrok.conf -subdomain=test 8080 > /dev/null 2>&1
客户端程序应该也需要后台运行的,但是在测试的过程中发现 nohup 后台启动无法正常运行,访问的时候会提示找不到,具体原因未知。后续如果研究出来了再更新,这里先前台启动
启动完成之后,还会默认监听自己本地的 4040 端口,提供一个 web 端的查看页面,里面会展示出来最近的访问日志,可以很方便的查看 API 接口或程序的访问信息,方便开发者调试
很赞哦! (0)
相关文章
- Linux 修改默认的 ssh 22 端口
- 解决443端口被VMWare Workstation占用
- Debian apt 使用国内镜像
- Linux no space left on device 出现设备上没有空间问题
- Oracle ORA-12541:TNS:no listener错误解决方法
- linux下各文件夹的结构说明及用途介绍
- LNMP 手动更新 SSL 证书
- Linux 常用命令 持续更新中...
- CentOS 安装 Docker
- Redis 提示 MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk 解决方案
点击排行
- Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR DISABLE You can't write or read against a disable instance
- Debian apt 使用国内镜像
- RocketMQ 出现 sendDefaultImpl call timeout 问题
- 类 BASE64Decoder 程序包 sun.misc 找不到符号
- SpringBoot @NotBlank 不生效问题
- 记一次 Mybatis-Plus 自动填充无效问题解决
- SpringBoot 2.x 文件上传出现 The field file exceeds its maximum permitted size of 1048576 bytes
- nuxt 项目完整部署方案
站长推荐
猜你喜欢
- 查看MySQL默认读取的配置文件
- 记一次Java MessageFormat.format踩坑
- mac idea spring boot 启动慢
- 常见端口号
- Zookeeper 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
- SpringBoot @NotBlank 不生效问题
- 优化 Mac 上 office 软件更新慢的问题
- SpringBoot 启动测试时出现提示 Test class should have exactly one public zero-argument constructor
- 在使用Flutter进行网络请求时,使用Dio访问https地址出现unable to get local issuer certificate错误
- CentOS 安装Python3