下面是我在阿里云centOS7上面的搭建过程。. {+ y9 g2 P3 f n5 L
) F7 B5 t) `0 U. H' j* ?+ e
1.go环境搭建
j# k- e' X. O$ Rgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
) d1 G( H+ \7 G6 @9 t源码安装go的详细过程如下:
- C6 l }1 ?) Q6 c# y+ q) X0 h$ M+ U; L1 m# v" w
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。8 L% \) D' q* ]8 N3 P3 `
# a- {6 B, o, ?, i- v/ ? U) ^
2).将其解压到/usr/local目录下:% `/ N6 o2 a7 [1 ?
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz % X6 _+ b4 ?; L" r/ c, B
& l% D/ {- `; Q: c, r, x) A+ F注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
$ [9 P$ Z6 K$ y! I# ]# C. m3 @( x9 p+ K5 Z( ^& @: n5 q
3). 在root环境下执行如下命令:$ K* u# K) h. ~8 W$ @
mkdir $HOME/go
8 Z/ |( E! \( ~1 h& c8 Mecho 'export GOROOT=/usr/local/go'>> ~/.bashrc ) l9 C8 G) A6 m5 M7 s1 U
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
- {8 F+ V3 U# u$ wecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
/ X& P7 T# F9 M) e+ Ksource $HOME/.bashrc
9 {4 ^9 y9 F1 F: v6 K* a. k6 A; `$ B' O6 t' K5 F# s( F
4). 安装go get工具
5 H+ d5 U" Y+ N! syum install mercurial git bzr subversion 5 y4 ~( U6 m. D/ @- v5 B- ]
6 F: U$ Y$ p. q0 o/ q u2. 获取源码7 k4 k1 G( |, x7 v$ P
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
2 |5 g3 ~9 S- _/ |5 X. N$ V获取源码:
+ f# d: {8 n" p% |- I" ugit clone https://github.com/inconshreveable/ngrok.git / j6 a8 M+ p2 a7 E" o9 a% w
/ u+ B u2 l1 w' I! \7 Q. k3. 编译
. Y1 ^ k/ z2 \& L. o/ N8 q- g$ f
' Y2 y2 g7 o! S1 \1). 配置环境变量
; i8 Q6 @: j2 E$ g: m
% C8 X7 S+ `7 e6 oexport NGROK_DOMAIN="tunnel.bbear.me"
& v% {9 c$ N% U% q% z& Z/ Ytunnel.bbear.me替换成你自己的域名。 5 x$ t) T& k$ V+ h. t$ b
4 N5 f! K! \0 P# p/ ?, P
2). 生成自签名ssl证书
* N" b9 Y/ i+ ]7 _& H, x- a A- l8 X3 a; t
cd ngrok7 J) K g% _7 \& H- K$ G3 H
openssl genrsa -out rootCA.key 2048
' @+ g ^' C0 @! m* @openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
- i9 b* g. Y3 K& Y; W6 o; _9 U9 dopenssl genrsa -out device.key 2048
9 t, ?' F' t" `2 Z% ]! Aopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
: i7 ]" |' Z4 F! J; g. N4 mopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
) j' m6 p; d' b9 U+ g0 g; ?cp rootCA.pem assets/client/tls/ngrokroot.crt
5 F* A0 g/ s, }% @: xcp device.crt assets/server/tls/snakeoil.crt' A5 b) O% g2 J' @/ _; e
cp device.key assets/server/tls/snakeoil.key 4 L( c9 Z' z; O6 j1 r, U. r# t5 t
- X6 D1 p3 l% z, o8 o1 p+ ]% ~3 B* ]" H
设置变量:. a, W2 V; I; s- d3 N
. U) m% g8 f' W/ W) h' t
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 % S: P( k" |$ e; {" t
生成服务端与客户端
, x5 t$ L" G! e1 P0 P0 ?1 x/ K3 o( x0 r: t$ C, ~
make release-server release-client # s" i3 x$ F) \; T; C
$ ?- l/ N6 ?9 ?+ q
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:1 e5 G8 H+ D, A: O: X+ w& m
' x) r, u9 a$ p5 |+ P2 m+ W
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
# T& e' _7 `4 W' N! ^3 Y9 {( |; t. _$ ]5 }9 d7 H0 P6 g, V5 B+ j
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。6 A$ g6 X; F2 ^5 ]& l8 ]
( c5 u* i0 W. H4 h6 w- W4. 交叉编译生成windows客户端
/ a9 | w; r1 N6 x8 ?4 L* P+ i上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
8 f# t, J1 | v( f# L# l0 E) g& S P; a7 C! Q! j, e: H3 L7 }
进入go目录,进行环境配置
+ f0 o% O$ x. jcd /usr/local/go/src/5 _+ x$ V+ u. d" F4 L9 W
5 I8 \! ]( j% A' {& m+ `8 ^. M
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash d6 k3 j4 z7 z% C- x. z
进入ngrok目录重新编译4 S/ }& s8 s* P+ T- A" v
cd /usr/local/src/ngrok/
9 i. D$ H: N" e8 `2 j
+ o( x0 z% [3 X% B( tGOOS=windows GOARCH=amd64 make release-server release-client 8 F7 U6 W% J8 Z! j+ b
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
" A E$ W% x1 t8 c4 `$ g. W" |: Y' }3 m& m5 b$ T0 D
5. ngrokd服务启动与使用7 G9 a7 v4 m1 L
1、启动ngrokd服务端9 v$ I1 r U' H+ v+ ^' }+ ~
2 D( Q' |- b3 U/ d1 R& m
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
5 v/ }- @7 ^4 B: b O1 ?注意,让程序一直在后台运行可以执行
/ B6 S4 N9 K5 h, V( m! v
+ |3 C2 u' q8 j+ ^+ U! J' Qnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
/ G; ` Z, X- W* F: T, t) F想要结束后台进程可以. f/ j" ]8 r$ g. a
1 i. k3 O$ M# e3 k
ps -A #找到PID
% s8 V5 D0 Q6 V. `8 Z; ukill xxxid
4 b; U! @& g4 _2、启动ngrok客户端5 ?. i7 Y: }5 c8 V! w V+ T
- ?3 T0 N# i6 B1 f) r+ H4 N% ^客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
, G* H. d8 O3 _7 z7 C" Q5 Y3 A7 k5 s9 D _$ Z, s
server_addr: "tunnel.bbear.me:4443"
0 V- \" G9 K( n% Q% i; R3 n) ttrust_host_root_certs: false - X. V. o6 w- u0 t0 y9 x$ G% L
: }# s3 K& {' n E! C* U* L再在windows控制台执行# I8 V& N* l2 b- z: L- r
" h, R! ?5 J( i, |ngrok -config=ngrok.cfg -subdomain upal 8080 # k0 A7 R) b1 N0 \5 f
3 \4 [" \5 @1 D H8 n; h
upal是你自定义地址。
, g. j u6 Q+ L( `看到这样一个界面就说明成功了
- r( f0 Q- O9 |& @) d5 Y: }1 h* R9 O1 A& P+ n. d1 G
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 . j* y. a/ i, `6 ^8 m% W2 q
2 V2 M+ }4 F$ ]* [
( l: e: L, v2 A% A6 m( X
) W" ]2 a' W" g2 j原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
7 p) p# U) Z" J' g- F |