下面是我在阿里云centOS7上面的搭建过程。
# o+ \ W8 t- W
: m5 M7 K6 ]# {/ r8 S c+ S0 [1.go环境搭建
2 Q* l( b }7 K4 u' B2 qgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 % w4 ]" b( I7 b# E
源码安装go的详细过程如下:
" V( Y& N: _% B8 ^. M0 J
4 H1 j5 g! x, p" ^ j: m* r1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。( T; i1 b- n' z/ U( e
* I( E$ l9 f9 |) y' i5 k2).将其解压到/usr/local目录下: Q8 H j K* J$ o0 \3 h1 T) Q
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz + y" D$ L* C+ l. G/ i
+ Y& @; {/ `3 |+ ^( }注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。3 ]' m4 s% y( ^6 ^8 k+ |
) j n) p& U/ S& ~" `/ J1 y
3). 在root环境下执行如下命令:$ ?/ U; z7 P4 i# z2 t
mkdir $HOME/go 6 q7 O+ F3 Z8 r2 l2 V( \- f
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc 6 d" Q! C/ ]( j9 X a) ~! a1 E: r
echo 'export GOPATH=$HOME/go'>> ~/.bashrc % b0 J. M% A0 t! R% P' ?8 Z/ ~
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
J) k2 ?8 @& X5 ssource $HOME/.bashrc
* s7 F5 G+ q9 y1 {
5 [- |" i5 W5 H6 l1 q$ n K, N4). 安装go get工具
) m- F! ~ U( A$ V2 S9 nyum install mercurial git bzr subversion ; T9 ^6 u* \( _1 N- [+ {
/ U* p3 L5 V7 a& M1 O# B2. 获取源码
0 u% ], U- Z5 Bgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
! l6 N% ?+ K( G+ _5 l. y1 `( R获取源码:4 A" P. Z; } t4 [; E- f
git clone https://github.com/inconshreveable/ngrok.git 8 f1 U2 S# [( C
& C j0 {) i r3 k
3. 编译
9 v" q5 r! N; u: ~4 b% X
- C$ j4 x% L( {; _' B1). 配置环境变量0 Z! W1 H: t2 C" @
- w: e H4 _/ P3 j, Fexport NGROK_DOMAIN="tunnel.bbear.me"
2 s- }- b* Z+ ?- i" Wtunnel.bbear.me替换成你自己的域名。 8 C- p5 I' Z) u9 S4 D# _
5 a2 ?, ^1 J# ^ z& O2 W
2). 生成自签名ssl证书
1 `1 f5 T5 C- R+ s; z+ k
2 V7 ^! ?* V! ]cd ngrok! T1 L% z+ q3 X6 Q9 C4 G% ^0 d
openssl genrsa -out rootCA.key 2048
4 J) X, u9 i* \. K) g7 T- Uopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
* ^; A7 f3 J# N3 L2 A- P3 s t; Qopenssl genrsa -out device.key 2048" o7 J s9 z0 N
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
/ V) r( P! s9 g% q' ?' vopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
# e# C5 R6 D) |( b: ]& H* Hcp rootCA.pem assets/client/tls/ngrokroot.crt
. ]' i$ ?' s5 f7 B" G0 qcp device.crt assets/server/tls/snakeoil.crt
/ r, u7 a6 Y7 n0 t8 R/ ^cp device.key assets/server/tls/snakeoil.key 7 F7 O) U& a% y2 s; e
/ J: u( K6 M. `5 \' ]4 o
设置变量:; j* f1 V# I" K$ `; X; ~
5 y% E P, g* t7 ]
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 - m+ ~0 g5 ^ F. P1 x% X9 C" K% t |
生成服务端与客户端8 g X: E1 z; {" [: D
* D$ }2 V3 k5 j, j5 \0 h, d! Umake release-server release-client : B" W5 i% L( [; q: E$ E, l
( r* ]8 ]7 h5 V+ U
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址: D7 ?# s+ w P( j8 V6 X
) k9 z3 c& w& w9 h
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
8 [1 n. y0 h( |; Z4 t/ B( M3 b
. x9 \& f: o" J. ?8 c% I编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。$ b O8 T3 B. r7 p0 \
1 B! P, e! D+ O
4. 交叉编译生成windows客户端) L1 Y+ s- M( X; O
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
7 f" O% D* w) e# V2 X3 t
# @( ~. q$ ?6 X' m进入go目录,进行环境配置% ], E' @( H1 p5 K: c
cd /usr/local/go/src/0 S; w# m$ r1 p3 P# @- L" v* t) c: E
/ j7 @) _4 p) f. ^) @GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash . J' \9 h. i/ K- `: L+ F
进入ngrok目录重新编译
9 l5 s9 M m, `! _: I8 _: zcd /usr/local/src/ngrok/# K v+ X! ~) @2 o/ a
9 J" N. U f' y' ?8 BGOOS=windows GOARCH=amd64 make release-server release-client & o! u& F$ p P" a! y' Q1 P
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
) G. f6 o: f3 j* O; q2 S
- j" J! r% W' Z6 e& j, I' g5. ngrokd服务启动与使用: w. V* O8 D0 c
1、启动ngrokd服务端
( ?, J) k/ z' o& D2 B
: _! q- b1 R# I) |: d- zbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" 7 n/ h; h: ~' Z# c
注意,让程序一直在后台运行可以执行
- R5 ~( ^: |7 N1 c( d0 M# D0 E
7 P( L# I" Q( p; D3 T' k/ h6 p0 Tnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
% X6 Y* n1 P# C6 L5 g想要结束后台进程可以
- S$ B- C N) Z3 L' D" ]
9 U& c z5 u _2 |2 v p8 Ips -A #找到PID
! O7 N; t8 \; c, y" pkill xxxid
5 \! r L# v5 o- v2、启动ngrok客户端
1 @& ^ v! H) q: E: i ~% W9 _- ~* C9 p+ P: k
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置" n# K8 M- ?) J* P1 G
1 r+ h7 l8 f% u3 h
server_addr: "tunnel.bbear.me:4443"
) B0 m& d. ]. l+ i' w: Ttrust_host_root_certs: false # C' v' o' }2 @8 ^1 F# K
7 e8 N( @# a9 ^ X
再在windows控制台执行
* \- W, G+ {. t
/ l' c6 {7 I6 ^- l) G' M1 V1 angrok -config=ngrok.cfg -subdomain upal 8080 ; i0 o" P, ?0 X/ h& K3 q: Z$ C* Z
/ M0 J7 C$ b% ]2 p& Uupal是你自定义地址。
* K% _6 ^% _5 ?) l8 ^, C看到这样一个界面就说明成功了
3 N( y# a; U9 G" c9 B8 \
, t& x# \1 V7 N5 b% Y如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
9 A8 ]# U. g+ m, K( I- [9 s7 t0 ^; j% M1 n$ @8 }# S2 f4 ]' G
( g) J) I2 i) o
7 M. R: Y, j- |$ {0 n
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
2 }) k- S9 g/ O$ |7 z2 Y5 ~7 O& L |