下面是我在阿里云centOS7上面的搭建过程。
& T. H1 u. J- @# s. C* N& J2 L: N& _5 ]+ M5 Z7 B0 S e" S
1.go环境搭建' [6 N! L8 a( i: q* R7 z! b R
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
7 Q/ B- G5 ~) p9 p& j源码安装go的详细过程如下:
% u% b4 Y i, X/ t$ A% x8 i: A, L" T- N+ v
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。6 y& F( \* Y% p$ l0 N4 V& S
; ~1 ^& [6 [" D7 R4 c2).将其解压到/usr/local目录下:6 U6 f/ E- k. d3 p
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
' @/ {1 N, ?- }) l$ _0 f
" Q$ G3 d/ M5 B% f4 \注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。! ?$ ]6 \! e# r( D+ d% t
# X2 N4 s# T+ \( h3). 在root环境下执行如下命令:( X) O( l! {7 R
mkdir $HOME/go
* u- S2 z) P+ U* `8 Fecho 'export GOROOT=/usr/local/go'>> ~/.bashrc
) j# }0 K) q5 P) S: { g9 w: Kecho 'export GOPATH=$HOME/go'>> ~/.bashrc
( D3 W- y# ]9 o% Lecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
7 E: ^4 _8 T3 P; f" u) \' K7 K0 hsource $HOME/.bashrc , n) _$ z, t0 c; v, _
/ F2 c: N! O v' @
4). 安装go get工具, b% N. F& f3 O% ^; G' \) _; q
yum install mercurial git bzr subversion 6 d5 V, O4 k* s* V/ }/ D
: F3 Z* J; G1 Z5 Q7 F( y! e' B" {2. 获取源码0 o* K% O. o0 S! X( h7 C. j
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 6 d4 o9 V! C) C9 i% D" Q i6 }
获取源码:1 g+ {5 m, [/ N/ B9 i2 ]
git clone https://github.com/inconshreveable/ngrok.git
+ d$ ^4 J: @# I+ U9 i
/ O/ O B: ]7 {" W$ P. i. b3. 编译, C. v9 V5 }$ J9 V' G
4 A6 D% j, O I1). 配置环境变量
% A: t6 m5 T: H1 W; L9 w8 M% ~' e8 l
export NGROK_DOMAIN="tunnel.bbear.me"
3 G$ M2 x" V5 mtunnel.bbear.me替换成你自己的域名。
# x6 J* s" V( ]8 ]
) W* `# x) V- u6 V! Q2). 生成自签名ssl证书
# A7 u- } Z! h7 l! Z9 S- m$ j% `6 U9 q4 M ^6 C
cd ngrok
- p9 c/ i. V' x; K' w2 ^/ }, l2 iopenssl genrsa -out rootCA.key 20482 M/ V, A8 s+ G' E0 [
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
0 K4 Q. E9 b- D c% ^0 C$ Topenssl genrsa -out device.key 2048; g. R' `, l" m$ M& z6 O2 I
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
' L# z- J( ]- {openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
7 Q- f: E& N; y2 Pcp rootCA.pem assets/client/tls/ngrokroot.crt
$ h3 Q; R) |( T7 t; c9 k2 Y. z: N. }1 xcp device.crt assets/server/tls/snakeoil.crt
; I5 p1 @ L( F- r6 U% }cp device.key assets/server/tls/snakeoil.key
) U6 f2 p* d0 w; S* I/ v4 J, p$ ]. b/ D9 H8 o+ K
设置变量:/ c; E4 a/ \7 P- x5 y
}6 c- d5 x1 _! m
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 $ a5 u* m) D/ E" i# j6 q
生成服务端与客户端
2 K2 x( W* R W& u
+ {0 Z |0 k# J5 t; r- Pmake release-server release-client V/ _9 e j M) s# e8 C
# g7 ?* d% ?; s$ W. u6 l$ ?
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
. L6 q" O$ L, {) {2 C5 E. W* A5 ^) I+ n8 H8 N- L& b% S
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。- S- t1 d6 ]2 z' o2 b$ e' I% V
' }. G i/ `& R |9 P2 s编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。/ l/ C7 W' f9 L4 P
* A- C4 c( S" s. ?
4. 交叉编译生成windows客户端6 d8 L( F6 C; \1 K) _
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:" ~ x: }! w7 }7 M! B
6 K2 O5 ^* Z1 h8 p `进入go目录,进行环境配置1 C% I; B- w3 E, g6 F x- A
cd /usr/local/go/src/
8 U; H& }4 a5 F* O! `
) e4 T* _, {% \' ]GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 8 ?; S- u: T- I0 x7 M% z
进入ngrok目录重新编译
: h. U2 f! A1 B" scd /usr/local/src/ngrok/
# L% k% n7 @' \+ s1 _' a- G8 {, L
% k$ T( N" h& T, s5 {GOOS=windows GOARCH=amd64 make release-server release-client
! q! @8 {8 g. t D) d编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
1 K1 T; B" J2 \) n. R1 }% R" w0 O- e- O7 K
5. ngrokd服务启动与使用
/ b2 o/ x3 R* U1、启动ngrokd服务端
. A+ C6 [0 H) {, f z: [# \! i4 Q; V* l5 n0 c1 R# U
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
' _+ H. n# k7 I+ C9 X: b注意,让程序一直在后台运行可以执行: S, L8 x& i7 o
- B6 S6 G8 V. T' k5 Y; ^; q
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & : z+ o1 _, `2 M# [6 i" w5 P/ A) E" g
想要结束后台进程可以+ g- ]9 Z1 ^, X
' |3 C& P1 K! P+ s t
ps -A #找到PID " I4 L# o9 l1 P6 O
kill xxxid
: }1 M0 K4 S) T1 l2、启动ngrok客户端3 c. m0 q9 l1 S+ O
. h+ L. \; n8 l# h1 [
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置' W( X7 e" i/ }4 `4 O
# Q/ c" F4 K/ G* _( l; E$ J
server_addr: "tunnel.bbear.me:4443"
' H( t, t; [& Utrust_host_root_certs: false + ?2 [" A; R# E& X, i
& _: E- b2 O2 f1 |
再在windows控制台执行3 N5 ~/ m2 o2 F; B! S
. |& y/ E0 |: r" Y. i4 s
ngrok -config=ngrok.cfg -subdomain upal 8080 ! z# f$ @) G. j, v
5 B. T, W! R; ^# x; m% A3 T1 ]
upal是你自定义地址。: E) B" I, {4 m4 a3 q
看到这样一个界面就说明成功了 % ~) M. A5 X$ r0 |4 Y
9 f% ^4 U2 b% y1 u+ D; W如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
9 l7 V* [& b0 Y% n* r* h
4 ]* j9 r; o6 a- @; ?- o1 P& F6 Y t% K6 Z# y9 Z' _- \
% F& `- O: u' h d' Z. j原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
. C; l0 H3 A- ]! h1 N |