下面是我在阿里云centOS7上面的搭建过程。+ a( K$ n5 V' ~! E; b: h( c
# D+ o' V1 L; C3 h$ w( R% c1 H
1.go环境搭建/ j4 N& y" |% B0 U
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 / _2 l* l4 F1 [4 Q: \; `
源码安装go的详细过程如下:
' g" \$ y. Z- ~) B. v4 S: e5 f
& J1 _4 v* R( n$ ?" J7 k1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。+ D* ]6 E$ _2 u4 }9 E7 V
, C7 v8 a# ~- i9 B4 z0 `2).将其解压到/usr/local目录下:
$ l5 \* ]" o5 S6 G: E$ C! c; Otar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
; Y2 X4 o: j- F" _9 y0 k
p, l& I: k6 |( j( [注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
# ]! ~/ N- q2 M, E
) o" k7 t! b, c7 L3). 在root环境下执行如下命令:' y8 q% T& H. D, g# T0 P$ ^1 j D
mkdir $HOME/go ! T8 R/ e$ ]7 A! @
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc / Y- u, y) ]9 s! `$ v0 X
echo 'export GOPATH=$HOME/go'>> ~/.bashrc 5 H0 B) `8 \2 C7 M& X6 \
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc 8 J+ }1 Z8 w0 r$ V# E
source $HOME/.bashrc 0 S; Q4 c3 B7 U/ G5 M; ~
3 ` d) V0 |* l' Z) a
4). 安装go get工具+ Y6 u. r/ Z$ G5 B( W& w
yum install mercurial git bzr subversion ) Y8 |2 G7 }1 I6 a: |
$ F- m7 n! T5 G
2. 获取源码: N R: D, w9 A
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
. a6 x2 p& X; l6 U4 K" ]$ o获取源码:
8 y* m* U7 g7 L$ Agit clone https://github.com/inconshreveable/ngrok.git 9 X+ R6 S8 H/ a/ D$ L9 M6 `2 R1 K
, I% ?; ?4 U. i' t! y3. 编译
Y$ a/ y: i- i0 `" u5 h! N4 D% N% U* w5 a$ j5 X5 J+ U) T
1). 配置环境变量0 _; G7 r4 N, ?9 n7 O+ n# k: R& O' E
: A/ e4 c7 Y( V+ M! Q
export NGROK_DOMAIN="tunnel.bbear.me" # m4 E4 y5 Q1 ]: ?& T- {. V; I
tunnel.bbear.me替换成你自己的域名。 9 @3 {5 u- R- ~0 x( O) ^% B
2 Q2 k T/ Q9 W, `2). 生成自签名ssl证书
) P# ^/ Q0 d5 ] u# M' F& @7 o n9 \
- Y) X) W) W; Z+ mcd ngrok/ O0 l' K( x }1 E \" {
openssl genrsa -out rootCA.key 2048
2 z* p3 L8 A: \' o% lopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem/ x# j( p% F; B( {: i
openssl genrsa -out device.key 2048
: P; T4 q$ i+ `" d, l$ jopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
7 r3 \2 S5 f' Fopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000! C; `6 a8 @/ V. Q$ C8 l" h
cp rootCA.pem assets/client/tls/ngrokroot.crt
' \8 [3 @( ]$ x8 O2 c7 F4 @cp device.crt assets/server/tls/snakeoil.crt
. O- g4 Q4 [, K* G2 R8 Q! L, Scp device.key assets/server/tls/snakeoil.key " F# J: L' |/ f+ G/ n; L
! D7 S$ o: q# T' T$ T' a$ T X b$ U
设置变量:
4 B: x( b2 ]: o: |0 v: Q! I
, T" m! b0 _8 _5 M- d7 B) fGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 7 T( Q1 W" \( j
生成服务端与客户端6 z8 [: K! n- L' M
1 b! e* C8 ?# ~" ?0 i' u" F' D
make release-server release-client % J9 R; E0 ~, G: \7 \0 K
: V) C8 S L% ~7 U4 g注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
6 R3 B4 K" P* P6 o& T( r) v1 S: C. b1 S
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
: o& c4 y( _4 w8 P$ x ]/ j$ S0 u6 H6 i) G- P
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。& ^+ m# C& f+ G! q7 ~* l
$ u% I% r1 a) n- d# \4. 交叉编译生成windows客户端
, b9 R+ v1 | f! C' O, Y上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
! i6 E' a1 O, F2 i9 K& r# V9 }8 m4 e ~
进入go目录,进行环境配置
5 }' d; Z% a: N4 e, v3 ncd /usr/local/go/src/6 n: F2 f/ c$ c7 W# y ]
3 P# H* E$ \0 j1 t% e( [
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
/ A# A. y! {- P( I. W) n) t% v. q进入ngrok目录重新编译
! ~. u: [" Z7 c( T3 @1 L8 {0 b$ zcd /usr/local/src/ngrok/3 y7 i& ]2 s( ?5 [/ U; A
% r% B0 a" R1 QGOOS=windows GOARCH=amd64 make release-server release-client ) c- o/ u+ d, O/ ^ @+ m
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
: {' X+ v f( K2 a& ]
* H# Z: v/ t% M& l. h* G* S5. ngrokd服务启动与使用' M! _ l2 ~5 u/ [' w$ u: A
1、启动ngrokd服务端
) z8 w. }4 W0 m3 s" L1 |0 N! c. ?% Z |4 k/ r u
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" 3 b1 ]& w9 F: e+ m
注意,让程序一直在后台运行可以执行
" Z. C! V& D& }, n# }# ]) r+ b9 i) Q$ p" M: Q4 V
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
$ D+ K C* F& w9 @7 I! l& t2 i- C想要结束后台进程可以1 c" S& x4 R* z$ P+ H! \
! N1 g; ~1 p: J; f8 z! n" C( b/ A* ^# w7 Eps -A #找到PID
. q& U6 M1 y4 Jkill xxxid
- o8 m. B9 @0 c. o+ t" R ~9 N2、启动ngrok客户端9 J7 Y+ u2 j+ Y! |
9 O9 L& {# b: D( V# Z: r$ F
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置 j' X i$ w" D0 \
% K, P2 t/ |! L3 v0 L8 Z
server_addr: "tunnel.bbear.me:4443" 0 G3 q/ }' p. \3 G! F( _" H
trust_host_root_certs: false 5 J2 t; h) r5 ~* h. e8 B
5 C0 C G' N" c, h) S
再在windows控制台执行1 @, A+ l R2 m8 {0 E
4 [! H' r! V& Z( P# }- e7 e
ngrok -config=ngrok.cfg -subdomain upal 8080
7 S6 d2 R6 Z9 v/ [, {3 t
) h B4 {4 C' @4 S1 D. ]upal是你自定义地址。" i7 h: l3 P6 {9 D$ C8 d9 Z
看到这样一个界面就说明成功了 5 ?3 H; m0 Y% t/ h D
* f( ^# ~- f. m8 c( ^3 Y
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 . p& s3 c4 o D2 R
& d6 I' X; U! Z4 _1 g) ~. K7 s1 X# f' o- X
7 Y2 L6 W! X- ^) y: K
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
; Q9 H9 ?1 z3 M& D. z% w% K |