一直很期待远程在家办公,但是现在真实施起来,确实不是那么适应,甚至有些无聊。因为涉及到团队协作,时间上也没有做到自由安排。在这段时间的远程办公中,涉及到的主要问题就是和前端开发人员的对接上,我们的服务端程序部署在阿里云上,因为项目仍然处于开发阶段,接口上我们也需要经常调整,频繁发布更新特别影响效率,所以想到了内网穿透的方案,采用ngrok搭建了一套内网转发服务,同时也移植构建了一版http报表系统。Ngrok官网地址:https://ngrok.com ngrok官网提供的有免费服务,但是速度特别感人。
前提条件:域名、主机 ,笔者所用主机是阿里云centos8.0,域名也是在阿里云购买。(备注:如果尚未备案,请选择香港或者国外云主机)
ngrok搭建步骤如下:
1.环境安装
首先安装gcc和git,安装命令如下:
yum install gcc -y yum install git -y
安装go语言环境,如果不想通过yum安装,可以自行去官网下载,安装到服务器上。安装命令如下:
yum install -y mercurial git bzr subversion golang
2.搭建服务
在搭建服务的过程中,首先就是制作证书,制作证书命令如下:
export NGROK_DOMAIN ="test.com" # 个人域名 openssl genras -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
复制粘贴运行就行,运行结果如下图所示:
然后下载ngrok源码:
git clone https://github.com/inconshreveable/ngrok.git
代码下载完毕之后,用刚才生产的证书替换ngrok的证书,如下所示:
证书替换完毕之后,在ngrok文件夹下,即代码文件夹下输入命令编译服务端代码:
GOOS=linux GOARCH-amd64 make release-server
编译过程较慢,请耐心等待,且有可能会遇到编译失败的情况,重新编译即可。编译完成之后,会在bin目录下生产。服务启动命令是 ngrokd -domain='你的域名'。先不用启动服务端,往下继续编译客户端。客户端可以自行diy,修改ngrok默认服务地址,如下所示:
在第24行,修改defaultServerAddr为配置的域名,端口改为4443。
修改客户端logo,如下所示,在第100行左右修改ngrok为自己的logo文字即可。
完事之后,即可编译生产客户端,编译后的客户端也在bin目录,编译完成之后自行下载到个人电脑。编译命令如下:
GOOS=windows GOARCH=amd64 make release-client
服务端、客户端均编译完毕,可为服务端创建服务便于服务运行,一下为笔者服务配置:
[Unit] Description=ngrok service After=network.target After=syslog.target [Service] Type=simple ExecStart=/new-ngrok/code/ngrok/bin/ngrokd -domain= #个人配置的域名 ExecStop=/bin/kill $MAINPID ExecReload=/bin/kill -USR1 $MAINPID Restart=always [Install] WantedBy=multi-user.target
同时,关闭服务器防火墙,或者自行配置
systemctl stop firewalld
启动服务端,启动客户端,客户端使用方式如下,如果客户端未正确链接,配置下服务器的安全组规则即可,开放对应端口:
然后访问对应的公网地址即可。同时,管理地址是127.0.0.1:4040,界面如下:
通过这样的方式,可以清楚的查看到前端每次请求具体参数、返回信息,便于在对接过程中能够很快的排查问题。
内网转发服务搭建完毕,下一步就是集成到http报表,报表首页面如下:
在此感谢SpringLeee,本报表是基于开源项目移植而成,项目地址是https://github.com/SpringLeee/HttpReports
本项目是采用中间件的形式对请求进行统计,且github上此报表是core版本的,与作者沟通作者不打算整进.net framework。因为我们这边的项目大都是.net framework版本,所以只能自己动手移植到framework,花费了5个多小时成功移植,且针对具体功能进行了部分优化。移植后的版本,采用autofac进行DI。且通过httomodule的方式记录请求,因此在使用方式上,也以中间件的形式,只需要在web.config中注册本httpmodule即可。framework版本代码,以及使用方式,后续整理过后会分享到github。
在远程期间,我是依靠ngrok来解决前后端的对接问题,采用httpreports来对每天的请求进行分析。哪些接口容易报错、哪些接口耗时最长、哪些接口请求频率最高等等。