下面是我在阿里云centOS7上面的搭建过程。% L) e4 h2 L- ~! q1 y
9 } q4 ]& P' S7 ~4 F: o6 f* L/ N" n0 {
1.go环境搭建7 K5 E: d b: }$ l! I% e b
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 3 A G" ^- j) g W
源码安装go的详细过程如下:# f6 U# @3 f" Q8 i9 |
& s4 \ _; y5 g. ?( I8 ]1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。) y5 _- U0 ~0 b# B* g7 l# ], M
5 W) t; U) V* |3 k/ O( p
2).将其解压到/usr/local目录下:
9 ]& ~1 R4 Z1 L/ k% y# ]; Ftar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz & ~9 K% {7 d7 e& d+ l
* E/ X1 j3 z7 o5 x4 T" }1 v
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。 W1 R! K# E8 i9 V
1 Y8 S7 J$ `8 ^# f' q2 R
3). 在root环境下执行如下命令:
2 i" E8 Y: a$ z: Q: I1 n4 Mmkdir $HOME/go
# {9 X9 V1 M! M2 s% c6 R! becho 'export GOROOT=/usr/local/go'>> ~/.bashrc
- h8 a* z2 ~7 |: |echo 'export GOPATH=$HOME/go'>> ~/.bashrc ' G3 Q0 f1 |! B6 ^
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
( _0 x" N$ x5 Bsource $HOME/.bashrc
4 }" a( U7 h' j% J0 x8 c
. }0 A4 [% a+ o2 Q6 n% c4). 安装go get工具/ b, ?/ E) \6 m- m
yum install mercurial git bzr subversion + h9 u N3 ?6 s `2 z
1 l' a! y; m L: i2. 获取源码6 T" t4 w* Y" {. T
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
% o$ |. `* _3 I$ h+ [# K' f9 ^获取源码:
2 [+ w2 l K! N% ]0 }+ M0 F* sgit clone https://github.com/inconshreveable/ngrok.git
0 @2 @4 Z2 _% |/ ^& O, K' G
3 B* B8 o9 g. a' l% e3. 编译
4 z4 T3 b+ S D$ Y; u t1 S( j; T5 V. F3 B" q, V9 r6 [
1). 配置环境变量: d7 c+ O! Y4 o. f% u g
6 u9 w! H* Y, d4 _export NGROK_DOMAIN="tunnel.bbear.me"
0 K* H r' c- H# U- X) jtunnel.bbear.me替换成你自己的域名。
- ]3 d* w! k) ~; a2 v6 l6 Y0 a% p5 B3 @7 ]0 ?8 H
2). 生成自签名ssl证书8 z2 {7 M! \) L" J) p
; c; A ~+ q% o$ K' V
cd ngrok
6 n, l% W: x0 j0 ^1 wopenssl genrsa -out rootCA.key 2048+ m- E$ ^5 I3 ^6 }! a+ X
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
" j+ q- I7 t0 X, [openssl genrsa -out device.key 20480 G4 _/ r5 k. q3 _% o3 w
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
5 Q$ y, b8 V9 I$ M: eopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50005 F4 {9 J, r, c
cp rootCA.pem assets/client/tls/ngrokroot.crt
+ u% B( R# n( G4 y5 j4 Q4 Pcp device.crt assets/server/tls/snakeoil.crt! S4 j* b( t9 G9 S2 x/ y, S- }
cp device.key assets/server/tls/snakeoil.key ( U- w! K& V! [9 v4 q
% V" G v) b R/ P
设置变量:6 E/ _" r9 {1 @7 |3 [3 j) A, h4 q! A8 f
) }- r" c. Q6 F2 F
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
1 \# T- T* v! y; y$ X生成服务端与客户端
1 T Z$ F1 \4 r5 Q$ v1 `. c+ Z Z. O3 R j
make release-server release-client
) F I! H6 _& L/ S6 q5 Q! o7 ^
$ ?' y$ e e" H0 s) K x% m注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:6 T5 y0 T; Q; B. S! N0 ?& v
+ }$ x- Z; W2 y$ V" F2 V3 T找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
' k9 u3 X1 Q+ l n( c6 S, l$ r* d
# x {* U* G, j& @* U" q2 T6 C编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。$ D' c2 N C; z8 x G' ?8 k J. q
& q. m# p. o3 a2 g; d" w
4. 交叉编译生成windows客户端
; a8 s% s- i9 }3 e+ P) ^! c4 {1 w上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:7 |9 A# x4 w, n' p# q
5 O. b& {+ t+ ^5 b, h进入go目录,进行环境配置
2 s; }/ E1 S2 a( D: `cd /usr/local/go/src/+ i7 r# w Z2 ^% q& U
5 d+ h6 U# \. r5 e& ]GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
4 {; i1 r+ \0 N' O) L进入ngrok目录重新编译% I5 S, O0 d! b+ t4 x9 P
cd /usr/local/src/ngrok/
7 W0 [; d2 |# }7 A5 a/ x N0 {, o$ w& E' e/ X$ K
GOOS=windows GOARCH=amd64 make release-server release-client
$ _% s" b* ~1 [( K; s9 O编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
* I5 |! ^% C8 K c+ Q" ]
- }" a$ }+ F8 Z7 F5. ngrokd服务启动与使用8 ~$ C" K7 C) @2 D- A
1、启动ngrokd服务端
" f! l a( N% ^5 z ?7 w% \# \6 b+ }) z+ F7 p
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" , i# k8 l* ]" z* S+ c
注意,让程序一直在后台运行可以执行9 |9 G0 e$ `4 J; S, ^
1 c$ x; V, b' c# qnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
5 ]; H% h- \, n" m) {% t$ {想要结束后台进程可以+ M# d( I1 x2 I- P4 n# {; u
6 K; U/ k3 H' W7 _, }ps -A #找到PID
6 d- H* b/ [$ b6 kkill xxxid
4 D3 L. E) t' \3 F+ B2、启动ngrok客户端* ?5 y/ l' u2 ^
1 R0 f6 M0 C0 m% X; {
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
) V. V2 u2 q$ ]
' E$ p3 E2 z" q0 \" q3 tserver_addr: "tunnel.bbear.me:4443" 8 F* S( T' P- H5 h" O+ z
trust_host_root_certs: false
; V, v/ m8 u! ?, _5 g1 @
: ?* ~4 s+ K( b* x0 d再在windows控制台执行! \9 |2 f1 \4 {2 ~7 X
$ l) c' q$ G9 A3 z. Q
ngrok -config=ngrok.cfg -subdomain upal 8080
9 n! O3 T% g. S- I d6 V7 h7 y& X. I
upal是你自定义地址。
! \4 \; s5 h3 |- D! R# F. R看到这样一个界面就说明成功了
! Z8 N5 a! ?, G9 |8 _# v; C8 W3 z+ y" G: T
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
* [0 G5 t: l7 c* ~, I- Q4 F' n8 J
5 X( o# k( U" i% y8 t
, W" ~3 w7 n2 ?- l+ S) u, P+ ~6 H原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
1 M8 W9 m! D( m% K* K- {5 b7 \ |