四、ubuntu下生成ngrok服務器主程序
4.1、步驟與先決條件
如果你只是臨時穿透或調試用,到第三步基本就可以了,但如果想作為穩定的商業服務,用別人的服務器還是受制於人,這里我們准備搭建自己的ngrok服務器。大致的步驟如下:
ngrok服務器可以是多種平台,如windows、Linux(CentOS、Debian、Ubuntu等)、Mac OS等。
編譯源代碼生成應用強烈建議大家使用linux環境,windows肯定可以成功,但非常麻煩,我在windows操作系統上兜了一個大圈圈。
先決條件:
a)、您有一台公網上的服務器,如阿里雲的ECS
b)、您有一個域名,最好ICP備案成功,不然80端口沒有辦法使用,不過像微信開發是不使用80端口的,可以用nginx代理轉換。
4.2、安裝ubuntu操作系統
在linux環境下編譯ngrok的源代碼比windows下 方便很多,這里我們選擇使用ubuntu,獲得ubuntu的方法有如下幾種:
1)、全新安裝ubuntu系統
2)、申請VPS服務器, 阿里雲、騰訊雲、華為雲、百度雲、新浪雲等,僅編譯一下這種方法不錯
3)、在虛擬機中安裝ubuntu系統
綜合考慮我選擇了在虛擬機中安裝ubuntu操作系統
4.2.1、安裝VMware虛擬機
VMware Workstation是一款功能強大的虛擬機軟件,在不影響本機操作系統的情況下,用戶可以在虛擬機中同時運行不同版本的操作系統,用於開發、測試以及部署工作。
VMware Workstation 12 pro下載:VMware-workstation-full-12.1.0-3272444.exe
序列號:5A02H-AU243-TZJ49-GTC7K-3C61N(商業應用請購買正式版權,這里僅為學習使用)
1)、雙擊VMware Workstation 12安裝文件,或者右鍵管理員身份打開,提示是否允許更改,點擊是;
2)、打開VMware安裝向導,點擊下一步;
3)、VMware Workstation 12激活步驟:
方法一、首次開啟直接輸入上文密鑰,即可激活;
方法二、首次開啟選擇試用,進入試用后按一下步驟激活:
a、打開虛擬機主界面,點擊“幫助”—“輸入許可證密鑰”;
b、在密鑰輸入框輸入永久許可證密鑰5A02H-AU243-TZJ49-GTC7K-3C61N,確定;更多
4.2.2、安裝ubuntu到虛擬機
1)、下載ubuntu操作系統鏡像
下載地址:https://www.ubuntu.com/download/desktop
這里我下載的是ubuntu-16.04.3-desktop-amd64.iso
2)、在VMware中安裝ubuntu
打開VMware點擊“創建新的虛擬機”
向導選擇自定義
然后下一步再下一步,直到這里,稍后再安裝系統
后面設置處理器和內存的,電腦配置好的可以試試,否則采用默認的,博主這里是采用默認的,然后下一,直到這里,選擇將虛擬機存儲為單個磁盤:
個人建議至少20G硬盤空間,內存建議給1.5G,當然也要看電腦本身的配置,1G的內存跑起來比較卡。
其它的步驟比較簡單,更多細節可以參考這里,《VMware Ubuntu安裝詳細過程》。
4.2.3、配置ubuntu系統
當ubuntu系統安裝成功后,在虛擬機中可以啟動ubuntu系統,啟動后的系統如下:
ubuntu系統的使用還是有許多內容的,這里需要設置的內容如下:
a)、設置上網
就是在ubuntu中可以訪問外網,可以使用多種形式
b)、設置語言
可以選擇使用中文版的ubuntu語言環境
c)、設置屏幕分辨率
如果不設置默認的屏幕比較小
d)、設置以root超級管理員的身份登錄
許多操作要求管理身份
e)、安裝VMware Tools工具
只有在VMware虛擬機中安裝好了VMware Tools,才能實現主機與虛擬機之間的文件共享,同時可支持自由拖拽的功能,鼠標也可在虛擬機與主機之間自由移動(不用再按ctrl+alt),且虛擬機屏幕也可實現全屏化。
VMware Tools是VMware虛擬機中自帶的一種增強工具,相當於VirtualBox中的增強功能(Sun VirtualBox Guest Additions),是VMware提供的增強虛擬顯卡和硬盤性能、以及同步虛擬機與主機時鍾的驅動程序。
注意如果這里是灰色的需要您將linux.iso鏡像加載到虛擬光驅中,一般在VM的安裝目錄下有,如果沒有您需要自行下載。
說明:ubuntu的使用不是本文的重點,相關操作請大家自行查找。
4.3、生成ngrok服務器與客戶端應用程序
4.3.1. 導出源代碼
ngrok的源代碼托管在github上,可以先在ubuntu下安裝git再將ngrok的源代碼克隆到本地。
其實也可以直接下載到本地后解壓,這里使用命令行完成。
啟動ubuntu,開打命令行(終端),如下所示:
以root身份執行如下命令:
mkdir ngrok #創建名稱為ngrok的目錄 apt-get update #更新包管理器 apt-get install git #安裝git git clone https://github.com/inconshreveable/ngrok.git ngrok2 #將ngrok源代碼克隆回本地
成功執行后如下所示:
導出成功后的源代碼:
PS. 直接在服務器上下載的話實在太慢,可以先在本地下載好,然后用ftp放到服務器上去直接用,如果安裝了VMware tools直接拖進去就可以了。
4.3.2. 安裝Go語言開發環境
直接在命令模式下執行如下指令:
apt-get install golang #安裝go語言
執行結果如下:
4.3.3. 更改ngrok域名
在自己的域名管理中添加解析A記錄,如下所示:
將*.ngrok與ngrok都指向您的主機IP。
默認的域名是ngrok自己的,要替換成您自己的域名
export GOPATH=/usr/local/ngrok/ #設置環境變量,Go語言的安裝位置 export NGROK_DOMAIN="ngrok.yourdomain.com" #設置環境變量,ngrok域名
PS. ngrok名稱可以任意,推薦名稱為ngrok或者tunnel
4.3.4. 為域名生成證書
openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem openssl genrsa -out server.key 2048 openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
生成后的結果如下:
證書如下:
4.3.5. 拷貝證書到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt #復制rootCA.pem到assets/client/tls/並更名為ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt #復制server.crt到assets/server/tls/並更名為snakeoil.crt cp server.key assets/server/tls/snakeoil.key #復制server.key到assets/server/tls/並更名為snakeoil.key
運行結果:
4.3.6. 編譯
由於go語言的特性,在編譯時直接生成機器碼,所以在運行過程中並不需要go的環境(非托管應用)。在ngrok目錄下,運行一下命令分別生成對應的客戶端與服務端。
#win服務端 GOOS=windows GOARCH=386 make release-server #win客戶端 GOOS=windows GOARCH=386 make release-client #linux服務端 GOOS=linux GOARCH=386 make release-server #linux客戶端 GOOS=linux GOARCH=386 make release-client
生成完成后,在工作目錄的bin文件夾下,產生對應的文件。以編譯windows平台為例,會產生“ngrok.exe”與“ngrokd.exe”這兩個文件,前者客戶端,后者需要運行在公網服務器上。
因為項目中引用了一些外部資源,生成會耗費一些時間,對網絡也有一定的要求,太慢會中短,命令執行下如:
生成結果:
這里我還生成了兩個運行在windows服務器與客戶端的應用:
ngrok.exe是客戶端,ngrokd.exe是服務端,下面是比較連續的操作結果。