若是你只是臨時穿透或調試用,到第三步基本就能夠了,但若是想做爲穩定的商業服務,用別人的服務器仍是受制於人,這裏咱們準備搭建本身的ngrok服務器。大體的步驟以下:html
ngrok服務器能夠是多種平臺,如windows、Linux(CentOS、Debian、Ubuntu等)、Mac OS等。node
編譯源代碼生成應用強烈建議你們使用linux環境,windows確定能夠成功,但很是麻煩,我在windows操做系統上兜了一個大圈圈。linux
先決條件:nginx
a)、您有一臺公網上的服務器,如阿里雲的ECSgit
b)、您有一個域名,最好ICP備案成功,否則80端口沒有辦法使用,不過像微信開發是不使用80端口的,能夠用nginx代理轉換。github
在linux環境下編譯ngrok的源代碼比windows下 方便不少,這裏咱們選擇使用ubuntu,得到ubuntu的方法有以下幾種:golang
1)、全新安裝ubuntu系統ubuntu
2)、申請VPS服務器, 阿里雲、騰訊雲、華爲雲、百度雲、新浪雲等,僅編譯一下這種方法不錯windows
3)、在虛擬機中安裝ubuntu系統服務器
綜合考慮我選擇了在虛擬機中安裝ubuntu操做系統
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激活步驟:
方法1、首次開啓直接輸入上文密鑰,便可激活;
方法2、首次開啓選擇試用,進入試用後按一下步驟激活:
a、打開虛擬機主界面,點擊「幫助」—「輸入許可證密鑰」;
b、在密鑰輸入框輸入永久許可證密鑰5A02H-AU243-TZJ49-GTC7K-3C61N,肯定;更多
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安裝詳細過程》。
當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的使用不是本文的重點,相關操做請你們自行查找。
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直接拖進去就能夠了。
直接在命令模式下執行以下指令:
apt-get install golang #安裝go語言
執行結果以下:
在本身的域名管理中添加解析A記錄,以下所示:
將*.ngrok與ngrok都指向您的主機IP。
默認的域名是ngrok本身的,要替換成您本身的域名
export GOPATH=/usr/local/ngrok/ #設置環境變量,Go語言的安裝位置 export NGROK_DOMAIN="ngrok.yourdomain.com" #設置環境變量,ngrok域名
PS. ngrok名稱能夠任意,推薦名稱爲ngrok或者tunnel
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
生成後的結果以下:
證書以下:
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
運行結果:
因爲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是服務端,下面是比較連續的操做結果。