下面是我在阿里云centOS7上面的搭建过程。
' J4 s( `& t: K
3 b5 g$ j4 k* r* U( q( X* q% W3 y1.go环境搭建# s8 a; A% i) |+ z5 M
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
" v Q* L# ?% B0 y. p( Z2 D! ?, w源码安装go的详细过程如下: ?& d3 Y4 C H% _: y6 d
7 Z2 S; E: v$ l6 Y2 I$ Z" D
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
0 W1 |$ y) P! ?) M3 R0 V! w
7 u( |4 r8 j. q2).将其解压到/usr/local目录下:
/ m( h; L: t/ Z. Ptar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
' R- H" ~ n9 C) b" P0 s% y1 B( P* M! X5 X0 |% s
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。4 {9 k. Y( E2 l, _+ ]( n
. u2 x( d( {' ^! @3). 在root环境下执行如下命令:
5 d2 s l, k. h& B' R4 [# T: `mkdir $HOME/go 1 H1 ?* {" p2 R9 e$ o2 H
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
; d/ X y2 L, ~echo 'export GOPATH=$HOME/go'>> ~/.bashrc
0 t2 Y; ^3 p# Fecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc # E8 V' `% }8 Q# O" H" Y4 n0 R
source $HOME/.bashrc 3 c& {, p. `+ @: A/ D, C0 ]# T7 ^, @
8 g# Y# p# B* u1 Q) h% R4). 安装go get工具6 g/ G# v4 m% w. e- A' I8 S
yum install mercurial git bzr subversion % L5 A0 z' ^# X8 L+ _6 w
2 \4 I2 j' C' \7 a" Q2. 获取源码
8 n0 q% b1 a+ V. @, Q W3 B7 kgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
* U* E% S! H% A: y获取源码:
: ~1 j6 Y- i [9 u Qgit clone https://github.com/inconshreveable/ngrok.git ( a: c) q/ F. i2 d. W7 S
# {& a0 |6 M3 c# b* G3. 编译) _, e( N0 s. m5 B
: p2 C/ a( I6 [$ s: w1 E7 H5 N1). 配置环境变量
" g* y" G+ C4 S! @& W; Z8 Z
! @; f2 i2 H1 dexport NGROK_DOMAIN="tunnel.bbear.me"
8 H( R, i2 K, ^' K( l' C% l% P% Ptunnel.bbear.me替换成你自己的域名。
4 q0 p" \: c4 g5 }2 g% u- o
' N8 f: u! T$ L' n2). 生成自签名ssl证书
* S/ t: O( q3 t/ _- q9 X0 d6 [0 n/ M& M! Z* a8 {7 U
cd ngrok% ~2 {% B# k8 S7 b( x
openssl genrsa -out rootCA.key 2048
" K9 S# b; d; Qopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem( _; E7 o: H# L) o
openssl genrsa -out device.key 2048
& g$ e, k. S" N7 i) L+ L; S& T, k1 Nopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr5 y7 V! X( Y& u9 c( p
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
9 o5 d+ }0 P y# F: Z: U- Ycp rootCA.pem assets/client/tls/ngrokroot.crt; S/ d1 N" f4 n3 y( \5 d: E: s, M- S
cp device.crt assets/server/tls/snakeoil.crt2 `7 o. T% X' z/ M
cp device.key assets/server/tls/snakeoil.key & n/ e; v; i6 H0 q
$ b | M: _' j: K, R& d/ ?& T$ F& q
设置变量:) t6 U+ a9 V V- J* D+ E7 B6 q
: f" f c& [* w- Y6 p: f IGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 $ L J/ x4 C5 a5 _! [% Z4 O
生成服务端与客户端7 L6 z, @# i" k# R, Z9 ]
$ b1 \8 T) D1 Y/ d1 [3 Qmake release-server release-client $ o9 X0 J ?) f3 d1 u" Y
7 |% _: `3 x V% c注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:1 I- P; R3 a% n) _( {5 X
4 R |2 ~ L& m3 a) l/ ~: V
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。! m+ ?& b! O; e6 E
$ I- y1 ~( Z+ F编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。7 [3 L- z- u* E5 W
+ W# F ], L! L7 m
4. 交叉编译生成windows客户端+ x0 {. h/ z) s: w' Q; t
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:0 {* a5 ?& W2 D3 a: R) r1 P" c
6 P& M- I9 h* T f
进入go目录,进行环境配置
# c, Q! u$ M7 ?- f; f; u7 {$ m/ Ucd /usr/local/go/src/
" @& n: }; y6 ?8 J
" j$ Q! t9 N$ sGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
- t$ u$ ]0 ]4 I! }# u, C进入ngrok目录重新编译2 s, r6 d1 G- @1 _! t
cd /usr/local/src/ngrok/8 Y2 l- f s; U# u" v2 ~
$ Z/ H3 k6 O7 S' y
GOOS=windows GOARCH=amd64 make release-server release-client
! c6 D3 P9 S, h2 E5 r编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
4 T: u2 k; g; c- R K+ T$ Q# {& o0 c% o; N* I ?
5. ngrokd服务启动与使用
( h* b! G" A# j* c1、启动ngrokd服务端
6 M$ R- Q' F; C! V, Q4 \
1 c& a0 _5 y+ x9 Ubin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" 7 h! t* W7 }1 Z6 S! P% G
注意,让程序一直在后台运行可以执行% A- x U. d! c0 i7 i6 }
( h# | H( [' ~" D' q9 H; Rnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & / @! \9 c. F% l& M" J* `
想要结束后台进程可以
# \' {8 r# \% E. R5 u
e) R0 A4 b6 A( {: J- |ps -A #找到PID
' }! }2 \$ ^6 G. z3 Gkill xxxid 6 F, v$ x( g7 P( l4 U: ?
2、启动ngrok客户端5 Z# R, l. W! L: o1 R
) i" U) j, L, B5 i. I% ~* W( z
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置7 Z5 R5 V! h! [, g
7 N1 \; J$ f- Z9 ]
server_addr: "tunnel.bbear.me:4443" % F* l6 m# Y) ?3 [1 [4 `9 t: Y e
trust_host_root_certs: false % {/ L- `: q# M; C
) U' B+ I" O7 t; ~. V/ e8 W4 S再在windows控制台执行9 W8 H% q t3 h5 ^/ \/ H6 a
5 ^. }% w5 `: ^( H4 `1 d4 J2 dngrok -config=ngrok.cfg -subdomain upal 8080
9 {+ ^" f. y5 d% z4 s, H6 P% X5 u
+ q$ X$ i* H% {. ~9 Eupal是你自定义地址。
$ q0 ?8 e3 {$ N( c& |( E看到这样一个界面就说明成功了
5 @, f m o) l/ ~: R
v% S. ~8 o9 X( @( R4 O4 g如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
* P# _) B* ~' g U% P4 j+ t# q+ k" ], Y8 e5 j$ D
, B+ `# b2 d3 q4 D4 `8 I! b
: W. H% U! M$ h0 b8 |1 Y原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
" g: w: C2 d0 k- p3 L |