下面是我在阿里云centOS7上面的搭建过程。* p9 B4 i) D4 \
$ l9 v: c' ^; b9 x1.go环境搭建
3 }: j1 {; o( {% } I [! pgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
4 A5 G3 C/ f6 D; v. ~源码安装go的详细过程如下:
9 {7 m: R0 C, U' S- X) B$ e
0 t; L/ C4 q% Z. N1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
& r0 x# } N5 g0 M6 \6 R0 L
! a" H( ?7 J& ~ E8 ?- f6 ^2).将其解压到/usr/local目录下:: n8 v$ M3 Q& H" B7 a1 d3 E' [
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz 3 u$ D) [+ S, o- }
& ]# I/ q: \. x5 C5 k0 w注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。' X0 l# g, T9 [: c0 \7 C# n
+ o8 Y; W, v7 y8 ]
3). 在root环境下执行如下命令:* A1 ~8 s2 H4 \, i% S" w
mkdir $HOME/go
+ g8 u B. @+ L8 G5 B3 H# A7 N$ ?# Lecho 'export GOROOT=/usr/local/go'>> ~/.bashrc
7 F$ H! _! j. _/ K' Hecho 'export GOPATH=$HOME/go'>> ~/.bashrc % s( [) }; K% i# S! z
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
; x/ x! I; W0 S& Dsource $HOME/.bashrc
`& s+ I* a5 i" o7 a* w4 |5 G5 B
4). 安装go get工具" }0 W( ~" i* L& t. Z
yum install mercurial git bzr subversion 8 ]/ ]& T% [8 y" v. c; [& t9 E
; x" e' z( v U" W! M( f' P2 |. Y2. 获取源码$ k5 h, k8 \. O: _6 y) Q
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 $ S2 d+ `7 t; D/ T) r
获取源码:+ ?6 ~% t* M" r. O& O' A5 w5 {; I
git clone https://github.com/inconshreveable/ngrok.git 1 |+ _1 O/ z6 L: ~5 Q: [* C
6 k! {& i# {* V# y
3. 编译
/ {- Y! a- ]3 T* q& ]' T" X+ p- ]- H& m$ N3 Z, ^" y
1). 配置环境变量
& @; E" e2 P/ G8 F" Q0 Z" X! h; R% s' s) K0 J
export NGROK_DOMAIN="tunnel.bbear.me"
/ f u" }4 i* q. F8 p5 ?. Ltunnel.bbear.me替换成你自己的域名。
3 y7 q& K, X7 W
8 F% `. h* j- b; K. g2). 生成自签名ssl证书1 x6 u4 \4 q, o- c# Z4 [
0 s* c$ D; v# \cd ngrok
8 v5 B8 {, v0 i7 Z! C1 {openssl genrsa -out rootCA.key 2048; `- W ~2 _( |0 p" \6 o
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem) X( W1 W8 H- |, B2 G" m4 T
openssl genrsa -out device.key 2048- w% V! H7 M9 C1 {/ g
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
6 z$ Q1 i. B5 }- l, Topenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000- ]3 E' w0 z. ^3 m- G& D
cp rootCA.pem assets/client/tls/ngrokroot.crt9 p: P; ]/ |) p1 R- i3 |1 H
cp device.crt assets/server/tls/snakeoil.crt
) ^6 v- g" h, T% q: T. w' i& ^) scp device.key assets/server/tls/snakeoil.key
' r9 E* O5 N: |4 F, _5 d
6 v3 ^& {9 f6 \- z( l设置变量:: m1 C+ ]% E v0 ]
8 m- |. l9 T. B3 }
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 ' Y; x, j8 z K0 w+ u$ z
生成服务端与客户端
2 u) D4 P1 g( T& u- b9 G" z/ S" C" i% C; C
make release-server release-client C4 S; x5 I- d- A; j$ k
$ Q; p- v7 E4 n# n+ R
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
4 R& D' Y" W! m
# B! S$ z: P# ~. X. X找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。. H5 C! M1 ]# Y' v# A, L/ S
& _7 c) {& i! Z$ a编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。, F. p% S2 {' G0 \
2 ~ X! B1 y7 b2 |( J2 |
4. 交叉编译生成windows客户端* |% d) t( N, L$ N8 Z1 }
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
2 h0 M. U3 {# @8 p
8 }7 V/ _( s- D% E% x进入go目录,进行环境配置
, C+ x e: @* _! j! [cd /usr/local/go/src/" H0 g6 f6 I6 |
& A; [- v; S5 P4 k1 g
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
% I5 ~: H( ~; W5 X进入ngrok目录重新编译
4 D, M) h% O+ W4 J& q$ ~+ Ocd /usr/local/src/ngrok/
9 m3 R J: B& \* P& @+ Z
, t, {/ A8 i. l; R* uGOOS=windows GOARCH=amd64 make release-server release-client - U* p& l& p; ]* B( ^
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。8 G5 t2 ~' j' d7 |; q' h
" r& I( r. Z% \7 T0 {1 ^! R4 Z5. ngrokd服务启动与使用+ {% M. S T5 K- x( C3 h
1、启动ngrokd服务端
# J7 x% E3 I$ R) b3 \% f, _' c/ r! r% k# I( H6 o; Q
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
, c: W) w) |' d- e; p注意,让程序一直在后台运行可以执行
4 a/ o: ^3 L- S; H& z
" K& D& s! U a Onohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & % Q$ f5 l! L" ]$ {# [
想要结束后台进程可以
1 D! G! U% P1 K/ j) y
2 T" R! V/ a! R- z; F" K# p/ H8 Ops -A #找到PID - G* v) y. \0 e$ u- O% I
kill xxxid " Z4 T; @4 q* q" `3 x
2、启动ngrok客户端2 ?' C+ a# z+ t
3 Y$ q7 r% ?/ Z" G7 I客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置" p4 m3 E B N- @$ g
& R& r5 g( @- y. J; V2 _% c! a, z c
server_addr: "tunnel.bbear.me:4443"
# _4 m8 T5 i; r+ x" ~- vtrust_host_root_certs: false
. q5 t% L5 @& N+ l+ B* `! @8 t
5 n; x5 l5 j/ P9 B9 t再在windows控制台执行5 A8 _# M6 U/ S; J* t: t2 \
q% o" \7 @/ d' u1 Z4 G2 O$ Tngrok -config=ngrok.cfg -subdomain upal 8080
1 H4 o( [2 V" W5 k1 m/ G4 k4 U. I, k! k
upal是你自定义地址。
3 |: C1 U' N L6 ~# M/ T看到这样一个界面就说明成功了
% ~: ~- V+ F( _8 |+ K$ Q# b8 M
5 T6 B0 G$ q! ?+ R/ y5 Y L% x如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 4 @* m* } M% j9 G- d* l, w
8 A1 Y |0 D& V' n9 n7 Z+ u% b0 V' t" K, R
6 w. V& [2 d2 Y1 M7 A y原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral+ n( R# }8 _* ~
|