一直很期待遠程在家辦公,但是現在真實施起來,確實不是那么適應,甚至有些無聊。因為涉及到團隊協作,時間上也沒有做到自由安排。在這段時間的遠程辦公中,涉及到的主要問題就是和前端開發人員的對接上,我們的服務端程序部署在阿里雲上,因為項目仍然處於開發階段,接口上我們也需要經常調整,頻繁發布更新特別影響效率,所以想到了內網穿透的方案,采用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來對每天的請求進行分析。哪些接口容易報錯、哪些接口耗時最長、哪些接口請求頻率最高等等。
