下面是我在阿里云centOS7上面的搭建过程。
# m! Q5 c+ J/ v5 R, [1 Y5 Z
/ \* H* |# [. t4 {1.go环境搭建
+ e+ i: \" D+ y* P1 r$ Q1 [( }, Qgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 0 P( p7 v- P. U l- @' K
源码安装go的详细过程如下:# m* P6 q6 f) L
( k. J$ M; k) G5 g. T. E. U5 {1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。4 z6 d8 J0 p% k* I) m& d0 P& q
: T7 T, x# a( b; s1 M9 \) V2).将其解压到/usr/local目录下:
; ~0 N, R, f% P* ntar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz L7 |" m7 ^& v* Q% J1 ^2 ]* W
6 F: u7 r! j4 `# P: g
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
2 y' N0 q. F" Q# O6 V- u
4 @! g4 n0 C6 `$ w5 [3). 在root环境下执行如下命令:
) t' Z1 @! \* A4 U: y" [mkdir $HOME/go " S; Z# x# e0 q& Z3 ^
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
7 V( K4 k$ W. t/ v hecho 'export GOPATH=$HOME/go'>> ~/.bashrc
% z4 E4 X2 ]- J: _9 _3 U( G: Secho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
. S! V+ P5 c. }+ _) W, H( ssource $HOME/.bashrc
, J# f# j6 U5 E" z) {* G, c0 W0 H4 j6 x' r5 F
4). 安装go get工具3 p/ V9 ]& B/ {. @2 _. D' Y8 g& g
yum install mercurial git bzr subversion , k/ h Z3 ^1 ]( h* ~! u$ I: J
! Y0 u _9 E" X. U7 P. @% G2. 获取源码
, l$ x' B0 _. Z$ H* R Jgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
, ~% h% }4 U0 T F: S! ^获取源码:
. m0 G0 m9 L: V$ f" u0 s8 a* Ygit clone https://github.com/inconshreveable/ngrok.git ) I$ x" C6 h6 r2 P/ n: a2 h1 F) y
* u+ V/ k$ E2 K/ T& w
3. 编译: V7 C& d4 c) v. j' T
$ y& ]" C& j& q
1). 配置环境变量2 @" N3 `% k6 }
; _8 D: `) ]' Z ^9 Y
export NGROK_DOMAIN="tunnel.bbear.me"
; s- g+ ]& Z& O: A" ~' v" Atunnel.bbear.me替换成你自己的域名。 8 S6 \" f! m% ]. R# L
2 X+ z% r* F+ ]# L2 K2). 生成自签名ssl证书
+ k+ Z. Z, Q9 M% n% D: m
1 o* `! Q5 Z4 I1 `, J# A4 t. ucd ngrok
7 t% g- J8 M7 O+ ]openssl genrsa -out rootCA.key 20489 d( m! s8 b* k# B5 X6 ]0 R) l
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem4 m4 E& D' x; B/ H6 g1 r
openssl genrsa -out device.key 2048
9 ?* P+ C+ `2 I% `* X/ m! T% Dopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
' ]' C4 B% a: Gopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
" r6 f2 n9 L, X7 X, T" y! Gcp rootCA.pem assets/client/tls/ngrokroot.crt, p. p+ L; r7 r& Y
cp device.crt assets/server/tls/snakeoil.crt
, F6 l9 E g# b+ jcp device.key assets/server/tls/snakeoil.key 6 D6 F* U. M7 t& r5 `/ d6 ^
8 v+ g% M: u7 @6 Q& W设置变量:
' C" F+ t( u/ M. i# D$ O# J7 t" W0 W! b: V/ D
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 9 c& P- K* j1 @3 S% |
生成服务端与客户端
5 y2 H! O8 r# d! u# {
4 a' ~# w3 V7 {( {make release-server release-client
& s% s+ i% Z. ?( A ?9 T6 y
( d- A9 _( S, v* E' i注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:. b# W; z& _* m# b
) F r# u$ c0 k! }1 o5 A
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
5 W4 t. P3 B9 t/ W' ]$ `
' H8 ^1 _9 e" c9 E( Z编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
* _* S& _4 ]8 o' ?) D9 L/ l7 A
% K) d6 G" A" L; |% e4. 交叉编译生成windows客户端7 s% y# @) M" m' E, R( Y" x+ K
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
! K; G, I: q: p$ c! g Z: [+ | x9 i3 T! g: ^4 }8 p3 \
进入go目录,进行环境配置
) U( w+ \0 R$ M. ?1 ucd /usr/local/go/src/5 m6 p! c) o4 e# s U6 b: p4 c
# M! l3 l2 H; M0 Q1 CGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash ! g% G$ Z7 S3 Z K3 B) G
进入ngrok目录重新编译
' m4 b' n5 _% C2 ~cd /usr/local/src/ngrok/. b& t6 G0 F$ R. ]: l
% Q9 y# O/ y/ _GOOS=windows GOARCH=amd64 make release-server release-client ; n, K0 Q6 p* c, x
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
' d5 r8 s/ L2 h/ S. c* Q$ y5 }+ O0 ~1 Z5 ~$ ^
5. ngrokd服务启动与使用4 b; ~1 Z1 v; L9 q$ x# [; }% c4 {8 H
1、启动ngrokd服务端
3 }7 _5 A/ z$ E2 c: u+ G5 ]) p* X4 b; z1 ~3 X* g+ j! B
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
/ u+ g' ~, W9 H# f" ^, M/ F注意,让程序一直在后台运行可以执行2 w. m/ _ E+ k% p& g- Z. a2 L
9 s) A) s9 J8 `( N+ O* P4 o; e; L8 @nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
! D D- c8 V$ w- x想要结束后台进程可以
' i! s: w4 k4 u( Z+ E3 ~/ ]9 k. y) Q+ x# p9 u( L' F
ps -A #找到PID + A* ?! U: Z) J, C
kill xxxid
7 ] u o$ J4 K! L6 h* I2、启动ngrok客户端
1 i- V& Y6 [3 y, n. }5 [3 G& z4 S
" f. S/ g4 t, z. w+ `/ K9 d客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
4 |2 W* w! W: D* V0 X5 |6 l! y0 \
% Q" f6 Q1 @4 |$ R( n$ eserver_addr: "tunnel.bbear.me:4443" - w# S- U9 u$ z7 Y$ @. { T; t$ t
trust_host_root_certs: false
. W% g8 N2 A# v! j6 K& L7 b
# f* E! ?( ~! d再在windows控制台执行+ W, L+ l6 x- @. M
" `( s/ e$ l9 v
ngrok -config=ngrok.cfg -subdomain upal 8080
% t7 I. d* S& e% g: L% n$ q5 ^
upal是你自定义地址。+ w$ \ a4 [5 M' b( j# }# T5 n3 [
看到这样一个界面就说明成功了 0 d6 Z7 g: t; L
5 _# H8 m3 H9 d! v2 N
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 ) A8 K/ R8 I( ^0 V1 h/ x
$ T7 H/ {: \+ \6 U4 X3 T: v8 H: U; y9 n
- W! D2 u, c" T& y7 ^* K原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral" z, K+ X" }* V/ j! T& M9 ]) L
|