ngrok服務器架設過程

需要先安裝go環境
設置環境變量
12345 # 可以根據自己需要調整路徑 echo 'export GOROOT=/usr/local/go' >> /etc/profileecho 'export PATH=$PATH:$GOROOT/bin' >> /etc/profileecho 'export GOPATH=$HOME/go' >> /etc/profileecho 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profile
下載源碼安裝
由于yum安裝的go版本是1.4的,后面可能會有點問題,所以這里采用源碼安裝(2016.03.31最新版本為1.6)的方式
123 cd ~/your_download_dirwget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gztar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
查看是否安裝成功
12 go version# 正常的話會返回類似這樣的信息: go version go1.6 linux/amd64
ngrok安裝
git版本
如果你的git版本>=1.7.9.5,可以直接跳過git版本這一步;如果不是,需要先進行升級。
我在一臺服務器上的版本是1.7.1,在ngrok安裝過程中,會一直卡在某個東西的下載,我是卡在這里
1 gopkg.in/inconshreveable/go-update.v0 (download)
最好先進行一些git依賴的安裝
1 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++
然后再升級git版本,升級方法是先安裝第三方源(rpmfore),再使用該源進行git的更新。
這里不再詳細說明git的升級,大體可以照這篇教程弄;
唯一不同的是,因為啟用了priorities,所以在最后更新git時一直查找的是base的repo,而不是rpmforge的repo,所以需要在更新時將base,updates等repo禁用(參考這篇文章),如下:
1 yum --disablerepo=base,updates --enablerepo=rpmforge-extras update git
下載ngrok源碼
123 cd ~/your_download_dirgit clone https://github.com/inconshreveable/ngrok.git ngrokcd ngrok
生成證書
注意這里有個NGROK_BASE_DOMAIN;
假設最終需要提供的地址為aevit.your-domain.com,則NGROK_BASE_DOMAIN設置為your-domain.com;
假設最終需要提供的地址為aevit.ngrok.your-domain.com,則NGROK_BASE_DOMAIN設置為ngrok.your-domain.com;
下面以ngrok.your-domain.com為例:
12345 openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.your-domain.com" -days 5000 -out rootCA.pemopenssl genrsa -out device.key 2048openssl req -new -key device.key -subj "/CN=ngrok.your-domain.com" -out device.csropenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
執行完以上命令,就會在ngrok目錄下新生成6個文件
123456 device.crtdevice.csrdevice.keyrootCA.keyrootCA.pemrootCA.srl
ngrok通過bindata將ngrok源碼目錄下的assets目錄(資源文件)打包到可執行文件(ngrokd和ngrok)中 去,assets/client/tls 和 assets/server/tls 下分別存放著用于ngrok和ngrokd的默認證書文件,我們需要將它們替換成我們自己生成的:(因此這一步務必放在編譯可執行文件之前)
123 cp rootCA.pem assets/client/tls/ngrokroot.crtcp device.crt assets/server/tls/snakeoil.crtcp device.key assets/server/tls/snakeoil.key
編譯ngrokd和ngrok
編譯linux端版本
1234 make clean# 如果是32位系統,這里 GOARCH=386GOOS=linux GOARCH=amd64 make release-server release-client
最后成功的話,會在當前目錄生成一個bin文件夾,里面包含了ngrokd和ngrok文件;
其中,bin/ngrokd文件是服務端程序;
bin/ngrok文件是客戶端程序(注意上面指定了GOOS為64位linux的,所以這個文件是不能在mac或win等其他平臺跑的,下面將進行說明如何交叉編譯)
編譯mac端版本
1234 cd ~/your_download_dir/ngrok# 如果是win端版本,GOOS=windows;如果是32位系統,GOARCH=386GOOS=darwin GOARCH=amd64 make release-client
成功的話,會在./bin/darwin_amd64/下有個文件,將這個文件下載到mac上
12 # 如果服務器沒裝sz程序,請先安裝(yum -y install lrzsz);或自行采用其他辦法下載到本機 sz ./bin/darwin_amd64/ngrok
設置域名解析
1234567 # 如果最終需要的ngrok地址為: example.your-domain.com,則設置 * 記錄指向服務器IP# 如果最終需要的ngrok地址為: example.ngrok.your-domain.com,則設置 *.ngrok 記錄指向服務器IP# 或者不想進行泛解析,則手動添加即可,如設置example記錄指向服務器IP,example.ngrok記錄指向服務器IP
使用方法
服務端
nginx端口轉發
由于本機的80端口已經被占用了,所以需要利用nginx進行端口的轉發,加上如下配置即可:
12 # 根據自己nginx的安裝路徑,自動調整以下命令vim /usr/local/nginx/conf/vhost/nginx.your-domain.com.conf
內容如下:
123456789101112131415161718 upstream ngrok { server 127.0.0.1:8777; # 此處端口要跟 啟動服務端ngrok 時指定的端口一致 keepalive 64;}server { listen 80; server_name *.ngrok.your-domain.com; access_log /data/wwwlogs/ngrok.your-domain.com_access.log; error_log /data/wwwlogs/ngrok.your-domain.com_error.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host:8777; # 此處端口要跟 啟動服務端ngrok 時指定的端口一致 proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://ngrok; }}
重啟nginx
12 nginx -tnginx -s reload
啟動服務端ngrok
1234567891011 # domain填寫剛才生成證書時的 NGROK_BASE_DOMAIN# http和https端口可以自己指定,這里不采用80端口,是因為其他程序已經占用了,端口轉發在上面nginx已經配置完成 bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778"# 如果想要后臺啟動,執行以下命令 nohup bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778" > /dev/null 2>&1 &# 如果想要開機啟動,執行以下命令vim /etc/rc.d/rc.local# 添加以下內容,具體內容請根據自己情況自行調整{your-ngrok-dir}/bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778" > /var/log/ngrok.log &
客戶端
確保剛才下載的mac版ngrok有執行權限
1 chmod +x ngrok
在ngrok程序的同級目錄下,編寫配置文件
1 vim ngrok.cfg
內容如下:
12345678910111213141516171819202122232425262728 server_addr: "ngrok.your-domain.com:4443"trust_host_root_certs: falsetunnels: example: subdomain: "example" #定義服務器分配域名前綴 proto: http: 80 #映射端口,不加ip默認本機 https: 80 web: subdomain: "web" #定義服務器分配域名前綴 proto: http: 192.168.1.100:80 #映射端口,可以通過加ip為內網任意一臺映射 https: 192.168.1.100:80 web1: hostname: "ngrok.your-domain.com" proto: http: 80 web2: hostname: "your-domain.com" proto: http: 80 ssh: remote_port: 50001 #服務器分配tcp轉發端口,如果不填寫此項則由服務器分配 proto: tcp: 22 #映射本地的22端口 ssh1: #將由服務器分配端口 proto: tcp: 21
啟動ngrok
123456789 ./ngrok -subdomain example -config=ngrok.cfg 80# 或者./ngrok -config ngrok.cfg start example# 如果出現問題連接不上,想在本地查看日志,可加上log參數# ./ngrok -log ngrok.log -config ngrok.cfg start example# 最終如果Tunnel Status顯示online則表示成功了
在本地進行微信公眾號的調試
接下來就可以進行微信公眾號在本地的開發了,只要在本地設置好nginx(server_name要跟上文對應,如上面的example.ngrok.your-domain.com)
由于微信只允許使用80端口,所以一定要進行上面的nginx的端口轉發設置才行
另外,ngrok本身提供了127.0.0.1:4040這個地址,可以查看到所有的http數據包內容(在php文件里var_dump的東西也可以看到)
遇到的問題
ngrok端口的防火墻問題
由于服務器上開啟了防火墻,使用的是iptables,所以需要將上面的端口添加到白名單
(一共3個,一個是ngrok自身的4443端口,還有自定義的8777http端口,8778https端口)
1 vim /etc/sysconfig/iptables
添加以下內容
123 -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 4443 -j ACCEPT -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 8777 -j ACCEPT -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 8778 -j ACCEPT
重啟iptables
1 service iptables restart
ngrok的交叉編譯
在服務器上要編譯個mac端的版本時,網上說需要進行go的源碼,去進行GOOS的設置:
12 cd /usr/local/go/srcGOOS=darwin GOARCH=amd64 CGO_ENABLED=0 ./make.bash
但是我拿另一臺服務器測試過后,不用這樣也行,直接按剛才上面說的,在ngrok目錄去進行mac端版本的編譯即可。
PS: 以下內容不能看也行,只是中間遇到的問題的一些記錄而已
我第一次照著網上說的去go源碼設置GOOS,反而會報這樣的錯:
123 go ./make.bash: eval: line 135: syntax error near unexpected token ( ERROR: Cannot find /root/go1.4/bin/go.Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4. google了下,說現在新的go都不用C編寫了,而1.4之前的是C編寫的,所以需要先安裝1.4的,才能編譯1.6的,于是便先安裝了1.4,再安裝1.6,步驟如下: 1234567891011121314151617181920212223242526272829303132333435 echo 'export GOROOT=/usr/local/go' >> /etc/profileecho 'export PATH=$PATH:$GOROOT/bin' >> /etc/profileecho 'export GOPATH=$HOME/go' >> /etc/profileecho 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profilesource /etc/profilecd ~/your_download_dir# 先下載1.4的源碼wget https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gztar -C /usr/local -xzf go1.4.3.linux-amd64.tar.gz#tar -xzf go1.4.3.linux-amd64.tar.gz#mv ./go /usr/local/gocd /usr/local/go/src./all.bash# 查看版本,現在是1.4.3的go version# 將1.4的源碼目錄名更改為go1.4,go這個目錄名等下給1.6用mv /usr/local/go/ /usr/local/go1.4/vim /etc/profile# 默認的 GOROOT_BOOTSTRAP 是: $HOME/go1.4,因為我放在了/usr/local/go1.4`,所以這里要指定該值export GOROOT_BOOTSTRAP=/usr/local/go1.4cd ~/your_download_dirwget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gztar -C /usr/local -xzf go1.6.linux-amd64.tar.gzcd /usr/local/go/src./all.bash# 查看版本,現在是1.6的go version
最后再次進行測試驗證了不用先安裝1.4再安裝1.6這么麻煩。。
總結
中間雖然遇到了一些坑,google查了好幾個鐘的資料,昨晚弄到凌晨2點多,不過最終弄成功,并且驗證了一些安裝過程的想法,還是挺有成就感的。
還好大學時就有稍微折騰過linux,去年轉后臺開發時就用上了一些知識,現在服務器遇到一些基本問題最終也能解決了。
所以還是不能停止學習的腳步啊。
趁現在還年輕,多折騰。。

參照網上的編譯好服務器后,這樣運行
如果是openwrt的系統直接用winscp拷貝openwrt里
將ngrokc 放到 /usr/bin 下面 添加權限 (chmod +x ngrokc ) 就可以用luci 界面了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

  • 今天朋友叫我幫他搭建個ngrok,我自己也是個喜歡折騰的人,所以就應承下了。用了2小時左右搭建成功,中間查看各種資...
    無痕無敵閱讀 3,621評論 4 5
  • 文檔中的命令不要一次執行多個,防止出現不必要的錯誤 安裝依賴 下載git 解壓git 編譯git 創建git軟連接...
    ucfjepl閱讀 2,260評論 0 53
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,825評論 18 139
  • Codis 3.2 部署配置匯總 概念總結 集群配置前需要了解架構,集群分片主要分三種: 客戶端分片:這個需要自己...
    三杯水Plus閱讀 6,033評論 0 11
  • 鴨子用料酒、生抽腌制,清洗干凈,高壓鍋放入干凈的鴨子,加入姜壓熟撈起備用 熱油鍋入蒜末丁、新姜片、干辣椒、紅辣椒、...
    渡把閱讀 215評論 0 0