下面是我在阿里云centOS7上面的搭建过程。
6 s0 {, d! Y- W
3 w3 [$ F0 L" W0 \" d1 U6 X1.go环境搭建
. p; q) P& f/ D! H( fgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 - `+ G# w3 [$ k& ] p
源码安装go的详细过程如下:
$ u |$ S" r5 E! b# ~/ b0 S: v( n
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
: I4 Z2 ^( `1 w( d- T- x7 \( B y% ^; P
2).将其解压到/usr/local目录下:' a) q+ B$ {, g q
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
8 n5 F) X( w0 A4 n9 B) N4 I& H) E
/ c- ]& ~5 u- G" y注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
% T6 ~; C8 l- G S# ^3 H( ^2 A! I
3). 在root环境下执行如下命令:
- X: i! r: h2 ]% Amkdir $HOME/go 2 }1 l1 J W) Q. o# ~6 m
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
' t5 J( i6 W( m/ @" xecho 'export GOPATH=$HOME/go'>> ~/.bashrc & _5 G: e4 P* N/ y3 d
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc ' M1 g0 q! ]3 L# Y( k, |; }' s
source $HOME/.bashrc ; V! z8 p/ p, \
! x# ]: Z; S5 ?8 p- G% I
4). 安装go get工具
" i% `8 O, H8 nyum install mercurial git bzr subversion
( K% {6 d* p) ]' @/ n( p- `
/ m. z9 B* @( ?. W/ X2 z2. 获取源码: X$ U" {' Y; W- f* d, _# i# _
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 ) [1 }, _7 R5 K! w+ x
获取源码:+ l. U0 E b+ O+ H W' u
git clone https://github.com/inconshreveable/ngrok.git
' S6 {7 @' D2 X. d5 b) e) Z0 T3 e! A- T8 i3 G
3. 编译
C, g" _1 h* n7 U" g; ~; y* V+ F' o$ E3 {+ U( Z
1). 配置环境变量
7 C8 Q4 h, M# ?0 E1 L% S- i4 h0 X" J5 C- s& [( p7 @6 N
export NGROK_DOMAIN="tunnel.bbear.me" : L) G/ @5 c( _
tunnel.bbear.me替换成你自己的域名。 ) D7 e% h: f; \9 L' N. e
- _; v" E/ G- L) A2). 生成自签名ssl证书
7 b9 y' M5 v( k5 U3 I: F& J# J5 Q( q( \# f2 D
cd ngrok+ x( h& R4 h6 Y8 S6 \$ Z; |$ F8 C( M# A" Z
openssl genrsa -out rootCA.key 20482 w! i2 g- U+ O
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem1 D2 j+ U) g1 P
openssl genrsa -out device.key 2048
( m! D! l: A3 \2 Copenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr9 n; v0 w8 E) f' n; a5 S
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
5 ^: D; |4 W& m! A/ D( H" ]cp rootCA.pem assets/client/tls/ngrokroot.crt
8 C/ U2 c c, X) Ocp device.crt assets/server/tls/snakeoil.crt
- W( Q# d8 N' P* zcp device.key assets/server/tls/snakeoil.key - q. y% l7 Z/ h' F& |
% `* }0 c$ ~6 L2 X" T设置变量:
3 }' ^$ Q* K/ i# Y# E2 R
% ]3 ~ J4 w# F( {GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
) B: a3 Z! a/ J9 N生成服务端与客户端( n- _; Q. T1 g: `( p
0 J: s+ L0 e; G, L
make release-server release-client
& V; J6 \1 P5 p) L7 ?' x
1 } y1 O2 A, W注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
8 ^ W! b* S- q- p
/ o) y: `4 j' K9 Z, A找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
; P/ T% [2 Z3 Z/ c1 K3 G. e6 _# M6 w7 j
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
0 g3 X3 S5 V! F4 n+ s0 y
# g+ N7 T' O8 w4. 交叉编译生成windows客户端
3 h, E0 P4 \" F/ X" M' {上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
2 ?- d% ]' @8 a2 c6 c1 F1 h/ W7 L4 E
进入go目录,进行环境配置% v* v! z9 x. I' b
cd /usr/local/go/src/
& ^/ ^' f5 j* m' c( w( j
/ v m2 S6 _+ K$ `( g3 |, WGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
0 S! L: `/ p" S2 z) Z% T6 t0 r- c进入ngrok目录重新编译5 p# z) H; P) M8 M$ |" k
cd /usr/local/src/ngrok/
$ E" B+ `+ D9 m6 A# E) x3 B. D- W7 c- u& g6 X j
GOOS=windows GOARCH=amd64 make release-server release-client
3 u7 P# j6 |3 U编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
! z, b ]" m7 |0 C9 U3 g |4 X2 \7 t( k7 ^# O! {) X" `
5. ngrokd服务启动与使用& |1 T/ e' v5 L4 \( _; P% H. x
1、启动ngrokd服务端7 v9 e# b' _5 H. ~5 ]- n0 P
7 @6 `# {# G, b- H/ Ebin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
. z4 V8 t# Z' S6 s1 g注意,让程序一直在后台运行可以执行
" K! J2 Q) N! N; ]8 g/ X1 O( H- f. t/ J- b9 E' S% o
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
8 s. V: [" \0 V想要结束后台进程可以
5 u- q0 b' y: W/ l1 r0 ~9 o) r+ |
6 m$ J3 Y' E% xps -A #找到PID
+ J+ _8 P& C/ hkill xxxid 4 q3 w) m# b" M: i% J2 K) c4 ~
2、启动ngrok客户端
0 r1 f0 z7 C) W( w
5 T1 M1 @! c( q7 b# ?( \" B/ J% V客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置" a! M: `+ {, y7 F' R* Q, V5 [
- q4 \; R& b* R
server_addr: "tunnel.bbear.me:4443"
; l' C7 {. y% jtrust_host_root_certs: false 5 g& s% x) ?7 }. c& F
H7 z3 Z: A' D4 I3 Y8 ]再在windows控制台执行; \' D# P, i ~0 Q, d1 q8 K' d; {
. g# M4 E* K" x- O
ngrok -config=ngrok.cfg -subdomain upal 8080 ( |4 _3 r) m3 G9 K" |, E
% [' r$ r; [8 c V5 G! Q& u
upal是你自定义地址。
1 q: @) {+ O: `看到这样一个界面就说明成功了
5 d8 I4 a5 b6 U" q& h' r4 R
" y& n# `5 o* H: N a, r2 R如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
, e+ E( y1 D7 m' {" m6 i3 Q1 Q" a1 s1 d% q8 r; e% J- u
& y7 R; Q w( v
% o# y8 P! G8 K' \9 a原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
: E" q! q+ x9 V+ b |