準(zhǔn)備工作
- 云服務(wù)器,一個(gè)域名,域名解析到云服務(wù)器,本人用的阿里云ecs和域名
- 服務(wù)器環(huán)境
#安裝gcc wget
yum install gcc wget -y
#下載yum倉(cāng)庫(kù)
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#添加yum倉(cāng)庫(kù)
rpm -ivh epel-release-latest-7.noarch.rpm
#安裝go
yum install golang
#驗(yàn)證go
go version
- 安裝ngrok服務(wù)器
#下載ngrok1.7
cd /usr/local/src
wget https://github.com/inconshreveable/ngrok/archive/1.7.1.tar.gz
tar -xf 1.7.1.tar.gz && cd ngrok-1.7.1
#自己服務(wù)器的域名
echo export NGROK_DOMAIN="example.com">>~/.bash_profile
source ~/.bash_profile
#生成證書(shū)
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 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
#覆蓋證書(shū)
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
#生成服務(wù)端 (路徑/usr/local/src/ngrok-1.7.1/bin/ngrokd)
#在編譯客戶端的時(shí)候需要指明對(duì)應(yīng)的操作系統(tǒng)和構(gòu)架:
#Linux 平臺(tái) 32 位系統(tǒng):GOOS=linux GOARCH=386
#Linux 平臺(tái) 64 位系統(tǒng):GOOS=linux GOARCH=amd64
#Windows 平臺(tái) 32 位系統(tǒng):GOOS=windows GOARCH=386
#Windows 平臺(tái) 64 位系統(tǒng):GOOS=windows GOARCH=amd64
#MAC 平臺(tái) 32 位系統(tǒng):GOOS=darwin GOARCH=386
#MAC 平臺(tái) 64 位系統(tǒng):GOOS=darwin GOARCH=amd64
#ARM 平臺(tái):GOOS=linux GOARCH=arm
GOOS=linux GOARCH=amd64 make release-server
可能碰到的問(wèn)題
package code.google.com/p/log4go: Get https://code.google.com/p/log4go/source/checkout?repo=: dial tcp 216.58.197.110:443: i/o timeout
因?yàn)間oogle被墻,如果服務(wù)器不在墻外或者沒(méi)有FQ則無(wú)法訪問(wèn)到code.google.com.
解決方法:在 ngrok/src/ngrok/log 目錄下找到 logger.go 文件,修改其中第4或5行的:
log "code.google.com/p/log4go”為
log "github.com/keepeye/log4go"
#生成客戶端 (路徑/usr/local/src/ngrok-1.7.1/bin/ngrok)
GOOS=linux GOARCH=amd64 make release-client
#后臺(tái)啟動(dòng)服務(wù)端
nohup ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="$NGROK_DOMAIN" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083" > ngrok.log 2>&1 &
- ngrok客戶端服務(wù)器環(huán)境搭建
#安裝gcc wget screen
yum install gcc wget screen -y
#下載yum倉(cāng)庫(kù)
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#添加yum倉(cāng)庫(kù)
rpm -ivh epel-release-latest-7.noarch.rpm
#安裝go
yum install golang
#驗(yàn)證go
go version
- 下載客戶端到客戶端服務(wù)器并添加配置文件ngrok.yml在ngrok同路徑下:
#server_addr=${NGROK_DOMAIN}:${tunnelAddr}
server_addr: "example.com:8083"
#用證書(shū)生成出來(lái)的客戶端為false
trust_host_root_certs: false
#具體映射的端口,ssh服務(wù)把本地的22端口映射到server的6666端口
tunnels:
ssh:
remote_port: 6666
proto:
tcp: 22
- 后臺(tái)啟動(dòng)ngrok客戶端
#利用screen啟動(dòng)session叫ngrok的終端
screen -S ngrok
#啟動(dòng)ngrok命令 -config為配置文件目錄 ssh為配置文件中的映射服務(wù)名稱
./ngrok -config=ngrok.yml start ssh
#看到界面中tunnel status 為online 說(shuō)明啟動(dòng)成功,其他狀態(tài)查看日志文件查找具體原因
#脫離ngrok的screen
crtl + a + d