下面是我在阿里云centOS7上面的搭建过程。
" b( J. e# p8 K' m8 S/ n
: F$ k; z& _# k1.go环境搭建
. Z6 ^2 w& }5 e+ [- u1 Y* @go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
& w1 q$ Z* }& i3 {. B源码安装go的详细过程如下:
2 J2 g, g4 k3 E; l; J. T* [# S/ q& P
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。4 v2 j! @* _9 e% q( B0 ~
, T2 ]2 ^$ q* w& i8 d1 ]( s
2).将其解压到/usr/local目录下:! B9 i5 s* T- l" {: ]
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz ! w* ~. y6 J1 r" u- Y/ C( A8 ~
& U& X9 V6 b. J' I1 S注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。2 e X! h. r* F8 C: h
0 l9 u/ A3 m) ~& x6 i& ^
3). 在root环境下执行如下命令:0 d- |8 U. X+ ~% L( A) f/ |- P6 p
mkdir $HOME/go
! J' j2 S1 G5 I8 C' R$ gecho 'export GOROOT=/usr/local/go'>> ~/.bashrc " h, n9 V A& B% `
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
$ }' y8 f' [; s: qecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc / d2 b7 z1 u) U: {& Z" B
source $HOME/.bashrc 5 w2 q7 L$ X7 \3 q1 q
5 ~# J; t% A" H. o/ v3 x4). 安装go get工具
2 R k2 T& G. M& _yum install mercurial git bzr subversion
; G) `# d1 [$ N5 j3 y! A0 B) N5 {" K
8 d3 v( H; H5 F8 \$ [- D9 p. b2. 获取源码
$ J& y. u+ ?: V$ o+ z2 @git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 ( k1 r: v" g: w. ?/ F: [( K4 s
获取源码:
# b, h1 Y8 e- K8 X9 X6 V" J6 v7 Tgit clone https://github.com/inconshreveable/ngrok.git
& |- c' C: E7 t/ O2 H. e' B
- C- j$ |% K6 z3. 编译
k% i# j0 R+ q
4 N( W) C7 d+ w5 d- p1). 配置环境变量+ Z% G& X( y) @# A
$ J# A- ^% o: r. h# d, ?+ S
export NGROK_DOMAIN="tunnel.bbear.me"
' ?& ]3 L i2 D$ ktunnel.bbear.me替换成你自己的域名。
0 c" v; r( J# O( h8 R2 z+ P% W) G( c& Z) H3 x
2). 生成自签名ssl证书2 p1 Z% O7 s8 \& f6 q W( T9 R
& A! E n5 v. E8 k/ qcd ngrok
- t1 h5 ~' \5 }- @ eopenssl genrsa -out rootCA.key 2048
/ d7 J2 e6 G' F6 n% |/ T% Mopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
) u6 Q& I' n# Fopenssl genrsa -out device.key 2048. t4 _9 g4 s) S
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
8 r& g$ C% Q2 v Z, C# ~' |openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
$ K B/ G; x7 s0 p% u y2 z/ F- ^% h, `cp rootCA.pem assets/client/tls/ngrokroot.crt
: c( \! `" \7 m2 B# D! w. q5 ocp device.crt assets/server/tls/snakeoil.crt
1 @0 y8 a9 j5 v" l% dcp device.key assets/server/tls/snakeoil.key
- ?7 I; x" ?% w" B* s/ T ~4 {$ m9 j( H6 F7 z* O' l
设置变量:* A# l+ T4 X; S4 N: Y7 b% H
( r6 g. i' z8 {3 j( Y/ y5 r: v$ IGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
% X; o& K$ f# S/ t R; h: g; V5 h! w) `生成服务端与客户端
$ ^! R7 e7 V) v5 K7 m5 H) i
" p' `5 }( Z: t0 A1 gmake release-server release-client
* X& n5 C2 S# x: ^+ x' K' q$ t* l7 N& ~
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
* B0 b( F4 M+ _+ X1 L1 ^* O2 e0 E: m, {0 [0 O
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
, c& D- O* l& b
& U$ U2 ?/ S9 V' n编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。% F! r2 D' E- q) J; G
8 I3 {& m' e' [, g$ b: y) V4. 交叉编译生成windows客户端% G) q7 c3 S3 k
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:- u8 K* h+ |. z3 |- k) ?. X9 q: u
% N+ V& |8 z8 R6 P# r进入go目录,进行环境配置0 p& B* X: ]% B0 P
cd /usr/local/go/src/
/ c" ] G% `1 I4 K/ S2 f
6 H0 b% n5 y5 _GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
5 C7 l9 r4 Y2 [0 Y进入ngrok目录重新编译
6 j6 O( B0 n6 Z# C$ p( @cd /usr/local/src/ngrok/' A- |" Z/ l: J
' r0 _+ o) m+ ^) P
GOOS=windows GOARCH=amd64 make release-server release-client
2 P" F' L$ Z/ J' I, J# k编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
' {- h9 [3 `! ^9 X4 q8 V) @ ^: e; V
5. ngrokd服务启动与使用
$ s, I1 u% p0 V) o- S5 U4 ^1、启动ngrokd服务端- z! B2 k* Z5 ]% H; S
$ i$ {) m5 G1 A w A4 B$ Z" V" d
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
/ @- T' _* s! `注意,让程序一直在后台运行可以执行6 N( R: y& o* A4 W Y
( {% ~: R9 p8 j9 o
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
4 v- \$ O# q/ t& |# y想要结束后台进程可以
& \6 w8 c6 H9 {9 W: L" ~
/ m" [" ?5 F) [' o; i8 l2 Eps -A #找到PID
4 |& r. j b& V" T& akill xxxid
2 d* J- f, H0 s3 X0 u7 ]7 _& B5 G2、启动ngrok客户端! A: M3 @8 ?3 D
7 o" W6 v- p C$ U' D i j0 Q' ]1 k客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
9 }. a0 B: h; X+ f
0 C8 T7 A5 w7 l* X' W+ cserver_addr: "tunnel.bbear.me:4443"
# E$ E9 l4 N- b- i8 Ltrust_host_root_certs: false " b) y2 E2 Q* [! z& h+ S3 C
4 n( A. G: w" b* w& R B5 M
再在windows控制台执行/ X: d4 z1 O8 Z3 ]$ U- c: f
2 l, Z$ l' m j, }" n, y2 Z
ngrok -config=ngrok.cfg -subdomain upal 8080
; z" d1 o8 b! D" ]% z8 L
" M2 C4 @4 f$ ]9 |5 H: [# [9 ]! s2 Wupal是你自定义地址。
# D4 h8 n5 N" B' @; n U看到这样一个界面就说明成功了 * S8 U. l# P$ y
$ D: g4 ^6 W* a0 \
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
5 X/ X- Q u G+ o1 @6 G
$ N' I. y0 ?. q0 E
b; B' q, B$ Y7 g3 Q2 H4 l
C. |' l# r/ a, \ ~: a8 }6 l原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
# |% H8 D7 ?# L |