下面是我在阿里云centOS7上面的搭建过程。; m3 F0 b4 f; B. d, P1 b U+ N2 B
& Z* J6 u3 d# ] u- P3 Q$ U) v0 O
1.go环境搭建- f6 y1 U5 C$ z. H+ C8 _
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 & X# ^9 ?0 ^9 L/ X
源码安装go的详细过程如下:7 A6 w/ a2 x4 t* Q4 W& A3 M% o9 ]
6 h% B7 f" k" M- H: W9 Z/ J, v
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
h: ]2 p0 F2 {8 B: m, i7 G1 c2 Q& a% R2 u
2).将其解压到/usr/local目录下:5 x( J* o* B' o5 x1 a
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz & \- ]! j3 C5 r* F6 J& f
" K7 }; U1 j) ^1 h f6 m ]注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
, |+ }: \* J% U. u7 u
E8 }+ d# k7 i+ R0 t+ m3). 在root环境下执行如下命令:
+ m# u! ~0 Z, @: Zmkdir $HOME/go , @! `, z2 E, E w5 W
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
! M$ E) \% g. a' E: Jecho 'export GOPATH=$HOME/go'>> ~/.bashrc
& }/ _5 J; V5 Y0 secho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc ( E7 u( \3 Y' l( D& {2 m
source $HOME/.bashrc 2 ?/ j+ X4 @ D
* m0 {2 \8 b* E( w+ `" E- I
4). 安装go get工具
) E" X2 ?$ k9 u1 L8 ?1 nyum install mercurial git bzr subversion
. w: r% e; s* j8 a( {: _' M3 M( r1 a# C) F9 P. ^+ s/ ~, v$ s
2. 获取源码
4 ~, V) d) G7 D0 [; vgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
- z+ h& A8 C* e+ U7 ?获取源码:% o. ~ x: ^3 O
git clone https://github.com/inconshreveable/ngrok.git
) v# p: E5 j8 n# t5 w c* T! P9 S% P+ g1 Y0 c
3. 编译7 s$ X9 i# k( @3 s( [* r2 j: o
7 V6 Z6 S; V- N; c
1). 配置环境变量
3 v' U \, R' R7 ~, r
1 ^2 U. K- D1 h2 G3 Q; X% T7 Gexport NGROK_DOMAIN="tunnel.bbear.me" / I. f/ R5 f* d5 ?0 _& `. O
tunnel.bbear.me替换成你自己的域名。
) q7 @3 O2 g6 g0 F1 x# u/ O& `' i. u) _
2). 生成自签名ssl证书
0 t8 F j$ b3 {( b9 r7 a
7 Y7 X: Z. w/ M1 Z, kcd ngrok
9 \' k; |; Q6 C3 M- Lopenssl genrsa -out rootCA.key 20485 `- [" S) q9 U9 T# c
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
/ l3 \' s2 k+ I' Qopenssl genrsa -out device.key 2048
2 z% o0 y& |, E0 ]* @openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
- @ Q; ?5 U6 zopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50009 `0 W. ~0 i2 z, _
cp rootCA.pem assets/client/tls/ngrokroot.crt* G3 l# o7 n& `- ?/ V8 Q# }
cp device.crt assets/server/tls/snakeoil.crt. B* b* b" M1 r0 }
cp device.key assets/server/tls/snakeoil.key - L- q4 W8 {: U) A" F/ v# ` y. b
# l* m2 e2 r- a- C. o1 U/ h
设置变量:5 j, _4 X0 O% j& T/ O/ g) U+ }! S1 m
# l* l& C5 ?5 X' Y2 L. ?; m4 A
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
4 ~/ |* L* B, z4 u生成服务端与客户端
* k$ b: j: ^4 D( e- ~
6 t* g6 ~8 d( ^' w4 Hmake release-server release-client
4 e7 r4 D ~0 d8 ^4 m0 v
8 D8 K7 @) j2 d. G/ K5 A注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:2 ]0 }% | Y* c& L, d" ^5 o
4 V" F0 U. \" t2 U4 n; m0 S$ C找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。. k: `+ n7 \: T/ t
1 f1 k9 T0 J9 k( K编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
5 x3 o! O# s( X, F1 I ]# A8 q, n
: X0 E! G" ^: H* H$ E4. 交叉编译生成windows客户端+ L5 e5 u4 e$ y
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:( W' Z1 m" U) A
1 E( g( j6 d e% K
进入go目录,进行环境配置
$ K P4 T+ J3 l, d0 Gcd /usr/local/go/src/
! J# X$ T% b. J4 d# M/ W, D0 L+ b% m
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
. h4 G* |* b$ E; E0 W! n进入ngrok目录重新编译, J8 |$ J; d' O5 t" v8 ^& f
cd /usr/local/src/ngrok/
0 `; y( o0 E7 v6 }9 I1 o/ K/ T! H
: H. S% o X9 G- dGOOS=windows GOARCH=amd64 make release-server release-client
! V; J( |: S. o5 `; c8 A, _6 C8 f编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
& Q4 U4 I' H) X6 D4 J
' @9 u" W% u# n: w y5. ngrokd服务启动与使用' O" T' P: h4 G0 c5 Y4 O
1、启动ngrokd服务端& S6 I, x/ u d/ m% t0 M
! k8 f1 z# x* O8 T+ i3 i D
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" 0 n" k) r# D) p @* B8 R* A8 N
注意,让程序一直在后台运行可以执行; x% U! H* A6 M8 P7 A1 R# r, L
9 Z! T ?6 @7 J3 M' Z: z
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
! w; y d% g1 W想要结束后台进程可以7 S& c! ~0 d$ D7 w/ o1 W) |. I8 e+ ^
2 T- G: w- `" q/ l
ps -A #找到PID
* v" Q3 [1 K8 ]4 Q5 V! z. F' Ekill xxxid 1 O' P! l- L/ F F! |8 d
2、启动ngrok客户端2 d6 C3 ^; j9 n7 t
" C- N; ]# [* f; P9 L+ [客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
' ?0 y6 v/ v! w1 v" y5 h" b2 b/ g, _
& H: p) j% g1 N7 Mserver_addr: "tunnel.bbear.me:4443"
$ d& Z9 a- ~# P* \3 @& ktrust_host_root_certs: false 6 n" r6 x; E- N( N1 F) R
4 i; s1 y. m. ~9 Z2 U- s X再在windows控制台执行
+ t9 o3 B4 y& u( D# i/ ~
$ n8 ~, D V3 engrok -config=ngrok.cfg -subdomain upal 8080 7 A' y4 B$ w2 n
% d" R! \. ?3 o2 L. Lupal是你自定义地址。 N- T: a6 d/ u$ A# _
看到这样一个界面就说明成功了
! A5 I1 T3 a h1 A" o# D( x$ R8 l
- u+ @4 ?4 L2 _( F4 U3 \ W+ K如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
& [# y7 q2 }1 H$ S3 ?; |5 P8 ~7 Q5 \; b8 h8 x8 x8 L8 u, c
% }- d. ~% j& @# E4 \6 |
$ f% k" ^7 M8 |6 @0 Z$ |+ o
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral* r+ I. T7 l8 m; l& k8 h: t( n
|