下面是我在阿里云centOS7上面的搭建过程。
+ p9 I" e+ u3 D4 G/ Y- P5 j
6 v% M3 L0 V, {6 k! `# K- s1.go环境搭建
( e4 M; Y3 T( g7 j/ D( tgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
7 `" Z2 r4 u5 C源码安装go的详细过程如下:
1 X+ x: K( A( L$ p% E6 q! T$ [4 O6 Y+ G6 e
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。. V J8 ^# u* m- |# g+ `7 `0 J+ ?: z
$ A8 X- ^5 |% k: N2).将其解压到/usr/local目录下:
3 ~5 G" Q+ ^ u7 ktar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
9 o, W; p( I3 N
' o3 U1 g2 \8 h% C y注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。6 m2 o$ B( k0 [' a3 B" F
/ P, Z- D" l E' [
3). 在root环境下执行如下命令:7 G- k3 u. v4 r7 {
mkdir $HOME/go
) k* j- c1 H# e' r2 l: I8 B! recho 'export GOROOT=/usr/local/go'>> ~/.bashrc 1 N. h( U. R8 K, \8 H3 ?5 v# ~
echo 'export GOPATH=$HOME/go'>> ~/.bashrc 7 S) L' \9 S, ~$ ?, T/ _2 J
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc y+ L1 s# Z- ?8 T4 \. z/ D- Q
source $HOME/.bashrc
+ \( e8 z) h; n. @: Q) J' `
5 o, V @4 z% {0 e% Q# m4). 安装go get工具) s4 l" E% k" |
yum install mercurial git bzr subversion
z% t* e# H% Z/ B2 o/ r( d- { g7 ?8 d) l, Q
2. 获取源码0 p* ~3 h; }- N& _) M1 {8 ?
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
/ a( Y8 d8 l; S+ X; s% @( W2 R获取源码:, Z7 G1 i5 O. I
git clone https://github.com/inconshreveable/ngrok.git 6 W7 n' `: K& Q `7 h% k1 {' O
1 F% w' P. A" B2 E9 U8 Q
3. 编译1 j1 ]. u" d/ U7 g+ F+ M c
# Q9 I, V; Z. K9 L+ ^* L/ G& p6 z1). 配置环境变量7 F5 N; I! n, o( h( W% H' D; Y
7 O2 }& H: u/ K( S7 | [
export NGROK_DOMAIN="tunnel.bbear.me" . _0 n3 v/ E9 p3 f1 c4 }
tunnel.bbear.me替换成你自己的域名。 ( V: O; p: k: G8 ^) D
g ]8 R% r9 F3 a+ l2). 生成自签名ssl证书
/ [( W7 I. d% j0 C
" r, _* e8 i- o: P& K1 Kcd ngrok" X" Y# J% `% w$ Q* v+ n( X c
openssl genrsa -out rootCA.key 2048+ U5 L0 m7 B9 {( s
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
3 A; P5 w+ M! p# j6 a! ^openssl genrsa -out device.key 2048
. ^: s! v- }6 _, g/ Y4 Yopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
, d. Y% Q' Z& r fopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
; {7 W. k8 k7 X: c" X+ lcp rootCA.pem assets/client/tls/ngrokroot.crt) i6 O0 o4 ]8 I$ e& ^) n9 S B
cp device.crt assets/server/tls/snakeoil.crt
' Z% `! s7 b8 [+ s7 T, Gcp device.key assets/server/tls/snakeoil.key 3 i, p4 b' M) @9 K" N
. g L2 [2 M+ K2 ^' ^设置变量:2 [) @) s& @) _5 R* w
+ s+ z# e: k. f8 OGOOS=linux GOARCH=amd64 #如果是32位系统,这里 GOARCH=386 Z# z0 R+ W- A4 d$ P
生成服务端与客户端! e; d' [, B' _9 S
- n+ H! M5 s% P1 ^8 T( cmake release-server release-client 7 Q+ E7 Q! y) u8 [( M3 e3 C
: F$ y9 M) {; s. g9 \4 E8 P `8 J
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:- A) q' u5 D; Y1 v3 {
. y0 H0 ~7 h3 a# F$ F5 {/ w- u找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。& E' {5 h& R, S; f7 s. E- q
4 w9 {7 U8 N# G- Z5 e! |
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。/ H3 ?8 u4 Z' R0 M- e( o8 k
$ }; G1 V* q$ V1 H3 V; n
4. 交叉编译生成windows客户端7 \' H3 V4 B G( c0 V" V
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:; d1 Z4 Z2 d! g0 l7 i, q, n" n
) g0 W; J6 t' k
进入go目录,进行环境配置
6 v* [9 f0 }2 X; icd /usr/local/go/src/6 L, x, D+ s) C0 ]2 g+ g7 Q* [
% q' W7 G9 |( [* D
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash 1 q9 ]; M/ M! o# v1 `
进入ngrok目录重新编译4 l C6 t+ I8 t) L" \
cd /usr/local/src/ngrok/
# O# E! \0 W' ]) s. x2 B8 u7 }* b+ c9 E; I7 Q
GOOS=windows GOARCH=amd64 make release-server release-client ! V! V: |6 L2 e( E. Z' u
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。8 H* B4 _8 J" ?
+ H; J* X! }2 k, O( W: y* @( i5. ngrokd服务启动与使用8 P; v, f7 Z+ I+ G3 o, c6 _9 Z
1、启动ngrokd服务端& K! c: C. G P' i! o, G
5 S+ d. g! b1 Y) S4 i% P; X
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
2 a) x/ X5 V' V0 {注意,让程序一直在后台运行可以执行
3 d9 E! U& T* ~2 V/ B2 ~* j5 u: w" r: l; b G2 L- S e6 v+ x8 ^6 B
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
4 z. W5 {: H' i J- {2 O想要结束后台进程可以
S* d6 R' W7 s7 m2 q
, W1 _6 ?. @6 Ips -A #找到PID # _' L8 M6 x. H( ^! T
kill xxxid $ L! k- M" e I, U
2、启动ngrok客户端
! C* Y' c7 [2 F3 D6 O: [6 N2 f; F: F4 i
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置, ^5 X# n3 [/ u
0 @9 j, U! I% }- ?4 H- D2 jserver_addr: "tunnel.bbear.me:4443" 7 m( N* k$ U' F# J6 p
trust_host_root_certs: false 6 g5 @8 `% g- V A4 ]
8 X+ A$ ^/ ]0 V8 \ z, b U
再在windows控制台执行% F N9 w/ u F0 r7 v# r
4 ~9 Y; f6 M! a4 I
ngrok -config=ngrok.cfg -subdomain upal 8080 ! K* ?, y# Q1 r" x% d5 I. `8 D
8 y; Q# _( t( M+ W( vupal是你自定义地址。' t f( }2 h1 }8 Z* Z# V
看到这样一个界面就说明成功了
- X0 r# [. T) [7 r! s
- m. ^7 q, H1 [0 s/ m) S如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
6 A( n8 c2 u8 p; T5 A; n' ?/ h% N9 ~) j1 u4 F& J: N
0 s/ I; y( a4 ]5 z" G, ` [/ o2 ~0 u& m1 Z f+ m
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral1 _) q: {" i) b, ?8 X% T3 j
|