下面是我在阿里云centOS7上面的搭建过程。. o2 u, M4 q2 Q g$ i6 K( u* s
' K6 d, H- X$ _; H
1.go环境搭建2 {& Y4 q/ ^1 B {0 g% G
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 ! [2 V. x: x$ @! N k+ a: f
源码安装go的详细过程如下:0 ~6 \- M; J: E
k( M4 F( a" q5 l. m1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
) A4 n, N7 L; s& L2 q
- r+ ?7 U( a3 h' w1 K; [5 M2).将其解压到/usr/local目录下:/ P2 V# ^) y, z( G& Y% w0 o% ]
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz 8 l( l5 V9 z# p( V3 N9 C
' y& t" E1 {- r. g, Z注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
$ `0 ?) @* T9 w, e
1 K1 P* U. U! S- L9 _5 l4 K2 ?0 D3). 在root环境下执行如下命令:
. H6 K* C& J5 J8 I* [- tmkdir $HOME/go
4 k) j: @, l! k! L" Y8 n8 ~2 ~echo 'export GOROOT=/usr/local/go'>> ~/.bashrc $ U7 I" D" _ A; c, I
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
3 A. S! i, b+ R8 j8 ?/ K# H. o& Z/ secho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
: F& U, J/ N: k3 d7 ysource $HOME/.bashrc $ ~# C, r; ^% h- u' s, x0 s
% A) H4 @6 ~: Z4). 安装go get工具
: a! O n* ^: y$ lyum install mercurial git bzr subversion
0 N$ ~( t( o& Y# I) d' A3 t3 k1 w! a1 q+ X
2. 获取源码9 n! \7 h% E1 f& ]& ~& x! w1 k
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 ! s# u. g9 H, c+ b. \
获取源码: q* j+ |7 J; i8 U: k7 `
git clone https://github.com/inconshreveable/ngrok.git / {8 N% e0 H9 [
- c; @5 }+ E3 \2 m5 G3. 编译
6 H& a$ S( Z" h6 C7 k
2 Y, r, j0 `' v z* a3 H- |1). 配置环境变量
@. \# r. e6 f( N% n- O; x5 u
( w) J7 \$ [. S2 `7 g) Cexport NGROK_DOMAIN="tunnel.bbear.me" ( d0 f5 r7 U x, r7 g6 p7 E ?) R- f# u
tunnel.bbear.me替换成你自己的域名。 ) o; z" G( G4 v; C
: I0 C# ~ G# m( I: S3 M) ]2). 生成自签名ssl证书! T4 A4 e. L9 Q* b: }$ c) \
, f4 R. e8 X2 b4 C3 I
cd ngrok
( [; |' Q" |5 qopenssl genrsa -out rootCA.key 2048% k2 W; L0 [) H0 o, L! Y; A8 ?; r
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem( o/ a* p) v2 l) g8 s/ T! ]3 D4 x
openssl genrsa -out device.key 2048* _6 }- Q0 Z+ S3 u
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
6 \) e# a! h0 r* @7 iopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
2 p/ h& R. `, Vcp rootCA.pem assets/client/tls/ngrokroot.crt( ^1 \* G0 b2 o1 `
cp device.crt assets/server/tls/snakeoil.crt
4 z2 V. D# V4 d. a! ycp device.key assets/server/tls/snakeoil.key
! }7 t" `" l$ Z7 v1 @6 y
* j2 l! M3 L, @/ \; f! J设置变量:% b" k$ n1 F) F U! ~3 v
3 _8 y3 R- |8 g# u' XGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 % u1 ~ p4 T/ _- o2 g7 E
生成服务端与客户端9 j7 |5 |$ Y# `6 i4 W- e& z5 G
% k8 n9 Z0 ?8 j0 h6 c3 b) ~
make release-server release-client
% L+ r8 n5 b- {4 H. \& _: Y' L' V9 B: k& }- W
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
& l$ L u3 m- F5 C. u
' ?# O' w; j4 u' _0 ]找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。' t& C; M3 R, \2 z: o
' D+ u2 L# x ~: [% d l9 T5 r) B9 A
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。1 ^6 ^+ x1 z6 e. n
% W& w3 J; \, d! k# l. r9 V4 D4. 交叉编译生成windows客户端/ w" Z# B/ p9 @( f) t- y# p
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
{1 \' B6 i2 M+ z$ \; W
: N! I: F: a6 v: t& x( T进入go目录,进行环境配置
% z7 A& R- `( \3 \* @ scd /usr/local/go/src/
; ^" I1 B3 L6 U! \+ n; u% s: _6 H$ v2 d
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 4 T8 ]4 Y0 i. ?3 I( n! Q0 Y7 d
进入ngrok目录重新编译 H1 ]9 C. F& L: I4 q |
cd /usr/local/src/ngrok/' S' u/ c' y) W/ f
% |8 `, D: ]5 D
GOOS=windows GOARCH=amd64 make release-server release-client
; _+ u; G$ v2 l) k! Z4 c! r, d编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
9 M b) k2 J; H0 h% ?# d, }: O+ a$ n# p/ `
5. ngrokd服务启动与使用
' X% C# E8 Y7 `. P( D1、启动ngrokd服务端7 Z: }* m0 d8 ^/ _
: r9 }4 J6 N; ^$ [0 p% b* Xbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" * x8 S! t7 a b9 v7 e9 M) |
注意,让程序一直在后台运行可以执行6 x; H# j8 w% D
- a0 o) O& J3 |
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
Q! L/ ?9 s. E% U想要结束后台进程可以
& R* j- ^& O: x+ O
0 o$ [0 P, `0 |9 a- m# l6 |ps -A #找到PID
7 j8 {( Q: x5 A1 ~ r" X/ Skill xxxid
3 z4 b* C! S% Y. D8 Z" ?0 E2、启动ngrok客户端
9 K# N" F. r a' U0 E/ Q/ j$ e7 c1 l" C( L M! Z3 _. B8 B
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
7 h" Q5 S2 ~* L5 t5 p2 n, J
- N+ t# s v+ B- sserver_addr: "tunnel.bbear.me:4443"
( N( J/ v3 V4 j: i4 `trust_host_root_certs: false
$ E3 ^% h- e/ q5 {; n
) R+ Z) r0 ~0 ~! h再在windows控制台执行
' }+ f# V# J, L o, P* f# b
- o8 \ a" a- fngrok -config=ngrok.cfg -subdomain upal 8080 . `! b I( f/ o8 `- H& B- ^
" C- y5 z4 \" m. \) i% B+ uupal是你自定义地址。/ Z0 ~. O9 v; I; O P- t. E
看到这样一个界面就说明成功了
/ \8 t2 h0 ?7 g5 G3 L/ C+ i
9 h. e* {. U1 S, t; q如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
0 c8 A, j4 C+ b) j7 w$ t1 l. v6 m9 p( C! l3 ~1 Y1 i
8 C# \) W+ ~. L" n: U6 V' |' p" z/ x8 {' z, d. Q* U3 a
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral, Z3 ^0 M) a4 ~& b4 B# ?4 B5 \& n
|