下面是我在阿里云centOS7上面的搭建过程。
/ _! e8 p; J9 Q) ? n% T+ h& g
) U- c8 S$ Y2 i6 r1 y# t0 R- M e- c1.go环境搭建
+ v$ }- _9 u6 ?1 m0 ]+ v" K; d3 z7 Ago环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
4 p0 K+ _ V. R7 H4 h, ?源码安装go的详细过程如下:
" _$ D. }( d7 I% l# a& d4 x# G0 A, p9 [+ Q
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。& i& S/ `5 i* i8 Y8 n
9 [0 F9 p5 B; \) l, C/ {
2).将其解压到/usr/local目录下:
. C6 Y4 t: z) R' _ p: Wtar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz 6 z/ Q, T' D7 h4 z3 g% t
5 j2 R9 R' c& A4 g( E
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。# ~$ b2 |3 X( o, U4 f1 ?
1 m, f V" H/ M9 g+ ~5 h) J3). 在root环境下执行如下命令:2 ^5 b9 C# c9 E) \/ `' Q
mkdir $HOME/go
5 E' J: ^' h* c7 S( Cecho 'export GOROOT=/usr/local/go'>> ~/.bashrc ! r" y8 U% c/ N5 J' L5 x' ~
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
, l( \3 I, N/ G" F9 t* N4 Necho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc * M$ M" F5 g+ Z0 [: S
source $HOME/.bashrc
" Z2 U. x7 o8 v3 T( }: |7 y. f ?5 ?3 P1 }# C8 k' i1 Z
4). 安装go get工具
% A7 I, s9 B4 l9 {yum install mercurial git bzr subversion
; U7 V; C- C7 d8 v9 r1 R# i% O. C9 `; Y) J* m
2. 获取源码
7 b( W/ Z c. X' jgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 $ E, h3 ^" Z- } }3 b* [& t$ B
获取源码: T" a& J) p: U, C4 \
git clone https://github.com/inconshreveable/ngrok.git
2 [5 j! _; x2 o" [
/ W5 O) U5 g) L8 y: u3. 编译
8 O0 f! S1 t6 @8 O- g9 }/ q
/ K8 p/ R1 y! J) D3 b9 X& r1). 配置环境变量
& p; g- Z; n: l! v- V5 a: j% z; o- x: H) `1 I+ m6 S
export NGROK_DOMAIN="tunnel.bbear.me" / y$ m# n' J+ _1 Y; @' n
tunnel.bbear.me替换成你自己的域名。
+ g$ K/ c3 |- Z5 l( Z5 x4 S: T* F1 @4 J: H+ {+ L: U& n
2). 生成自签名ssl证书' }; h. g! k6 X
% ?$ g1 z% G2 ]: L8 n0 k7 A5 {
cd ngrok
% p! P1 T0 N7 t; g2 dopenssl genrsa -out rootCA.key 2048
6 F6 C7 ]. U v5 s! q! ]openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem0 L' X" R0 o' |/ N6 K
openssl genrsa -out device.key 2048
9 h2 K% W: _3 q: A% s/ P8 Uopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
! ~8 Q% x) ?( vopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000% c, I/ \" Y0 H- e2 v; @7 b2 s
cp rootCA.pem assets/client/tls/ngrokroot.crt6 {" g i+ }+ P- S" A
cp device.crt assets/server/tls/snakeoil.crt
6 D5 d* {9 ~) O; _) ^+ qcp device.key assets/server/tls/snakeoil.key 2 B4 \& c5 r7 p y* _2 M O
/ J- |5 _. b/ q4 w+ r* _
设置变量:8 V4 W1 E* ?2 I& {' N
$ f5 b- ^, Z0 Z0 w" c0 I( v
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 9 t3 `& A$ K/ M" a) @+ n
生成服务端与客户端% i, R; Y4 M T
) t- @3 I( R6 |' C; L7 _. fmake release-server release-client
+ W1 X* k! h5 f% `/ C: V; E P* }4 \) o/ W: u7 k% z
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:% P' D$ a: `- Q0 p
( ?" H9 W/ @1 P E0 j: j
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
# J: A. d4 _: B# O3 @" k7 i5 j% R9 W) i+ {) H$ o# `$ r1 n0 \
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。2 M2 W( Q8 r0 o$ M
: H3 a, K) u2 E9 a4. 交叉编译生成windows客户端: s2 L" K5 `, ^& I: x' v- A
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:. V2 c7 |% J) T; w
" s/ D& U) X! M& b |7 ^
进入go目录,进行环境配置
5 ]1 ^0 g+ |# e+ l) S' wcd /usr/local/go/src/* G- }: C; h) Z& f
- H7 S0 n( J3 B n
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
0 L' o& M+ k3 i, B8 J$ I进入ngrok目录重新编译1 U6 h1 |2 p: f6 r7 o9 s6 O
cd /usr/local/src/ngrok/0 p. v5 o C3 C5 r/ {2 r9 w
* @- b J! u0 i! }. J9 X
GOOS=windows GOARCH=amd64 make release-server release-client
9 Y" p4 @3 U. d" E0 O$ T编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。# Q @/ x& b: F6 a8 Y i1 c
/ J$ N' ], b2 ^+ T7 F
5. ngrokd服务启动与使用5 ~1 z) v5 o. T" Z1 l
1、启动ngrokd服务端/ T6 V9 \4 m2 ?' |0 z
0 n$ ?+ ~0 h: U. V- zbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" / R. a3 ] l; y9 ~; ~" x% o
注意,让程序一直在后台运行可以执行
) V$ G" _6 M+ s2 C3 u$ i9 C, _0 I' k0 k: f; i
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & / [, z9 V, S9 b/ R; k
想要结束后台进程可以
9 \" ^0 X; e5 e/ O
a$ d# M' u2 |' H* y' j2 Z+ Mps -A #找到PID
; @, {- z+ g9 B, {kill xxxid
8 D1 {# D G0 x2 o7 |& A3 y8 ^' u2、启动ngrok客户端
; r0 o7 b) d e, E4 y) f# a( A" g# i2 [- f$ k8 u; c
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
/ [: G, L5 w. l1 s4 z0 v0 q5 T. F# S6 V/ _
server_addr: "tunnel.bbear.me:4443"
/ m* I& l- g1 l1 Itrust_host_root_certs: false 1 Y. ^8 n" ^8 S9 A
6 G+ K3 c/ v+ o7 i# W再在windows控制台执行
: e! U4 g8 z2 B% ], U% b
: B8 R4 Y; v9 G; N+ N% rngrok -config=ngrok.cfg -subdomain upal 8080 - }" G s" o- ^, [0 V
x' V3 f: C% X/ w2 O3 d) jupal是你自定义地址。
5 T3 ]7 g# y+ e( p/ c8 r0 `看到这样一个界面就说明成功了 ! W+ E- B2 l% k8 _& O+ q$ G
8 i1 a' }$ \" u7 G如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 $ y% X: y- m: k z0 {, v; C6 q
9 t. P; S! n$ u% }& {' `: Q
% @: z0 ^0 C- S5 c" C3 K" c- @, h! v
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral3 x7 E0 [3 k: j3 w f# B$ ?3 _* D
|