下面是我在阿里云centOS7上面的搭建过程。# ~+ K7 `0 `/ N& N9 x+ _
! t( y. {* y! h0 f+ L
1.go环境搭建: q- N9 x+ u' e% Q' x' Z. }3 v
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
% [6 R/ v: U2 X) K6 U源码安装go的详细过程如下:
1 j" x# Y6 J4 ]! n7 l. L! e# O6 X7 _# D9 r
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。( Z- J( L( i0 x3 }3 U( y4 n, V
9 S# y" y+ F4 p- _0 [2 r& ^2).将其解压到/usr/local目录下:
0 p# y; i5 x |) D" Itar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
) @" o- |0 x9 O3 D" B# O9 y: w7 u- y ^! P& M
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
, K. J2 O' K8 [; X$ I& B# g, M( [
; {1 y$ l% a, D( |: ]3). 在root环境下执行如下命令:) x H! r" M O) ?7 m, V4 M/ F( u
mkdir $HOME/go $ b" x8 s) p( ]" M4 ~& q
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc 2 _: d% k7 Y9 N* X6 {7 `- q
echo 'export GOPATH=$HOME/go'>> ~/.bashrc ( _; g5 l) `: J; v" J* B5 `
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
1 p9 g/ j1 m- s3 a0 Y, t) _ usource $HOME/.bashrc 6 K$ h3 c4 R" D+ C& Z. J
1 C+ ?3 C; ]. f& R: n7 S4 Q* v
4). 安装go get工具, I2 a; ?+ H8 [" ~6 `3 i
yum install mercurial git bzr subversion
, d. K% l; g( R. J2 r6 K1 a- o
: a* L8 }1 X* d4 A% J2. 获取源码! S0 e2 f/ l4 S$ l1 X. U- v
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
+ @3 ~0 B7 ^& h获取源码:' O, k5 e* F3 O! X3 _
git clone https://github.com/inconshreveable/ngrok.git
, C" I& ^" s3 l: Z$ S6 n; v( m: U: t" n5 e# G. k$ T& U5 B( x
3. 编译
7 x; V2 }) M9 c# F2 k% a7 |+ \% z7 @, z0 X- e0 _
1). 配置环境变量" F+ f( K+ H, b8 y- N
2 J9 k! v% ?! R8 C4 X: fexport NGROK_DOMAIN="tunnel.bbear.me" ' E9 i( i: D( l/ x( U+ U, l
tunnel.bbear.me替换成你自己的域名。
3 o; R1 G3 j6 c! l- D0 K
; @* w; L, t9 V# L2). 生成自签名ssl证书
# X# A9 J6 Z) E/ f" s
, W# {+ |: l0 P E7 Y1 o! Ecd ngrok% P( j# p, S- x* @
openssl genrsa -out rootCA.key 2048
( R6 ~7 s( J- V3 aopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
' ^. e! {% m- l% A yopenssl genrsa -out device.key 2048' X$ }! r- b9 J4 L2 ]. U4 e
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
; M# i5 m8 R9 b: Y6 @openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
6 J. p. `9 v! X: _7 fcp rootCA.pem assets/client/tls/ngrokroot.crt2 u% I" [5 A. Z( i
cp device.crt assets/server/tls/snakeoil.crt8 A* v, j; J6 a7 @* ~1 R! s: c
cp device.key assets/server/tls/snakeoil.key
8 ]1 K% M+ K' |
/ z6 q9 W8 b/ X设置变量:
& x( ~7 z0 J" ~ M9 [3 c1 e* V/ a0 O* l* U2 ~( s9 a
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 ( a( Q# \- Y8 |& _
生成服务端与客户端5 ^4 X k% e9 z
6 S4 D! T* b% \) N0 |
make release-server release-client
' I1 }" ]4 Y! i8 U( e3 c& L5 k- ]6 X+ ?2 ]+ k3 c
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:4 j! W5 ^7 t, Z9 {: {, K j
# f4 |" |6 k6 V找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。% {9 O! A% t2 L/ r
$ Y) G) N( U3 [# Z# c
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
: F' K1 D+ _6 l* a* G) X! T/ v( b3 ?) o+ S- o
4. 交叉编译生成windows客户端% v3 ~7 k( X) I$ Y* ~ E+ u
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
5 X" f2 ^) k: f$ p% g5 J2 L, [3 K* y8 ]7 F" ?" I+ y
进入go目录,进行环境配置4 ~% J C( U2 S5 C: F
cd /usr/local/go/src/
4 y+ M% N9 I9 f; h- z4 s- g. ~5 Y/ k$ K+ F
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash ) {/ ^4 x: Q7 H" e
进入ngrok目录重新编译6 i: l# ]& q* _
cd /usr/local/src/ngrok/0 R3 ?; m1 \& ^! d$ S
% @% f- k+ o6 e; \GOOS=windows GOARCH=amd64 make release-server release-client
$ X2 M. K& w$ Y9 @2 F编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
O, R* A0 M: E2 G( i4 O1 z" v
5. ngrokd服务启动与使用# F2 Z. {3 Z" J4 g& J9 y
1、启动ngrokd服务端5 B' K* ?, a8 z+ Z
4 g8 ]& Z, \9 k: c+ Y! j
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & X+ k2 e( h; Z! }! a' B
注意,让程序一直在后台运行可以执行% ^6 M4 D! R9 J" e0 ^/ @
H% X3 q) k! |$ k! ?5 A! S
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & , @3 F+ q1 ?' ~8 w9 S
想要结束后台进程可以
{- L) m7 B7 N1 W; O( P- q
5 l/ v5 L. h: W. J4 n E* Q( tps -A #找到PID " r& i4 L7 N, w" _8 d
kill xxxid
1 |* ~6 t+ N1 O$ M& U6 @: K. v4 g" b! `2、启动ngrok客户端
]' `7 s: x7 t3 |. c; `
$ m- E' V' c4 H/ p l客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置9 F1 q7 L3 B4 f# L
$ m7 X9 h, I8 L5 k9 F- _, f
server_addr: "tunnel.bbear.me:4443"
# L! x3 o; p( C- c7 [# Mtrust_host_root_certs: false
$ a( ?6 m/ {) B3 o' |: J9 _( A) t0 h- \5 t0 c, ]
再在windows控制台执行9 {9 u0 A& \: c* |
% ^9 I+ P% n; F
ngrok -config=ngrok.cfg -subdomain upal 8080 " G: D5 U1 f0 A
9 Q: `( g1 I% Cupal是你自定义地址。
+ v. U# w5 z% n$ ]6 u% _( d看到这样一个界面就说明成功了
* i5 q2 Y9 C$ g
9 h4 @, U* h. s* v# k1 G如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 ) Z, f+ D5 w. E- \5 ~
; r6 j5 t4 g& M
y+ z/ ]: O0 P- v5 O3 |1 S/ q+ d
2 P6 X; S2 G7 m0 G; F; ?原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral( C1 k) L$ x: @8 y e8 d" `6 X
|