下面是我在阿里云centOS7上面的搭建过程。$ h' V. a. k3 f! _& {" }+ {7 a
/ F$ c) ]9 {9 w Q, N: ?1 F$ I, L0 ^1.go环境搭建
( z2 {$ q. h# P# J* N2 C- ~2 jgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 0 |/ k4 Y/ o9 d* a
源码安装go的详细过程如下:9 U! x' a6 B6 f8 j# ~; B( R
! H- s6 _" v! H, H1 o" a$ q
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。3 T4 G" l Z: l0 I
$ ~( C6 A: a$ X+ a5 I2).将其解压到/usr/local目录下:3 ?: R! p, X; R( h- E
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz 1 R3 T; c: }0 T2 L; @
8 b6 V4 Q& o: T; O" X, t4 k
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。! k U' J; N8 q2 S% R
E+ ?, e# H. {3). 在root环境下执行如下命令:! J& F& Z/ N" o5 _
mkdir $HOME/go . Z! R* r- k- A- d
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
, v' B$ W6 T, z _8 m5 {! Mecho 'export GOPATH=$HOME/go'>> ~/.bashrc
; ?# d( U2 C5 ?% D6 Z" ]echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc ) x* ]: {% i2 O) T# B# y6 v
source $HOME/.bashrc % h# l8 n9 B4 W" A4 b% T
9 I7 w2 C, x) H" ^: c+ u% |# }- B1 s4 r5 q
4). 安装go get工具' q/ W8 [' m& `2 R# F% s# Q
yum install mercurial git bzr subversion ; X" O6 ~6 ~) Y+ K: y9 Y% i, z& _
3 @+ M! t% @( z$ I) s8 g+ I/ G2. 获取源码
: ^; a( C: U' W$ Rgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
, {% M0 J! z5 G8 }获取源码:# M6 d$ n3 A# y+ g# r/ V5 v
git clone https://github.com/inconshreveable/ngrok.git 0 S6 z { [) H- N
3 y0 H' ]% G* K1 h4 [5 Z' P/ [
3. 编译 }6 X) S/ }! ~% u$ k+ f6 H
+ e' O5 a* e/ g9 Q( Y1 N2 X& B8 S1). 配置环境变量1 p! I+ y( _2 F3 L/ ]
' A- j" x+ b$ z; u9 @. R7 ] jexport NGROK_DOMAIN="tunnel.bbear.me" " ?0 f+ w+ t- i$ d' \0 f9 M+ z8 D3 |
tunnel.bbear.me替换成你自己的域名。 J! M7 n; J+ r5 g7 @
3 r' I6 D* b0 _1 b2). 生成自签名ssl证书
" {1 ~2 q9 N! W& z" ~& ?
7 P8 U8 m* a/ X" X b* M% i Ycd ngrok; f9 v* L+ u' Q( \
openssl genrsa -out rootCA.key 2048% ]: v. j( j# Z/ F7 N3 G" K
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem8 e! \; t( ~4 d, W2 [2 [: W
openssl genrsa -out device.key 2048
- L7 \4 P1 c4 E2 @& c! e5 aopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr' }6 h- R U" r/ W% ~/ q) e
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
( D" J- K; p' S3 {cp rootCA.pem assets/client/tls/ngrokroot.crt
& g: G! I! E% F. {& v7 j/ b, mcp device.crt assets/server/tls/snakeoil.crt
, F& {- t/ |. v+ |# u+ j- Ecp device.key assets/server/tls/snakeoil.key
8 g ~% C( T5 k3 N8 G& P$ B/ v# ~; b) e( _' C! b
设置变量:
8 c: H1 a& [& V6 {9 q6 o1 n) s: _5 ~
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 * Y/ ?2 t: ]0 H" d2 D; D
生成服务端与客户端
! M) j7 g% O6 A( K$ o; i, [2 t. i1 z: M# R \
make release-server release-client
% }" J' }' U! i+ J
7 X: h/ [3 x* _2 w: K- V注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
( d5 P: O) p" R) h# |8 T( |0 g) P" a$ m' a6 k+ h$ Q8 [
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。* W* g- O! Y: y6 G- T* j! [
8 F* }& x6 m: X0 ~3 `. b
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
, K% V$ P/ ^+ w0 p; T5 B7 d0 }9 v; O( N! I. J
4. 交叉编译生成windows客户端, _+ q1 |& s% A: `- k Z7 n
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
C5 N x9 @( j/ p/ T# j: M
9 U$ \% {8 b" ^! x6 y) N( r% J进入go目录,进行环境配置
# p+ Y2 s4 d) @/ o* L( y" p5 O$ Mcd /usr/local/go/src/: u8 C6 C; W- e6 O( U' g
5 Q0 L; l/ w) i
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 2 u3 U$ x! o x& @* b
进入ngrok目录重新编译; |4 B- Y6 K% e( N
cd /usr/local/src/ngrok/
, |" ?7 N- j. z5 ~9 ?6 j9 V4 q. O% }0 n9 }& ~
GOOS=windows GOARCH=amd64 make release-server release-client
9 f( b8 f; a" H* G编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
+ c7 [6 w4 G) R" ]4 c( x) f$ k* A' p% f# `. D; o
5. ngrokd服务启动与使用/ s. j1 {& {+ Y& ~ i, d
1、启动ngrokd服务端
9 c% T8 C; ]/ t1 h9 q+ J$ M9 f5 z/ G0 m5 @$ P4 c' v0 G; k( S( b8 x7 W
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" 5 D! D; v1 o' u4 o4 l4 L
注意,让程序一直在后台运行可以执行
9 t3 L& t8 ~/ y* e) e
$ r1 C$ E4 P0 I& G# `6 Z: Bnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 0 E& K1 x! w# b( b0 |$ Q# @
想要结束后台进程可以
- S1 j* O1 l% Y M6 N `
; h! z6 J9 l/ ]$ D9 _& Aps -A #找到PID " F& a4 O- S, c* O3 o9 j! M8 A& u: y
kill xxxid
' o( ]- Y" ]0 J5 B3 t0 c2、启动ngrok客户端6 M" q$ F5 t4 t
# ]8 E5 u* C% s$ T客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置$ E& x" y1 V! V7 X; C. E( g
2 E- c0 _% V; d4 f; F
server_addr: "tunnel.bbear.me:4443" 7 {9 n$ N) t1 H' Q
trust_host_root_certs: false 9 E% Z5 o* {# f g9 G6 [8 E$ M' `
* c) N/ _2 ?3 e" |! W' N) ]
再在windows控制台执行/ D. T0 J: y ]* Z9 y/ Q, n5 E
6 L& R: d1 _; u% B$ H0 L6 _ngrok -config=ngrok.cfg -subdomain upal 8080 - k% |' Z. @8 L0 a! n5 a Q% M
# N) W$ X7 ], l+ Y3 Kupal是你自定义地址。' d. O/ S G# |" F
看到这样一个界面就说明成功了
' X8 U: M% n4 N& Z7 o: Q! c: q
$ Y0 p y! @5 h$ U/ @( c* r% w如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
I+ G5 P6 ]8 }3 Q% N2 G
0 ?6 B! {+ e/ q5 `/ Z8 Y/ w9 N/ @: ]4 s4 B( j8 _, j) l# l
7 a% h6 d2 E+ ^2 N2 t) S原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral2 i/ T* a$ [8 {' ~
|