下面是我在阿里云centOS7上面的搭建过程。: D) L( [; J$ b- S, T
! S' C7 T, X0 S) p1.go环境搭建
' W3 B) m6 }$ f& K o2 R+ {* A* Fgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 8 X7 r- ]( ^0 {3 c. G
源码安装go的详细过程如下:8 T) f) |7 A; V g. m
! L* R. G% m0 Y6 V9 D8 D2 w. x$ }: u1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
K& b9 R/ V( M5 V
$ ^" x8 t) x) C! C2).将其解压到/usr/local目录下:
& p H2 `' i) c- K* ltar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
& R# X; M2 g2 ~ p& ]2 [
: n: C# o- e& B( [( w7 A注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。+ E2 M+ }/ y6 o- _; s
7 m; b1 O, f1 U' e* ~1 H0 ^
3). 在root环境下执行如下命令:% E+ U$ Y: ~5 [# M: V: R; K
mkdir $HOME/go $ @0 }( t! E% h- Q+ s
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
; v8 Z! X/ J4 L4 T. ]echo 'export GOPATH=$HOME/go'>> ~/.bashrc
+ }+ f2 \2 ^ J2 M& xecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc 5 U, G( S5 @( j- Z5 j! C- w7 o
source $HOME/.bashrc
/ G$ R1 E! u# q$ Y" y1 V) `2 Y$ H3 ]$ ?/ s# U7 V* l; e
4). 安装go get工具$ O+ Y: e) r2 C5 r) k- L& ]/ E
yum install mercurial git bzr subversion
* }. o% F3 v" Q2 m, k: y6 f
: b4 _: D' D0 m! n, J2. 获取源码
1 r+ x3 d1 o9 k1 p8 B' b9 }. M. Y; Agit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 + ~/ @1 B0 L8 y# N
获取源码:
& e+ T3 P. ^/ |$ v7 Pgit clone https://github.com/inconshreveable/ngrok.git
6 [. g2 n1 {+ Z7 w! e$ n" F
. Y" M: E5 _+ _- S3. 编译
5 T. ^- D& K9 Y/ z# E+ ?$ H4 Q' q* Y+ J- i
1). 配置环境变量
9 T S1 [' f, H2 D% C9 h8 E0 i7 c) a- q$ P
export NGROK_DOMAIN="tunnel.bbear.me"
; ]' ~( P& Z3 O* o( h& f2 otunnel.bbear.me替换成你自己的域名。
8 o: S" I4 P* }( k; `7 v" B
+ @: e. A+ G3 [. H' {. e2). 生成自签名ssl证书& i+ o; m- f3 V2 R6 Q1 ~
* J" G6 ?: J8 C/ A7 m" P4 J+ X
cd ngrok4 x1 E6 e" W) |$ t# d F7 r
openssl genrsa -out rootCA.key 2048
" V: x, |' e2 F3 T* c$ N9 ` oopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
# N( R) c7 L3 C8 L0 Popenssl genrsa -out device.key 2048# ?' g) F& }. U, O2 {5 @# J
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr& u2 p* s/ u% N$ u2 o4 a* S& `' t
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
$ c, X/ O- o9 T/ r; ^cp rootCA.pem assets/client/tls/ngrokroot.crt4 T( f7 D% Y+ G' u; l
cp device.crt assets/server/tls/snakeoil.crt
: w1 h" z; @, \: ^+ g2 acp device.key assets/server/tls/snakeoil.key 9 X8 _- t m2 D% J3 u
" I+ p* J9 [6 ?6 k* o6 \" m设置变量:
; H! g0 y5 C* [% q* u! b% Z/ a1 R9 H0 `! L' a
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 7 B& U3 d) B2 ]9 D7 y
生成服务端与客户端; @' J7 [; ^1 q; m& I; |: |4 h+ Y7 ^
) q) `' S) r" i4 p
make release-server release-client - u8 m6 U' h$ ^! a! ^
) H, [9 W* Z6 A: c注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
1 \0 C3 ]' }( _; {1 d" @) }; g. ] `. ~, z: [3 {
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。0 N1 B0 \* a+ ~( Q9 I
5 P8 e- h& _, u! v" p$ G% i) f! E
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
& G: }0 i/ }5 U3 k) R6 y
+ |8 E; K0 |: m: N3 a; j2 g4. 交叉编译生成windows客户端- a, l; u7 [8 ]* ~6 X* p
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
. q) P5 y Z4 i( B5 _ ]- w z6 \- J+ D9 O/ ^4 k
进入go目录,进行环境配置
& `% r$ w1 _! S, X8 _0 C7 Icd /usr/local/go/src/8 E7 U0 q, Z0 u: f7 J
+ R% @2 _- M1 O Q) U: y0 fGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
& @3 ?7 Q$ o0 d# n8 E进入ngrok目录重新编译
( U* G& u+ v4 ~5 U% k5 D# I% ycd /usr/local/src/ngrok/: D6 M/ A8 l% N7 [& A7 \3 e$ n2 J
+ g$ }0 Q5 g6 B# e9 f
GOOS=windows GOARCH=amd64 make release-server release-client
* f2 X( }% _- x编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。 U2 U O9 A5 b, b9 e g
, X; Q* C! f7 D1 J) J6 H5 l
5. ngrokd服务启动与使用. [9 C2 x5 i9 K' U8 H( e
1、启动ngrokd服务端 N* t: D+ G% t# T4 f( }
3 @- E3 j8 x1 ]( \
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
* r$ [2 t; _5 U注意,让程序一直在后台运行可以执行# |; j$ O' B3 Y7 c& O* r% Y1 y
. s* `% R2 \- ] c
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & * ?5 p4 j0 t" |1 i3 X2 d2 V
想要结束后台进程可以
7 W( z2 U8 a7 o7 [& k
3 p2 [5 H# | dps -A #找到PID 6 A. G, B# F S- d# z
kill xxxid 6 V8 S9 x% _4 m
2、启动ngrok客户端
4 `# x- n; y& F: f! g5 H3 Q, R+ W( l8 ~+ B4 a8 q+ s: W" k; X3 e6 \
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
K2 ?" U( z0 A5 l" u) \/ _5 p6 c, g& s$ j
server_addr: "tunnel.bbear.me:4443"
- B7 Z* z/ y! V; T4 _0 [7 @trust_host_root_certs: false
+ [! @' k0 t$ j" P% J9 d& Y1 \6 g) J: d" s- w- c& i2 @) u4 l( w
再在windows控制台执行: f, f# m; Q2 ~
( H' r2 T, _, w- o7 t6 Q4 pngrok -config=ngrok.cfg -subdomain upal 8080
% X5 I4 p2 w3 R( y+ m0 Z' p# e/ r% J! Z! J0 `( r4 M% }
upal是你自定义地址。
& D& a& K, v6 \8 \! |看到这样一个界面就说明成功了
2 O# h% W( V6 `) o! k* i; a* x* I+ u
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
9 |9 Z- ?% U/ h0 B# D9 Y6 }
7 I1 }: l, R) M! Y0 c4 s# i w9 {5 ^7 }: s" G$ N
. l& H, P6 I. `0 O) z4 I
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
k- v L1 {' i8 S9 s& y5 H2 r |