下面是我在阿里云centOS7上面的搭建过程。7 A, o; N( b, K9 e4 ?# p
" x( X t8 \+ D6 b; n" s$ k1.go环境搭建* A' Y: H8 |- B, C% e6 ]2 N
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 2 a. |' C* m/ H3 E; k3 _
源码安装go的详细过程如下:
1 s1 R! l; Z. q8 K6 P+ z' r
! Y; s' S$ W# g/ R2 M( M1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。: H4 t" z% l2 y9 W: B4 U
# S( ^* [* P/ g2).将其解压到/usr/local目录下: y; f' @% ^1 {6 C
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
. E& t4 g9 O6 |' t u% _/ r( `/ O6 ]& |5 n
2 x! W4 V$ |! i: m0 I; z0 `注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。/ A" R$ Y9 G5 }) N: W4 t
# [8 L5 H3 |) Q' T' @8 t3). 在root环境下执行如下命令:
$ I. Z* v6 L# Pmkdir $HOME/go
& d& B, {& D3 S" pecho 'export GOROOT=/usr/local/go'>> ~/.bashrc
& y" B. Z1 i9 l( N' {3 [; gecho 'export GOPATH=$HOME/go'>> ~/.bashrc / V h+ B9 b ?. G
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
?. j+ z. M. S/ m# ]6 A; |' Ksource $HOME/.bashrc ( B+ a4 [2 w, v9 j3 L2 ]
& V- ]9 K1 m6 {' R! L( T; ~
4). 安装go get工具
. j1 }: Y7 k. J" v' E, Fyum install mercurial git bzr subversion
/ U1 e1 b8 c% A* _: f# A3 `( Y. R! G; y$ |2 Z
2. 获取源码
2 w# P* [ M" p: B7 J6 wgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 9 H4 }6 c! o% N9 l
获取源码:+ C; _: M: `) M' W+ s* Z2 l, V' ~' D
git clone https://github.com/inconshreveable/ngrok.git 3 N( P0 h4 P/ `; X- a) p
8 S1 ~! u$ ^& D3. 编译7 E7 m9 c$ a, S3 L
0 C7 P2 H8 x2 c; ]1 L0 l
1). 配置环境变量) z8 Y; A! J) {. _9 Q- h1 [
& }" Y/ Y$ X! y5 x6 r9 S# ]export NGROK_DOMAIN="tunnel.bbear.me" 8 m; H8 t& ]* k) I3 Z8 R. k
tunnel.bbear.me替换成你自己的域名。
" d0 j2 t; T! v7 p, E& O) ^ t1 Z( U( r) C8 q4 d7 a4 N8 q
2). 生成自签名ssl证书8 X, [ C. H1 t7 f
7 s9 @3 b% f8 @* |/ g2 Z( U. }
cd ngrok
0 O/ I/ |3 ]" T' \openssl genrsa -out rootCA.key 2048
2 g3 d& h+ n% Hopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem: V; H# p, t* z' y! ~
openssl genrsa -out device.key 2048- g$ C7 I; A) T& w8 X+ S( P, }
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr! v5 N* j; w: g
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50002 I& Z! C4 v6 b4 m0 ]/ B Q
cp rootCA.pem assets/client/tls/ngrokroot.crt
8 C+ V1 w: U- @; [cp device.crt assets/server/tls/snakeoil.crt9 u5 r' v' z* ?
cp device.key assets/server/tls/snakeoil.key
; W5 t3 w5 w* _
$ c% r. X; @: i( e9 k设置变量:
( s" ~$ N' a9 F. R9 B; e% e0 P% ~3 ? ?0 O2 A
GOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386
! b- _" o+ A* A' v! G生成服务端与客户端, C& e1 O' B, _$ b
. ?& D4 Q$ I8 {7 U1 F6 P- q
make release-server release-client % n( j: N9 l. M8 z% R- Z( ~
7 J3 L! j1 }- d9 B7 J9 T注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
$ M! W: ~* b0 i7 B4 a, b* @1 p U1 R) s) M5 [9 k6 C
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。 ?$ x! v3 `* e% ^
( ?) _& c I& }- g9 n. v
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。 O" v# E: s' V" _/ {
7 y) C& E7 G/ r6 S+ |
4. 交叉编译生成windows客户端
+ H% r/ @) {0 ~& O4 m3 l+ s上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
( L* {' r: q6 w# g4 z' a+ r9 |* W+ W; T+ b" k7 D! p4 E
进入go目录,进行环境配置* k- s" m* \: K1 e+ S$ f K
cd /usr/local/go/src/
$ l# R- n V1 X3 y: U+ _6 O2 ?" R5 O5 [0 X
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 1 S# g! Y5 i' V& f3 O
进入ngrok目录重新编译4 |6 v* ~ ]5 q
cd /usr/local/src/ngrok/" Z9 n" X1 J7 Y
: o$ j# I8 Q+ j
GOOS=windows GOARCH=amd64 make release-server release-client 5 p! x" A2 K; ^" {
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。4 d, n3 J, O2 }! ?! j5 H* Y: b: h
- q. H1 N6 g+ ]/ R$ ~( r1 Y5. ngrokd服务启动与使用
- v8 K1 x& Y6 t3 p1 _8 \8 A1、启动ngrokd服务端
% x o; U6 \. m* P- m9 ]
1 W F- P7 P% p4 A3 vbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" ) r. ^. n( T% ~* |* }
注意,让程序一直在后台运行可以执行
% r F+ M; T% T" `+ b9 L" p" {/ \, i
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 9 ]% q C( Q) t3 z
想要结束后台进程可以# a3 a2 N+ H; V/ H" B: F" ]3 B( K
7 R9 b7 ~, W) h1 r. L& s. s
ps -A #找到PID
; |$ k. H. U$ i fkill xxxid
6 G" J- H( o/ ^9 Q2、启动ngrok客户端, r( B) K, `) J0 H c- n2 E. X
8 D6 Z2 Z* `7 A" ^- H: I客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
) H+ h$ h* r: ^8 x
+ p5 Q- ~5 `+ {* J& k0 c: Rserver_addr: "tunnel.bbear.me:4443"
: F6 r* P# F4 e4 e: ~8 p; {8 B' vtrust_host_root_certs: false 9 C% {* e5 y g5 V, \3 W- |% L, U
- W4 e, y G* s5 g% [) C再在windows控制台执行9 }) k* _: N- `+ \) Z
8 f- {& v3 Y6 A( L' g/ S6 Nngrok -config=ngrok.cfg -subdomain upal 8080 5 v4 B* ?; P) C2 j5 R" ]: C
" z: ~& s- \( e" P, x& ?! q
upal是你自定义地址。
1 M6 T" T; ]8 N- i1 e看到这样一个界面就说明成功了 6 j5 ?& y( X. f( F2 w4 F7 n# D! N
& t4 A6 |# ^8 u1 {/ Y
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 5 v6 R6 n# {1 _5 X
. |# L2 p$ r3 s. U
5 }! [1 S R5 j% F; `
) m0 y! l3 W& Q3 C" u
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral* I8 g( f2 }9 Q$ V
|