下面是我在阿里云centOS7上面的搭建过程。
( | n: S0 D4 O" U3 A* G' s. K" M4 G2 k0 @. j7 K
1.go环境搭建 a0 h; |/ D& c% H; q! U
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
9 U% A6 c7 O3 u; P' c$ Z/ i1 J源码安装go的详细过程如下:5 J3 `: o f2 r& q8 C
s1 `& }. B+ g9 [) D, B; P9 ^
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。/ B8 T e. l2 x: @8 E3 Z/ _2 F
* B6 Z9 E& d4 D6 ]5 f( A3 ^3 {2).将其解压到/usr/local目录下:" A' o3 i3 s; H
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
5 M/ D$ z7 z4 @) ?
* w: x X& }, y1 ]( Q1 W4 r% X注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
( b% w8 I' a2 }/ f7 X# Q
, W5 R" ]) @- t) U, ~* ~3). 在root环境下执行如下命令:& i+ B% t8 B: g" s. X4 m1 K
mkdir $HOME/go
: U0 Q+ f* U8 e' k4 H Decho 'export GOROOT=/usr/local/go'>> ~/.bashrc
, R$ M3 @2 T" {/ |. O, gecho 'export GOPATH=$HOME/go'>> ~/.bashrc 7 H2 Y/ i* y/ h, W
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
+ H( l8 L% U% Q: U' p% |/ usource $HOME/.bashrc
8 }3 x( A5 @5 @7 [: }' p% X8 c d+ w9 e" F0 Y0 T5 [
4). 安装go get工具
9 h8 x, p8 W4 \; yyum install mercurial git bzr subversion " j+ P" M3 }' H% X! @) e
9 K$ I0 @8 ]" |+ q- R2. 获取源码
! t7 M* C+ d( r. A8 d8 k: G* ygit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 9 W2 E B+ n- v
获取源码:
" _+ x! u1 `2 o. Hgit clone https://github.com/inconshreveable/ngrok.git
2 D+ b/ B. D/ J2 g/ H( Z4 c9 l: C
3. 编译
3 _9 r8 @( x3 K+ o- F0 P& a, G3 B. N( |( W
1). 配置环境变量: F4 Y1 Q7 s6 Z7 j9 v$ O# V
4 z7 V+ p* d6 {) S8 t& u6 Jexport NGROK_DOMAIN="tunnel.bbear.me" % I$ @" S7 V( I; m) V
tunnel.bbear.me替换成你自己的域名。 # @. K8 ?2 u' l F6 w U9 c; A
' D' e; n: @! z7 r; t+ Q4 D4 J& k: J2). 生成自签名ssl证书' z$ l: a' P0 x; }
, [$ }+ q3 `( _6 N: B" J7 j
cd ngrok, Q8 }% h$ g. P0 }6 A5 T7 }
openssl genrsa -out rootCA.key 20488 R, S4 e( q) _1 X m5 T8 |) j+ ?' P
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem/ W" I3 d) |) I4 n
openssl genrsa -out device.key 20481 v! R, X7 d! L0 O5 U4 I" I
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr: F/ K% E8 M3 m' \9 {" V( b! O
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000% t4 b, E+ k/ i, m2 U% J
cp rootCA.pem assets/client/tls/ngrokroot.crt
/ Z! y- |% t& N6 ecp device.crt assets/server/tls/snakeoil.crt1 z' @% v3 m) ]* Q% ?! _
cp device.key assets/server/tls/snakeoil.key 5 V" a+ C* Q' g/ w
2 f2 ~3 c9 y+ _4 z( \% c设置变量:
; j: D' e. e1 r' O
) u% H* i: X2 S- M+ L0 v4 T6 FGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 4 n9 j6 n2 h: V; s6 w' e
生成服务端与客户端
8 d$ s! j7 [4 ~ F* B5 U( H8 H1 Z0 r L" n+ H; M3 _# z
make release-server release-client
5 N1 O- D) G" l; q
! n/ O+ b1 b) Q9 v: p( Q注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
' I. Q8 m# H$ k& s+ c
. g; p2 T9 ^& n8 n找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
2 l, @ {& _8 L H+ l. t9 L6 w( k( e% O! l5 ~3 T3 ~- ]
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。; f& o2 u; s( f! L
% O( F% ^1 j5 y: b" \; q7 ~6 u
4. 交叉编译生成windows客户端
) ^( C o& N* {6 g f上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
+ Z9 g( f: L% O7 e, u0 t( T% L; [9 h3 X# q; @" M3 c# W
进入go目录,进行环境配置
* b, S1 O0 x' m3 Icd /usr/local/go/src/: `7 [9 g% t# e
' ]) H& |5 f& |, @3 yGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 8 ~0 I" r0 c. R: s9 T
进入ngrok目录重新编译2 Y5 F8 _" O* o$ [* G. L# @
cd /usr/local/src/ngrok/
* `* j6 a' Z, Y- T6 x, x) N9 n# v1 ]( ~, h* o. D& k, D4 P
GOOS=windows GOARCH=amd64 make release-server release-client
' Q+ I0 x0 g; S. }9 R+ n8 W1 j1 P编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。& H' v+ w# Z, l3 O5 S' A& N- t( J
4 g; y* Z3 R. F9 r8 a
5. ngrokd服务启动与使用
1 J, ~& n7 O0 s, [+ y; J1、启动ngrokd服务端
' K$ s$ ~& ^' L" T! \' P
( W- ^! d) F# Z* L; L* I5 tbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
% [% y! y9 j; Z* X- X注意,让程序一直在后台运行可以执行
2 F4 m6 p: t: T1 s% N
- q4 p* i1 t# ]" @9 ^# Q$ ynohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
9 {' }0 T+ a- g8 M# N想要结束后台进程可以. W" h4 V" X2 h9 }
+ `/ ^/ `- T9 R. Q) y2 S7 n8 lps -A #找到PID * W' x) C/ [. i9 U7 ~$ \ S& f& X
kill xxxid
" W/ k% @- R9 A7 Q- H2、启动ngrok客户端
+ S1 \/ T. c; h# e7 D& w4 N8 g8 C2 V3 {$ V6 z* S7 b9 [, `
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置8 D, P- I6 h; f$ c
) K! z! z, ~" w- L
server_addr: "tunnel.bbear.me:4443" ( o, k2 }; M& w; ^) Z
trust_host_root_certs: false 9 y( d/ ~( T$ h2 O, S; R3 V
; M. ^ S% \3 H) a+ A: Y: f4 D再在windows控制台执行* I& w- |# C" b. ?
0 b2 G) K; N; z! Z# @: j! vngrok -config=ngrok.cfg -subdomain upal 8080 , p! X( r% Y5 U. O
) ]6 R+ l0 T5 d2 t5 [
upal是你自定义地址。) R. d! J d9 ^
看到这样一个界面就说明成功了 ! `! d) M3 _- u8 _' }0 ]
8 Z, H& k, H7 n' T, B; Q+ t' }
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
9 I) I7 z9 [0 f9 B' t: E& F. ?6 J. [+ ~# B: v% P6 W/ n8 v, m
5 j5 L) p0 |6 O j' u+ E: Q; L5 K- F) a: S% j
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral5 g0 p, U9 Z, M
|