背景
我為什么要寫這個文檔,因為遇到的坑太多了辟拷。一方面算是紀(jì)念一下,另一方面給同樣想做內(nèi)網(wǎng)穿透的小伙伴环凿,貢獻(xiàn)一點微薄之力梧兼。開干:
首先要有一臺有公網(wǎng)ip的機器
我用的是騰訊云的輕量型應(yīng)用服務(wù)器。
ngrok源碼地址
https://github.com/inconshreveable/ngrok/tree/master
1智听、安裝golang
- 網(wǎng)上幾乎都是這種方法羽杰,但是不推薦,因為ngrok是六七年前就寫好的東西到推,
centos: yum install golang -y
ubuntu:apt-get install golang-go
- 推薦方式考赛,題主親測可用,關(guān)鍵是如果這個版本不行莉测,換個版本就行
# 去官網(wǎng)下載匹配的壓縮包:https://go.dev/dl/
# 以1.15.15為例颜骤,我的x86_64架構(gòu),linux系統(tǒng)
# 1. 下載
wget https://go.dev/dl/go1.15.15.linux-amd64.tar.gz
# 2. 解壓
tar -xvf go1.15.15.linux-amd64.tar.gz
# 3.配置環(huán)境變量, vi ~/.bashrc 捣卤,加入下面幾行(加入剛才的解壓目錄在/opt)
export GOPATH=/opt/go
export GOROOT=/opt/go
export PATH=$GOROOT/bin:$PATH
# 4. 驗證忍抽,出現(xiàn)版本號即可
go version
# 5. 坑點
使用1.15+版本的go編譯,會報
rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0"
是因為 go 1.15 版本開始[廢棄 CommonName](https://golang.org/doc/go1.15#commonname)董朝,因此推薦使用 SAN 證書鸠项。 如果想兼容之前的方式,需要設(shè)置環(huán)境變量 GODEBUG 為 `x509ignoreCN=0`子姜,或者使用以前的版本編譯
編譯
遇到的坑最多
- 如果是用1.16版本的go編譯ngrok 祟绊,有錯誤(TODO:待補充),我換成了1.15.15版本
- 換成1.15.15后仍舊報錯哥捕,出現(xiàn)缺包:code.google.com/p/log4go 找不到牧抽,即下載失敗遥赚;
主要是 code.google.com 網(wǎng)站已關(guān)閉導(dǎo)致的扬舒,有人把它 fork 到 github 上面了,發(fā)現(xiàn)了好幾個凫佛,如
https://github.com/alecthomas/log4go
https://github.com/thinkboy/log4go
因此讲坎,把項目中的 log "code.google.com/p/log4go" 替換改為 log "github.com/thinkboy/log4go" 即可泽腮!
- 這還沒有完,還會報錯衣赶,這個包缺失:github.com/inconshreveable/go-update/check,這是因為版本go-update的版本不對厚满,編譯時自動拉取的是最新的版本(最近的里面沒有check), 所以需要進(jìn)入到 src/github.com/inconshreveable/go-update路徑下府瞄,把go-update的代碼clone一份,切換到filemode分支碘箍,再回到ngrok主目錄編譯就行了
至此遵馆,本題主遇到的所有問題才得以解決,順利編譯通過
至于剩下的安裝過程丰榴,借用下別人的經(jīng)驗(以后再補充):https://zhuanlan.zhihu.com/p/149968878
PS:草草的記錄一下货邓,有空了再整理。