下面是我在阿里云centOS7上面的搭建过程。) w# u1 W6 w! W8 D c4 F
* Q* Q4 f" Z5 Y. J4 T0 C0 t8 I6 E3 ~8 t1.go环境搭建( {5 d* I, E2 L' d, h. I9 u
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 ) U4 P- ^2 w4 N0 b+ }+ a1 K
源码安装go的详细过程如下:
4 D* }' f; R6 Y
+ @6 z7 a" L0 K! \- O, X* S1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
" g# q, h2 l, `8 p7 C4 ^
1 z1 U$ R5 i7 w/ o9 o( v2).将其解压到/usr/local目录下:, D! c0 t0 y6 {
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
* H7 W6 Y5 [+ m8 `1 ]
' ~/ B: ?; n1 M; A注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
, u0 S: j& }4 k" ^. Z T
- u9 `, P9 W& u# K3). 在root环境下执行如下命令:
6 P; _% w1 O# H: B: `! {mkdir $HOME/go ( x5 M7 S3 C6 x& l% `
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
& O+ ~- d; G+ W# n! Lecho 'export GOPATH=$HOME/go'>> ~/.bashrc 1 v) M, Q2 }7 \- }5 D
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc 6 e) r& k% \1 o) r
source $HOME/.bashrc 8 a" C9 s1 B3 \8 [! ?
0 ]: P, M+ d1 I* y- L( Z5 G
4). 安装go get工具
3 C$ j9 x, A6 n- B! P* Yyum install mercurial git bzr subversion 8 q+ [* W" a0 X _0 v
; J- y- N5 E* j K: Y) O
2. 获取源码; q# l$ [9 X0 d a
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 - O% k7 |6 q# ]0 J) _/ C
获取源码:
* {, v* @5 q+ k: I5 x6 agit clone https://github.com/inconshreveable/ngrok.git
& W- g; d! b) G9 I) p+ Z
3 s, C3 d$ q) s; b' }3. 编译
( f2 B% J4 z1 \$ H, B3 }( I7 Z# ?
1). 配置环境变量
8 Z' @3 R0 ~9 h! c2 @* P0 b9 H4 g6 [4 n, ^9 }* c9 a' H. ~4 l
export NGROK_DOMAIN="tunnel.bbear.me"
' i3 C% s) T% A) _3 R- ?tunnel.bbear.me替换成你自己的域名。
! C4 J- I9 J6 L4 k
! s' e5 q- O/ H) Z& `4 V# x2). 生成自签名ssl证书7 W+ \" B( c( B" a: L& a/ m8 @
$ Y. _6 v. _3 A H. s ]cd ngrok
. u& Q2 Q# @- e, W1 B6 A( ~( \9 \4 [7 Iopenssl genrsa -out rootCA.key 20487 M4 O1 y) \2 V; ?) T% F
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
5 V4 H+ Z% ]" e" J' ]& ?openssl genrsa -out device.key 2048
0 b: E9 s) Y# F. }# `% j% e. L, T0 Topenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
4 P d& D% }! C0 v" A3 K3 D, wopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
& m/ x( i7 t( N/ |) x; E; G9 Tcp rootCA.pem assets/client/tls/ngrokroot.crt
. B/ O4 ^. _* B$ T( p8 H3 kcp device.crt assets/server/tls/snakeoil.crt: D0 x. u1 }& @
cp device.key assets/server/tls/snakeoil.key
* [# I* ^2 _" ^5 E3 j4 z$ Y& p" x; Q. n7 @
设置变量:
8 K) X3 Q5 W1 F) Z3 O- A8 z2 y- b# T* L$ d
5 a/ x' y3 U+ y) B/ H6 EGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 : X) i+ Q {! t. M4 h4 Z1 {
生成服务端与客户端
# j3 s( k% o I6 a* ^4 G2 o
7 {; ?& E4 K* \6 b9 Omake release-server release-client 3 L$ V' k) w# S& r9 O+ D5 S
/ [6 A* Q: S+ P( Z+ v注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
! ~4 o7 P4 m6 Y$ M4 g& `/ v# f
: d3 I1 I! {# f7 z# _/ S5 [% i找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。5 b5 x4 g, ?: q1 s
, g. T; \/ M) n9 \' e5 x- e编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
`* i4 H2 M5 X4 k+ @! E, B$ o' U1 j- i0 o. W9 B' H9 X
4. 交叉编译生成windows客户端
+ k9 j- e/ }1 i. S上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:$ X7 v+ p- [' D' e0 o
0 ^- G5 c1 o( j1 U$ R进入go目录,进行环境配置
: ] P3 }. H `. Q# O3 H7 \cd /usr/local/go/src/0 l& W o* w( B; I7 R
1 }3 @! {, m* ^9 W1 z' `6 j# AGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
# f$ J6 D4 [+ N$ W4 X( S进入ngrok目录重新编译
1 |8 E, _- W0 p. }+ Acd /usr/local/src/ngrok/" V+ [$ i3 q& X( F; J7 l) q
# ~: y( l U8 d0 FGOOS=windows GOARCH=amd64 make release-server release-client * w4 ]; e' j7 ]4 s" w
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
* `, k7 U( }1 l$ }1 [9 v& r& ?3 f0 l& ?0 |- W" I
5. ngrokd服务启动与使用
1 x0 W7 t+ k( M1、启动ngrokd服务端
! I- F5 N9 k5 q3 P f! \
3 B& C' b# K) w5 W1 x9 n4 h; Vbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" ! C7 w, Q, [+ J4 [/ x3 @7 p( o
注意,让程序一直在后台运行可以执行- h! F. W8 c7 I! z ]- e
4 f. H; U6 Z! K' U2 fnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
+ A. R5 m4 P1 p5 F想要结束后台进程可以# H/ k/ J; T8 e; j4 M; D) H: ?
F+ T, z4 n& }5 G- s( W9 M: t/ S' Aps -A #找到PID ( _6 |3 {/ R& H' P2 ^' X
kill xxxid - u& l2 C+ y- N' k; s$ Q3 u c
2、启动ngrok客户端( E- [$ C) W! c0 N& ]5 D7 S
3 s: w+ ^- P4 F
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置# H# R: c3 v/ o% G `
" {6 N" ]) h: U- w1 O4 p
server_addr: "tunnel.bbear.me:4443"
# A& x5 n- M4 ]9 {: U: _trust_host_root_certs: false . f- k, ?' ^* n- n5 s8 H: a- r( R
8 ^( M& H$ z% o8 ]再在windows控制台执行" K$ E' i# u r* T: v
" t/ }# ^5 @8 u9 }8 j! n( h" _
ngrok -config=ngrok.cfg -subdomain upal 8080 : h d b$ D C; b
$ l& p- E5 y9 O/ a% Rupal是你自定义地址。
4 y5 A' i5 }3 Y: `9 Z7 w6 ?, o看到这样一个界面就说明成功了 1 c0 w( I8 ?, A0 Z4 @" c
! u+ w1 M2 b4 H4 ^9 v" x% I, F
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
4 ^6 G. u0 B. S7 k" _, Q1 t% w& E2 R% D& i/ h
! D6 O' q: W }6 j- b. ~1 n
' E" ]3 W* t# p! v/ X
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral6 W% W D" x# e. `/ w
|