下面是我在阿里云centOS7上面的搭建过程。1 }0 K8 E' S( i& e
: D/ j3 @6 I9 w
1.go环境搭建
3 q: x& _) e4 J' t# j& X+ zgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
& P% }4 S8 N5 T8 X8 k) [3 M3 e# _1 [源码安装go的详细过程如下:9 K$ i( E A3 D: N* I, w5 r
, z3 U& [8 L" ~. y' W$ x
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
* h+ {% I9 i) E0 i. A9 U6 T$ z) L' `
* `; ?8 X w. F5 _+ w: D2).将其解压到/usr/local目录下:
% }# G+ D) L4 ntar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz ; E/ o: i: { a4 C& p0 I) j
# o, d1 ?3 y) T4 K5 o
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。/ h/ l/ F, ?0 y( w1 N+ E0 T& q% e; V
3 Z8 Q t" n+ Y* A3). 在root环境下执行如下命令:4 Z$ H0 Y* i. q+ u
mkdir $HOME/go ' O1 D! Q2 _5 U0 Q3 `
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
6 r- H% p" \/ T/ F/ Zecho 'export GOPATH=$HOME/go'>> ~/.bashrc
4 o0 i4 E4 T2 ]' r+ a* S- r( G! `echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc 2 n6 {5 ?$ t' G, @& G0 A5 N
source $HOME/.bashrc 0 _4 w! P6 o* A( O2 E* O( t
8 {1 S( [/ d! z6 T4). 安装go get工具
$ L5 f- j( }0 R$ A5 p! {% Fyum install mercurial git bzr subversion % f* z4 h1 M" E6 z' D9 O* Q: @" l
6 `2 S: R6 p$ d" y: R2. 获取源码7 }: H! |, `. @3 u; H
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
& ?( v+ x! @% H4 ~* P获取源码:& F1 v: M1 ~# |& f& ^: l2 u
git clone https://github.com/inconshreveable/ngrok.git . _: R8 h, G. D( ~' |5 X# T
% f) I0 ~9 r+ c/ L+ l
3. 编译( z1 }2 H" {( o& v# v
2 O5 U- h" w( _5 h1). 配置环境变量
" K6 _6 ^" @) g' W9 \$ |
2 z9 ~5 g3 C d+ Y1 texport NGROK_DOMAIN="tunnel.bbear.me" 9 M/ r$ ]! W( Q6 c: |
tunnel.bbear.me替换成你自己的域名。
5 f, e3 s3 }" N% y& n: G/ P; M4 t" N: n3 y
2). 生成自签名ssl证书
4 S9 k, U6 ~- x: P4 e1 M% J; q2 s. q- T% {
cd ngrok
9 p- ?9 v# i1 J/ E g+ J; Copenssl genrsa -out rootCA.key 2048
4 r! x, M+ M4 m* d! k: yopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
# F* \2 n S, A$ M- A. ]( ^openssl genrsa -out device.key 2048% x# j# m( s, \
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr4 ? S z& k5 p5 }3 P5 y. L2 `
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50006 C% J* M8 _6 w4 P9 }3 N' |' f$ n1 f
cp rootCA.pem assets/client/tls/ngrokroot.crt
: L. d3 F9 }2 G, |' f4 b6 Z2 t: Z, q% q! wcp device.crt assets/server/tls/snakeoil.crt: z* q( s! e& k% }
cp device.key assets/server/tls/snakeoil.key ( ?' ~& N! x( n. ?9 q+ U
2 H4 V g9 O' k2 ?! u' U设置变量:
7 x$ a) Y" S7 X/ I: |) P# p$ \ d/ u1 @4 V. Y6 x8 g
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
9 @% `0 V$ J1 @% o生成服务端与客户端
3 O/ J( z9 |* c7 U7 {- F7 [' P, L0 U0 f7 t. X W" l1 r
make release-server release-client 6 f6 k0 t/ S& X! w9 D; {
! P& ]% V6 i$ E0 u注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
]1 G; q1 t) v) E* I' o
% O' t. ^& f2 C2 P- G1 k: _0 H找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。* @' I( g7 v0 c2 |& Y# f
, R, H; e4 ~3 t8 O/ B) K' m$ t编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。 m- s$ m) O3 F: h) F9 c
' R/ L; P" S% p
4. 交叉编译生成windows客户端
' q2 N1 [1 W' u7 _) R上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:0 A; H0 h5 v; G, |
, y1 E9 }# G( s
进入go目录,进行环境配置
' {' m0 v& u9 `( ?1 Y% y/ s$ [7 \: ecd /usr/local/go/src/
8 Y9 O. c B$ ?2 S' I! Y2 R0 h+ r" @) y; |4 V
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
5 w( ~+ A! X- l* S3 y3 d进入ngrok目录重新编译
6 b- |- l) e' F. f: r( u' s! pcd /usr/local/src/ngrok/6 Z( a+ ?; r5 D- j9 ~4 b1 e
, ^0 S7 t* G, z) E: m
GOOS=windows GOARCH=amd64 make release-server release-client 0 w/ ?3 q- r1 r2 U
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
# X/ f3 g; S6 I3 H6 P9 s! s) [/ s& Y; ^3 t" M( u8 J {
5. ngrokd服务启动与使用0 K7 m7 i6 O/ T' C- |
1、启动ngrokd服务端
0 J' M. _3 \: N) t
* a" ]$ ~( Z" ], ?% O. Abin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" * ]8 q. T0 {& M3 p( [- E7 o
注意,让程序一直在后台运行可以执行) L- l: n; f; _" Y
; r4 Q8 X7 t/ n @
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
, I' p+ t0 V ?/ m7 s想要结束后台进程可以2 ?8 W: C1 @- }3 X; O, |
5 X; K8 [% q, _ps -A #找到PID + [ a: Z% [) n F2 F* i
kill xxxid & p( W ^; P$ Z* I9 S( ^
2、启动ngrok客户端
% f, U0 Q j5 Y$ I
7 c' p2 O; \" M) k客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置, ?& S2 p) @: f* U
5 M5 M3 ?6 [8 w7 O# Y4 h W
server_addr: "tunnel.bbear.me:4443" 0 A! R3 d7 C% Z
trust_host_root_certs: false ) D# F7 \( z4 T) R. m0 L2 @( C
) I! V5 z$ k, e4 O1 e
再在windows控制台执行
* g' P. z/ q- E& @6 n0 @. k# w6 [4 M+ P/ L2 G2 m) R
ngrok -config=ngrok.cfg -subdomain upal 8080 1 C, z" b2 H) U7 Q" ^* d$ K
9 d2 @6 }9 ~. T* Zupal是你自定义地址。5 |: K- Z0 d: ^
看到这样一个界面就说明成功了 ! z. c) P. `& S2 G
6 D3 f' W }& P* p- S
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 4 M/ z# H3 f: U. |
8 h9 h- r4 K4 [$ L# \+ P
/ y4 Z* L* Z( _! s. g. k* |1 T
: t) W2 O8 D `4 u' m原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
& X! w$ ]3 E# z8 }+ K- u |