下面是我在阿里云centOS7上面的搭建过程。5 I/ f. R/ w6 f: s9 C4 D5 w2 c$ o$ f
7 @/ J% C$ A/ s5 [, r# x: {1.go环境搭建
+ ]+ X' w! i0 s) h' Cgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 ) w% ~. S' E( F! Y, J
源码安装go的详细过程如下:, o& B1 e# H" H0 n
* q2 M. ?) ^' X# S1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
5 J) B1 y" m; I9 t6 N* g5 t
& d. e' E$ I" z' K0 i2).将其解压到/usr/local目录下:
: Y1 ]9 }- t& k6 \- Gtar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
r8 m9 @- c$ E7 e
0 G& T) T( i* ?+ c! D9 u! Q注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
# r& j1 J' M) [3 h
' d" `, t1 _6 k& E$ R7 c. M3). 在root环境下执行如下命令:
9 e+ y7 B# l7 }6 ~7 j) N4 imkdir $HOME/go
* D6 j/ l( y& x: o. R: }5 w5 i) ]echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
$ Z0 t" g5 V) Z# S" T$ f/ d4 L) Yecho 'export GOPATH=$HOME/go'>> ~/.bashrc , }2 B2 F1 q N% [; z, T
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
: o9 s9 D. A. l/ dsource $HOME/.bashrc
1 s. V6 p9 X4 n: Z
% K% N/ m1 X \) c4). 安装go get工具: i s h9 r# [* u: Q: W
yum install mercurial git bzr subversion + _; O- ]- U# B! S
& E6 O+ l+ N ?9 h2 N, Q" \2. 获取源码
8 W% C8 L3 ]# q5 u8 P! { v, ngit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 2 z4 I8 M% F' u& q! Q: M
获取源码:
3 \! c0 h2 P, @# s5 Y$ [git clone https://github.com/inconshreveable/ngrok.git
& b- G; h. y1 N& r( U% [# }" y# i/ U6 P' f7 ?# ?
3. 编译
' @$ J! f) Y! u/ _1 p; z* l9 Y( T' v! O1 V% S4 A
1). 配置环境变量3 a- N _8 K* C; B
8 d, t5 I' S' [" h/ f, c
export NGROK_DOMAIN="tunnel.bbear.me" ! [ v p; K, G% L0 }! r. f) N( t
tunnel.bbear.me替换成你自己的域名。 1 D4 v8 x: L9 o2 j
Q5 L4 ]6 {0 {& s/ T- _; x3 a
2). 生成自签名ssl证书4 d1 y# @% B/ [& \6 E0 [6 y$ h [
7 n+ {! U: B5 M2 G
cd ngrok
3 e3 }" G2 ^2 @openssl genrsa -out rootCA.key 2048
) _, W# l0 g/ C& b/ X/ qopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem9 n3 k+ m& x: {0 W, u6 S8 H. E
openssl genrsa -out device.key 2048
2 b+ H- |% W0 kopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr. V K; |8 @; F# N9 k2 f" n
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000) o* [3 m* v5 M; c/ X6 @9 y- }
cp rootCA.pem assets/client/tls/ngrokroot.crt
6 z+ n. f! t* A5 Q' ~* scp device.crt assets/server/tls/snakeoil.crt
' z! t+ `1 w% [; E$ U4 Ocp device.key assets/server/tls/snakeoil.key
( z# g$ C& A z) c3 K
, c# Z, G3 H* n设置变量:
- _3 I5 q, d& R! @( E
- y* T1 g: ?6 WGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
$ D" o7 `, N, l生成服务端与客户端* m, A% e) p& e" O& ^0 G" [4 L
7 c. n& w6 S" b# V" Pmake release-server release-client " u3 O9 R$ B- o$ R
! [/ |1 V+ _9 h5 D$ K6 [6 [
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
, m: Q5 d" d0 }# u3 g( ?5 @' b# P# U/ v! [: p: l5 t0 C3 P' B5 B
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
0 M. p. S: j6 r% v8 U2 X! t7 k0 q0 i% u) R! H
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。, A* p& G( z6 s
~+ G c* y" e( [4 N# _4. 交叉编译生成windows客户端
4 o" ^% v6 H( l0 @1 m D上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:% T0 B" }# }( B
* j2 V: I4 w) F! n; A% a2 c+ U# x, Q进入go目录,进行环境配置
; U" D6 O9 E. vcd /usr/local/go/src/- A5 v% ^* l& o: g2 j1 d% s
% K a) U o, q+ uGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
; W. g( M+ z6 O0 A进入ngrok目录重新编译8 m% v8 q% p4 E3 t ? T
cd /usr/local/src/ngrok/! V) a1 `4 o5 s( j& X# F
3 y- _. x8 ]. ZGOOS=windows GOARCH=amd64 make release-server release-client ; J9 E6 t/ U1 [1 [: K' `8 P
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。! e7 H! |1 a9 f
$ E7 G' D7 d, o* T
5. ngrokd服务启动与使用
, K, W' _# x9 r5 I1、启动ngrokd服务端
. Y3 O% u" t* s, [4 @' O) @1 b' ~1 n7 m6 }* R
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" * J# ~4 V) e$ B- E$ W4 z; a6 R
注意,让程序一直在后台运行可以执行
% l$ m) J$ g# T0 x" v$ w+ o; Q
; b+ x. r$ q/ ]- [' z0 gnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & ) D6 O$ U4 c6 }( {* ~- [. c
想要结束后台进程可以
. D" ]: C B- A6 i; {9 f- u" `! o" T
9 K3 h6 l! Y" _3 @# s* |ps -A #找到PID & q% @9 B! P# r' c& m# p# Q( v
kill xxxid
- a% I/ O0 U6 u2、启动ngrok客户端
1 r4 S- U* q% O' B- Z4 {& ]6 B$ ^
2 f+ v& o5 m1 r2 c, E0 S客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置' \+ c; f/ i, p9 b: g/ A; ?2 }6 t
2 ^! z/ y' n' O8 z
server_addr: "tunnel.bbear.me:4443" ! T7 y* ^/ F7 N# T" |+ K. Y* |' [- r
trust_host_root_certs: false
5 K- K( d2 R; U( J( t/ _/ Q! j; Q' r+ N
再在windows控制台执行
% z+ s8 M7 @1 q2 ], F( Q5 k
: H( r+ |' \# c& ^, Tngrok -config=ngrok.cfg -subdomain upal 8080 * I, `. l3 s$ j4 A- f
/ _3 {' P# j; j
upal是你自定义地址。
- R J; H5 g7 f0 @/ j看到这样一个界面就说明成功了 7 g9 F5 ? Y9 S
# V2 R" B1 V1 Y1 B" ?
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 8 y" ?' T1 ]) }. Y' o2 W- R# d
" _: J/ V5 f7 i- g/ ^
9 P. V5 W. ^% b d- h4 K
2 m& C4 @6 q( O0 S: J5 M7 j2 x
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
* l# _, d( R3 E, M) l& {( t9 A L |