下面是我在阿里云centOS7上面的搭建过程。3 S/ ^# \8 D v/ ^, C- Y6 R: u
; `- P5 {7 L9 O
1.go环境搭建
; L/ [9 |9 T8 B5 n+ Tgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 6 X% d4 V8 P1 x! G+ y
源码安装go的详细过程如下:
' G( T0 S% m+ V0 W1 h$ X" w
, X6 b4 j: n6 n! r1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。+ [ n0 S* k0 b! O) Y& \0 G
0 E' a' N! Z' d- @& O
2).将其解压到/usr/local目录下:
& P0 u! ~* ^8 w' `4 btar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz ( h& f8 K' F# B. D" j+ o
- _7 {# [4 _. v0 |注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
5 w2 B P# Z8 c# [2 R5 ~. E$ ?
* {# j6 n: I8 d- z0 C3). 在root环境下执行如下命令:
) ~! \: F3 s! a% m8 ymkdir $HOME/go % \ c0 H0 @( B% k. a' G1 A+ ?
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc * w( o" B5 j5 o& a
echo 'export GOPATH=$HOME/go'>> ~/.bashrc X+ L3 J* k! J6 J+ F# G5 X ]
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
8 J- R n0 w/ Xsource $HOME/.bashrc . W) a/ `# W1 }& u; K' k0 t3 R/ m" L
- L- y$ Q- p3 q- I7 }1 c4 a5 [$ @
4). 安装go get工具
, D) ]5 {$ N# \. d. @1 [ Pyum install mercurial git bzr subversion
4 T; B* t" o: m# V% |: S% P6 \" U$ M
& V; M7 ?; }& b7 V. i/ W7 ?2. 获取源码
2 \; t$ F$ P/ d' A" ugit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 9 ^$ F$ j* P. }# o9 @
获取源码:; V5 y h: v' Q* w4 O, N A
git clone https://github.com/inconshreveable/ngrok.git 3 w. H, C, E, C! D9 r
0 b3 @; N/ r2 v! I/ X
3. 编译
7 B4 l M: {! M: T6 @4 u8 O$ j( G
1). 配置环境变量
- |* o% H# O: W* o, g6 B+ ]: T [% J0 B
export NGROK_DOMAIN="tunnel.bbear.me" . K+ F: x& N5 P" _7 ?" q
tunnel.bbear.me替换成你自己的域名。
$ c5 F9 R( z& r2 J' ]/ I9 L( y, ^) g$ @8 Z
2). 生成自签名ssl证书. C. l# A! y2 B2 r Q: B
; j, }+ A6 z% X; T! o# z; |. Y- ycd ngrok, _9 L4 N% x! i' t5 I2 Z
openssl genrsa -out rootCA.key 2048
2 c2 N; b9 {/ X3 \, q7 |openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem% P+ W& {; u$ |
openssl genrsa -out device.key 2048! b. q0 L3 [" t1 Z; H( s
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr' Q" t! [' N6 O( S% a9 j
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000. x G; j7 t7 V. _4 h3 ]' P
cp rootCA.pem assets/client/tls/ngrokroot.crt& x2 C2 y( w. y5 r$ [& @9 K; ]! A
cp device.crt assets/server/tls/snakeoil.crt" [7 f7 F4 g: e! n' Y m3 i; [ e+ z
cp device.key assets/server/tls/snakeoil.key * d) L$ [. z, ^" K# X
- T8 i% M: ]4 W2 N设置变量:
4 r1 t* _' [+ i/ p6 D) n/ f8 [2 }9 D N! N5 w6 w1 f
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
0 k7 ?6 I: V3 G! L: `6 x4 h( N生成服务端与客户端5 \ L) q* l$ _3 g' E- U
- N- H \8 W! X4 |% s9 Z$ imake release-server release-client
5 F4 M' O8 [6 Q/ m( G" Y! N- |5 s [; @2 Z: u" |
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:+ f, h9 e& w6 t5 O3 f% ~
2 V$ X, E! L( R
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
4 A2 O2 q4 w3 j% R0 R: j- {- l d7 z( h& ]4 {! W6 A, N" y$ f
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
, F( ?2 ^) D% y' m5 E
3 h- ^5 V9 a! u" z% Y/ m9 U4. 交叉编译生成windows客户端
6 u. I. }; X- I/ x5 N0 @7 t& E, j上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:8 j/ y: L* U/ [ e* _
( X! {- G1 Q/ V( r5 l
进入go目录,进行环境配置
0 E- d. a6 Z, Ccd /usr/local/go/src/, S$ U; h5 X0 i3 ^* K
! |+ P9 O) }6 D+ ^' S E( \2 E3 _
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash % e0 u1 F2 m( F& |* Z1 l$ C3 D5 e
进入ngrok目录重新编译$ J% E# G( d1 ?0 h/ V, ^, D+ h3 \
cd /usr/local/src/ngrok/8 `; y8 d4 U/ N* D. {) u v
9 h0 t8 K1 S, M1 S# S* u% O
GOOS=windows GOARCH=amd64 make release-server release-client 7 \ A& c3 O/ I+ W9 [
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。7 x. V0 V) _0 Y
7 o- ?8 M1 Z: s1 N5. ngrokd服务启动与使用+ M4 M5 m! j* s8 ~& \& ~+ l# V
1、启动ngrokd服务端
# V4 f9 m6 q) H
/ O$ W2 g$ C4 @7 b# R' X' X I! m. G" Jbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
; y( C6 t6 {" Z/ i e3 G注意,让程序一直在后台运行可以执行
, X* q! L0 T. }5 p5 Q7 b8 F; n9 H a" J/ f
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & ! |7 ?4 p3 M: t
想要结束后台进程可以
& j5 [, @1 J" m9 Y. ~2 A; C: T& O m) Z9 o3 c( l. ]7 q
ps -A #找到PID $ \& q( ^7 {) [9 s
kill xxxid
0 s# M, @1 w" R! m" h% Z) r& ]2、启动ngrok客户端3 q. m3 m: b7 d0 ?5 e8 R; o
" x" r# R% h( g; F6 |2 q
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置. u5 M8 b! L5 _2 r' G3 H
1 z$ I* _9 E/ z
server_addr: "tunnel.bbear.me:4443" , Q' ]1 J. H1 [1 K1 T
trust_host_root_certs: false
( G) _2 C9 g4 y8 C& G7 f7 w4 B* D3 N4 U2 @$ T2 a
再在windows控制台执行
) P9 h: m" k" d: g- i1 h- |% n( E6 R% ~+ f0 z+ F A5 F1 V# l
ngrok -config=ngrok.cfg -subdomain upal 8080
) I, @5 o, Q( R9 O7 e a9 |
]4 G" X. H& }. i. P' p( J; i+ fupal是你自定义地址。
7 w" C! k3 G% p看到这样一个界面就说明成功了
2 x$ w3 x4 k; L. g# j8 v( R% ]( t, j% O9 ]! s I/ y% O5 L
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 % |" H: v$ v5 W. _) J
: E! c1 p8 Y I9 C
) T9 U! Y: M- H8 ?% J/ y! K1 b9 p/ N9 {3 h$ _8 W
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral5 [4 x0 [% _3 X, ^
|