下面是我在阿里云centOS7上面的搭建过程。) i: a/ w7 C+ w' P( D. r d- H
. T) S1 q, _/ s2 ^# o/ `1.go环境搭建
2 g1 K# [4 K L5 A6 q% W o1 }( Ago环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 + f' F" E6 p/ P- o6 M
源码安装go的详细过程如下:
% ^ Z' v( w- F8 F% {' q
9 m$ e2 |, {. P5 Q+ W* E+ _5 x7 |1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
5 X5 f7 R1 C! T$ _
" ^# ]# E7 v4 J/ i2).将其解压到/usr/local目录下:* l2 ^) a1 g$ i$ N
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
4 P+ k1 E8 g2 o
; j" }& e. R" ~0 `) v! e注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。* c' {, E/ q% ~/ M+ m2 |
4 ~7 M; a- }- f2 x ]7 k* v- L
3). 在root环境下执行如下命令:5 I# k0 M( A! H# h1 t7 N/ U7 Q# I
mkdir $HOME/go , e" p7 R. h+ m" `$ A" Q' f' ?
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
& F* _8 `: n% \' W/ Wecho 'export GOPATH=$HOME/go'>> ~/.bashrc 0 ]! F0 r, B$ A* U' d
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc 5 X" l/ G# p% D9 I
source $HOME/.bashrc % G9 @# g& a5 f. v) J/ |0 J, J
1 o! }1 B# d) v# N; z4). 安装go get工具( D; d$ i$ D% Q+ A
yum install mercurial git bzr subversion
9 ^1 N4 F0 M6 ]) a; K. h: X6 E$ R! m+ i
2. 获取源码7 ^! g* q7 S# b( b1 f
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
+ f( O# m# ]# s! {8 b获取源码:4 X( W7 T% N6 z8 T h7 P7 I
git clone https://github.com/inconshreveable/ngrok.git ! k3 y1 T2 m6 r, ?: r: f" t4 o
) E( f2 _! K6 W4 j% X: H f D3. 编译+ c/ O& y" W6 |0 g
# e3 d t5 |! P- U$ L* y' J! R
1). 配置环境变量
/ X9 ^: A) ` i$ g* Q% x" ^
: S3 B ^9 _ `' Hexport NGROK_DOMAIN="tunnel.bbear.me"
- a' x3 ~/ ^& W# J/ C7 q. Dtunnel.bbear.me替换成你自己的域名。 8 \$ y; v2 m2 Q7 u1 _
9 T/ o# h$ U+ l+ a v, w# X6 s
2). 生成自签名ssl证书2 {+ l+ d6 @! l8 e
: g( i$ W9 _7 A$ _
cd ngrok
) A: I5 J, I5 ~9 A1 k% i! yopenssl genrsa -out rootCA.key 2048, G. J m. @3 O
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
$ k5 b* Q5 Z! F& {' f+ Kopenssl genrsa -out device.key 20484 ^- v O: I* W8 y
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
; }$ Z- t, z9 p' H9 e) Bopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000! s2 y' Y& o& D3 Y `/ t
cp rootCA.pem assets/client/tls/ngrokroot.crt( k' N( A& p) k8 |
cp device.crt assets/server/tls/snakeoil.crt
- E1 R, j* T. I6 Ucp device.key assets/server/tls/snakeoil.key % h# _, `, [5 f' S/ G
& U- z% H; L q: k7 d" u
设置变量:
6 r9 I/ h; @- J- H: Y
7 T9 `4 \0 ^- a) _+ m" B7 E0 cGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 3 S0 @$ E% \/ T
生成服务端与客户端* j4 N+ J* l, i- s5 u1 w2 S
% z. {7 c) J1 E# d) x, i' l0 O/ `make release-server release-client
( J& ]) {3 @4 I
: F! L. N6 X& J: C( ?8 n4 O, v$ H注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
! a4 v( D9 j9 _
8 L! v5 M, ^2 ?) L4 t/ ~找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
4 a8 X5 D* f6 s {# ^. A' k
' ~% Z0 x8 t9 m/ Y( e7 L编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
; d4 d' {2 L* j8 d* h# K
$ q3 L/ I' F* f7 \' _4. 交叉编译生成windows客户端6 ~/ D5 ]3 T- r& k
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
2 s6 w. ]- x0 V; q/ K" h$ c" W7 e+ l/ o+ H/ ?7 @
进入go目录,进行环境配置1 h" p8 @( D$ H+ { J
cd /usr/local/go/src/
# j S# b7 m7 U' | N3 d8 u
, \) M: V9 f; E+ @. eGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 4 l! y5 h, w; v9 D0 Q
进入ngrok目录重新编译: h& t7 s0 e n7 p2 B
cd /usr/local/src/ngrok/" ?% \$ M9 c8 C. c( T. ?* a
! g5 h4 @8 P1 U3 f) u3 u& `! _
GOOS=windows GOARCH=amd64 make release-server release-client
5 G1 j/ B& J( Y+ b6 p3 G4 @+ X编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。2 H% n8 b& |& T( Q9 B. M' u( S: ^- a0 V
8 c' y# Y, a" X4 A
5. ngrokd服务启动与使用' y" t! x: M- y3 k7 E) H
1、启动ngrokd服务端
/ S4 W% H/ Y9 `7 K. D9 r* X2 L" b6 p4 q' K! d5 ?( ]( w
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
; ^( ~: Y( N0 D' e1 |注意,让程序一直在后台运行可以执行" }% ~* v9 a' G7 |# Z ~' {0 T
1 ^* L, M& _, V( u% b t
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
) m7 e7 P( m( k6 v想要结束后台进程可以* W' F; N% g8 |, w
) V: s; V: c8 q0 j- K- t2 V/ S
ps -A #找到PID
& q3 E: K9 a( `: E6 {$ _kill xxxid ; k: D0 n+ D8 T5 [$ x+ F7 C0 N
2、启动ngrok客户端( R% L0 _2 q: ~, E
7 `; \5 W( i0 U$ t; g5 o
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
( s. ^( r6 f1 g& S4 B
3 d# b! L X/ K# s V* x0 Q( Nserver_addr: "tunnel.bbear.me:4443" $ j' f2 C+ t% Z
trust_host_root_certs: false ! @5 r+ f0 ~0 e/ D+ M! P( a! F2 F
' t# ]: }" w2 d; Z7 Z- K
再在windows控制台执行
2 R9 W/ b: I* ^0 @8 z) }3 }4 Z) y$ g- _$ N
ngrok -config=ngrok.cfg -subdomain upal 8080 5 m6 P" H* }- k$ S! |
' a7 B O: Y8 mupal是你自定义地址。
) G; F2 s$ ^5 o看到这样一个界面就说明成功了
, i: S0 y7 @$ w; w* R% d7 g: ]8 n) U
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 % ]: I3 O5 S2 r" l0 C, m; y+ {. V
U a9 R) U8 Y/ ]: Z
4 M( T& D# H+ t4 }/ S
/ P; l& J4 d9 S0 t3 U, A0 s原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral$ T* j* v2 J, s6 l
|