下面是我在阿里云centOS7上面的搭建过程。
: U+ e2 @8 `+ a! Q) Z. V: r
% W7 B+ X3 m' q& z7 e: q4 E8 o$ w1.go环境搭建* w. H+ K( l1 G, o. e! a, r) T+ M$ J* S
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 7 D" X1 L& f) r% k& a& U* A0 X5 Y- @
源码安装go的详细过程如下:1 t, y4 L$ O$ L" t; [5 i
4 B* |5 H! w+ A6 E1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
7 V2 N8 n; o" m( f P% b8 [
& ~' u6 ]0 K; q/ L0 ?" A* F2).将其解压到/usr/local目录下:2 |4 Y" {+ G7 M+ G3 J! T
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz ! _; G: I+ y2 ^; b- d! ~" z
4 g, J6 Y& C6 X& \
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。( E* C Z+ g0 w1 C) b
3 M/ a" y% _9 ^$ J8 z, ]3). 在root环境下执行如下命令:
/ E# d5 P) T+ L. ^" ^, Z5 ]mkdir $HOME/go 1 G h) G4 G F* _' Z) k' V
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc ( @9 o4 }) H: b, u# }5 A8 p4 @
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
# O1 l1 Y# ?& M/ r2 ^/ Zecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc , x/ w9 W4 Z) t- c8 E. g0 y) K
source $HOME/.bashrc
5 T6 x+ I+ p' ]) @+ q) X2 r i2 U/ I% d3 K: N' I1 d% m
4). 安装go get工具
0 t/ ^# v1 v. `9 _8 Dyum install mercurial git bzr subversion
% x: }# v; c7 O. d @
$ t6 d% |7 P( k/ S9 o4 A2. 获取源码
# c/ D1 x' D: {& L& L; {4 Ugit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 7 n2 }8 Z" {7 |9 ^ l: s, e& }
获取源码:7 P4 }3 a' Y, M# P% z; F- W
git clone https://github.com/inconshreveable/ngrok.git
8 O/ K4 v* l8 |% ~- i4 ?' b! b
1 g9 T. X8 K0 H$ i) n) y' p3. 编译, g: E: ]2 @) g1 X. H
7 H& H; C1 D8 f0 y1). 配置环境变量
1 f. Y9 w7 B& ~
. s! m: A" B0 }, Gexport NGROK_DOMAIN="tunnel.bbear.me"
4 T: b( l, Z% }tunnel.bbear.me替换成你自己的域名。
: {, ^2 D) C4 b) n
- g& v, x9 @9 W# C! x# G! ~2). 生成自签名ssl证书
+ }* w5 A0 }+ a5 R
) G. O' j5 Z2 |! M! g. Fcd ngrok5 @% x" O9 o T/ l" C! ?0 A
openssl genrsa -out rootCA.key 2048: A& M# D) i& o
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem+ @4 |, W) j2 D$ ?, d
openssl genrsa -out device.key 2048, g8 C4 n* c& ^( Q) s% ^; w
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr; {+ t9 v# |1 _
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50000 l! D# |, @- M# N- ]
cp rootCA.pem assets/client/tls/ngrokroot.crt' ^, r1 m. E+ H1 n, \% S' h' O
cp device.crt assets/server/tls/snakeoil.crt: Y1 R+ q' ]% \; l
cp device.key assets/server/tls/snakeoil.key 6 ^: C3 K6 H# u9 x6 Q5 L8 Q7 Z
1 A& O5 Q$ L% p; ^) q8 t设置变量:
9 t8 {! a9 ^/ h% X: A/ T; I5 G |5 S D- }
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 3 [1 X/ E! R1 B& R4 }/ I: A2 ~
生成服务端与客户端; \5 G& d- r$ ]& x% u
* c; b8 m% \. W; x) Mmake release-server release-client 6 I3 q' n0 h- ]' E( p! \; N @$ Z
) q/ M. B" f. o/ g: V# E5 v
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:/ U0 l2 D# `% |- w; J
" a8 c7 W8 v( m# j1 X
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
0 f* M* t1 L. |( G0 e8 i5 s. I/ h9 j% S
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。: H- p$ Q3 E+ |( l
7 \3 g& [% C6 h# {8 @8 M) O4. 交叉编译生成windows客户端
0 m: U' w5 Y( \, B( v! ?) j上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:" r! J, D/ ^: l5 _0 v/ O) W
7 X+ Z- w7 |' q7 a! `: y进入go目录,进行环境配置
% K: ]9 \( d- `5 S0 J- W& J6 Gcd /usr/local/go/src/
* J5 S1 R/ x5 }, Y4 ?6 G
5 Y4 o7 B* Y9 J' v0 @: zGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash $ T1 ]; W, B1 y7 C/ D" T/ m0 W
进入ngrok目录重新编译
* D! x( d' A; `3 lcd /usr/local/src/ngrok/
1 F9 h, j& H( v6 Q3 f, M
" {& P4 m6 X. k! L, r6 `GOOS=windows GOARCH=amd64 make release-server release-client
5 Z5 p3 ~0 D: S& y/ p编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
1 g/ }, J3 D0 h3 Q1 s5 }7 l
0 ^. Y8 c. a- ?3 u4 t5. ngrokd服务启动与使用# ~ E5 `1 p# h% g9 b) J/ P4 n& ^
1、启动ngrokd服务端. J& V( v! F- l+ ]
) z! f" ~: W! N0 obin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" * z( I. s5 @0 A% l1 r
注意,让程序一直在后台运行可以执行2 q/ m& g9 c( p! a* g3 t9 P# F
2 v8 [* G2 D3 O, [8 Z+ C9 |# b$ t
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 8 k- q- D. F" P& z# w# h, k* z& F
想要结束后台进程可以% B) O) F0 Z6 y& Y0 i' {6 T
5 B; o- U+ r% K2 t+ u7 @
ps -A #找到PID
! G" l6 {: y- ekill xxxid , D+ F* k3 F A& W. q+ b2 A6 }
2、启动ngrok客户端
, P) \$ }6 u, `$ n% l
[4 ^4 y8 X9 k( e6 {# `% s+ ?客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
1 L" U( A+ _2 {2 z/ d/ p9 O0 e* x4 Z
server_addr: "tunnel.bbear.me:4443"
" E2 p: z9 g; |) ^/ ?3 Etrust_host_root_certs: false
% y$ g E" c/ f, T+ U& @* M( M' n! q# F p' o, x3 \
再在windows控制台执行
6 E4 f3 e! g2 f7 r b# |: B$ z5 B' M. R/ R* Z, i3 v$ }/ t) C
ngrok -config=ngrok.cfg -subdomain upal 8080
2 V$ d+ W$ [- O# S5 }6 P h- B( ]- c. L1 M2 ]
upal是你自定义地址。
! P( x7 L5 w' l1 }( h: R看到这样一个界面就说明成功了 9 `4 M5 p) [& z) T$ K+ j$ D* V
; }% u( p6 ^2 _4 y' u1 K
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 + M9 M* i1 c5 D ^/ F* }
- j6 W% ^# l$ K5 S0 r1 H1 k
" A1 B3 S) \* W' K
* s5 ] T2 T3 g/ w. z原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral/ E& h. N- Z5 f5 b$ `
|