下面是我在阿里云centOS7上面的搭建过程。! z3 r8 Y* p: p0 i# _. I
! W! i3 k7 l# s2 j, }! w" f
1.go环境搭建
+ m* R" a* D% E/ \( `& s6 Mgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
5 x) x4 n2 t7 i" H4 j# Z! L源码安装go的详细过程如下:
; }* B; O: Z+ g X0 C- C8 s6 L" n, F0 O+ ^
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
, x% X' F7 y6 t0 C( |: N
) l+ w) c) B* R& _" i2).将其解压到/usr/local目录下:
$ Q1 K2 h( Q( k- [; ]: m0 ?( Mtar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz - e) F1 q c, R# H2 |6 f" L. E
: R& C5 j& k* G! k注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
( a1 p5 ]. X4 C7 n9 E2 ?' U
4 q0 B; M: E |) _! y; ~& A3). 在root环境下执行如下命令:
/ {0 q9 R5 r: i' W& \( D" tmkdir $HOME/go
) H1 {+ |" s$ @9 J1 U5 R1 Recho 'export GOROOT=/usr/local/go'>> ~/.bashrc
9 I2 J6 O1 s: f! g; M: J0 Jecho 'export GOPATH=$HOME/go'>> ~/.bashrc
8 C C, B' K2 ^ q4 Becho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
8 m. S, P+ V) h- p" w3 `. Csource $HOME/.bashrc ; Z; `9 p+ M6 K& P: u9 @& ^
' [- i+ f4 h0 G. R+ ^3 V& E
4). 安装go get工具" P B7 d6 t$ t$ ^- E
yum install mercurial git bzr subversion
+ H4 E8 b* G9 m i: J/ H/ Z3 ~
4 R! [3 Z& i! B! C- O3 K3 ^9 l2. 获取源码" @- P! d, t/ U5 G. g
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
7 a7 o5 r& H* W, n& ?获取源码:
, R) \: N4 V$ Q6 G2 X# z+ }7 {git clone https://github.com/inconshreveable/ngrok.git # ^! O, o7 W/ Z! q7 J( J
" \* N% t- m6 P4 Q
3. 编译
8 `1 f+ P; f' M, D( i3 c6 ?
3 `) g/ {" o+ t% Y, m5 e1). 配置环境变量3 [" o% ]" |0 b; @, Y" A. B
2 D F0 f1 H4 L) Gexport NGROK_DOMAIN="tunnel.bbear.me" 3 N2 [6 ^ o) D) k7 s. c3 J/ ?
tunnel.bbear.me替换成你自己的域名。 / ^; u' |0 B% S' C
! I+ f) R. O' T2). 生成自签名ssl证书
. i% \& P, {8 k0 \
: x- P O3 h! N1 Jcd ngrok9 W$ I" I K" v) d% h" d% U: \" A
openssl genrsa -out rootCA.key 2048
8 M# A I. U& S' q# oopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
$ w' O/ F7 A% C* C5 ~openssl genrsa -out device.key 2048( \6 l' e% k( ?
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr& r5 a) Y" L1 A7 w4 {
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
3 G$ x2 H4 F# H: dcp rootCA.pem assets/client/tls/ngrokroot.crt
) N* ]* c' j; c6 q2 d6 Ycp device.crt assets/server/tls/snakeoil.crt' A6 ?7 F' b0 y. v& }2 d) t
cp device.key assets/server/tls/snakeoil.key
" d' C$ n" y$ t7 u3 p' U$ B
( m: s) P! j8 K; T/ p5 b9 Q设置变量:
( B5 J: ^! B' A* e6 w' \/ g2 R- R$ e
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 % ?' h' e c# f
生成服务端与客户端
; T; m6 o# g o, s" h. J; i( a5 q" l; l8 a9 K/ p
make release-server release-client 1 v4 H- g3 `" ^: E$ _0 O, y
, `2 R* K2 {" ?7 Q" E8 m# d ]注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:( D S' {4 L, ]" b, }0 f
3 @% l* f0 i8 M- _
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
4 ]" P! E. _9 [ S: L0 Z# p
8 R, b8 c3 M U" D' n; _编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。8 _/ D$ N: I+ u1 u( l. m
" ^1 d- g* ]2 V4. 交叉编译生成windows客户端
1 ?0 ~* Q6 O" {+ H上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
' j7 A% X, A7 v# E; D+ T
5 i( g! V" ~$ E/ s, b3 h" e进入go目录,进行环境配置7 D$ I Y, M) Y
cd /usr/local/go/src/
" T( Q" [6 v- g
& c* M+ q' M7 j; U# u& KGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 8 _: K7 ?4 ]9 I1 C$ w; E" W
进入ngrok目录重新编译* a% @5 g/ X0 f5 ~4 b
cd /usr/local/src/ngrok/
4 N* k) ^5 ^0 n5 {( E" @
7 B! A+ C. F) E& R8 P9 B0 \3 _, IGOOS=windows GOARCH=amd64 make release-server release-client
+ \" a3 y! {9 Z1 |0 w! S% S编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
/ D& Y- q+ m3 S+ |) y x1 E3 g- G. T( {) I& P# G' i
5. ngrokd服务启动与使用
% z' Q1 G n9 ^ g7 I+ q* F3 d7 H1、启动ngrokd服务端
7 l3 x2 P# l: x8 B* S q: r/ [7 {! J& @
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" 8 c. N; _! A( }$ A2 S* j- u* O+ ~
注意,让程序一直在后台运行可以执行5 p. ?) ~& r1 T% \' f. G# t$ {& b
/ D2 r% o4 d$ V) h7 F& m2 Enohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & - c" @/ H0 E5 o" P3 U) q- s% L
想要结束后台进程可以
6 u T) p1 K% y. @, f% z3 x6 {6 W6 X. l" {8 V* A; [ g
ps -A #找到PID
: Z a8 M9 ^% x6 d: K* Ckill xxxid
7 }* P% {7 T/ T. \2、启动ngrok客户端/ e% M, O9 ] [: ~1 {
. @. I8 |9 S9 v
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
5 ~+ m8 e, S( r9 n5 A, C; I" n
, m" Y6 [% v8 j8 Y$ W9 c$ Rserver_addr: "tunnel.bbear.me:4443" 5 i- C7 T$ [: C* K
trust_host_root_certs: false 0 L/ P$ p7 N! X' D* S+ p
/ l; ?, {! y g4 V* U: Z* c
再在windows控制台执行3 D$ @: o! ]1 K! J
$ N2 z$ D6 F+ Y
ngrok -config=ngrok.cfg -subdomain upal 8080
: {3 }2 w" [! L- c3 R
2 U! }# Q5 i. ?5 Fupal是你自定义地址。
! l% p9 }0 w2 _+ G8 Y6 w看到这样一个界面就说明成功了 ( D! g( I! n5 e e6 @
3 o# K: t- h7 N0 o如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
9 U& c$ `/ K6 B$ A( l1 I" o4 R8 v" N1 f6 e# A- y+ P
: N" J+ A, x7 g! g! W
- Q2 D; V4 s- Q原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
, ]! Z" M* w& P |