找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11710|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。: j: H5 g0 f; Z
# E9 |6 a. G- r8 l; H( ]# ?
1.go环境搭建
; _' V0 ?, D) bgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
( L; U$ T+ B, }, z1 e( x: ~! f+ z源码安装go的详细过程如下:: ^* x: Z, o9 y8 c

6 H! {7 }: }. n- f$ u9 `1 |1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。7 s% ]% k: J& R0 A  g0 z
! {  n& ]# L6 E
2).将其解压到/usr/local目录下:
* z1 e: D- @; b, n! l5 Otar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  5 \* r- D0 b" D/ ^

4 t# b+ c3 u  ?+ q6 C0 m, l) L! P0 w注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。$ }5 Q) l9 j8 h2 C
* _( \- _8 c5 N, w  c( ^
3). 在root环境下执行如下命令:0 N2 }- b8 W6 W2 Q3 i8 _' z% Z1 m
mkdir $HOME/go  
1 c. m- a1 m; Q; s" k5 Mecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  
0 t1 s/ X+ ?6 m9 u6 e# Secho 'export GOPATH=$HOME/go'>> ~/.bashrc  9 U7 q1 I+ r# h) I% C3 q. E
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
, `) r# o7 [: h1 A. M4 h  f! S( |source  $HOME/.bashrc  
# J/ S8 \& y, O
, z1 K4 b: t$ m; s6 E
4). 安装go get工具4 y/ `4 k* o& C% e
yum install mercurial git bzr subversion  + b0 Q* m. V( X; `
) ^  m- z/ [! ?1 b1 Y$ D/ I
2. 获取源码8 Y6 r4 Y/ L% k3 t  B6 n4 D/ Y9 [8 v
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 / j( |* T$ N2 C. L5 N! ^
获取源码:! z1 x/ ~2 L$ V* A: l( j
git clone https://github.com/inconshreveable/ngrok.git  
* i6 |, \( Y0 c# N& f+ q8 q1 o9 ~+ V" a8 O* s1 D# }
3. 编译3 l7 |  A! \4 D- s# p: f1 T
& V/ B. c, c2 y6 V  B1 J# Y$ r% A" ?; R
1). 配置环境变量  Y* b( G, O; a, ~9 Y. p
0 V+ Y3 \( l. s5 v( r% f
export NGROK_DOMAIN="tunnel.bbear.me"  
# s3 {4 H( h8 ~9 C: k' }tunnel.bbear.me替换成你自己的域名。 $ T  x6 r! u0 R; k( \

, ?4 U  r6 l9 D2). 生成自签名ssl证书
( @+ f) v2 j9 k  J% W1 M0 m6 x9 i" F, Y
cd ngrok
( b, M4 ]: M9 Q2 n, Y; Eopenssl genrsa -out rootCA.key 2048
2 q2 N1 e3 E, E1 G' Mopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem) v: ^+ |+ e6 t% L
openssl genrsa -out device.key 2048
6 }% `4 P) P0 I9 w  E; h( Y5 }openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
" i% G: ^+ d0 a0 o# Z" dopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
2 F7 I0 Y* T# S6 E; ^cp rootCA.pem assets/client/tls/ngrokroot.crt
* c" u  t" ]5 e4 ^! I$ g0 p) g# \cp device.crt assets/server/tls/snakeoil.crt
3 u9 h7 \# s5 P5 V) M: jcp device.key assets/server/tls/snakeoil.key  
" U  z; b; i. r
5 Y7 W, ^+ Z5 A, c, v
设置变量:
4 n  u4 Q% W5 k7 u7 J( W3 f% m+ Y( t9 B% ~
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  1 D4 l8 M% c- M  H. |6 @
生成服务端与客户端
0 f. l4 Z+ l3 |: k' [+ i% y% a8 f+ D6 F, B+ K
make release-server release-client  / a2 ]" L. o& U- @, G0 `
6 r6 o7 s2 R( }* [% q$ L
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
; ?- ^* F, r+ a! B5 G+ ?' L: x% g; [: X6 ~- m
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
) s! k; A" t8 U9 a3 J
0 W& m; I; j7 x3 u% f编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
: P" C- C6 s5 r  N
. \3 Z% j" c5 S5 n( `" ~4. 交叉编译生成windows客户端
+ s4 O9 z2 t5 O2 u  s1 J( T" w上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:0 n$ U' @2 t* J* O: q4 j

- n8 C* b! r; d/ b进入go目录,进行环境配置- f2 [8 [8 x$ w) b
cd  /usr/local/go/src/8 d* z( z9 u6 K
$ W! R# \# B  p* Y9 l& `( w
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
0 F3 U, x: s- L  F0 s进入ngrok目录重新编译
3 X0 t( N; V, G& A. [" jcd  /usr/local/src/ngrok/
2 z5 R/ S, Y7 n; q8 A8 b
3 \& D1 o5 Z7 O8 U8 C/ ZGOOS=windows GOARCH=amd64 make release-server release-client  
7 f* P1 d- c) `) ^4 ]# C编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
) e/ h8 p5 f1 c: X! O0 z' k/ ^( \$ K. ~) w3 y
5. ngrokd服务启动与使用
8 \& ], \# U: @2 `  r1、启动ngrokd服务端/ u! h+ m$ D5 L2 \& n! X

& Q2 n' j2 w, X2 k, }( C+ fbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
5 l5 O; l2 V7 |! D( i* Y注意,让程序一直在后台运行可以执行& `: K1 A0 p7 a2 j0 p$ ]- c

6 H; r  [# ]% Z. j4 a. xnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & - v( n: Y6 L5 z  j/ R) H$ [8 s
想要结束后台进程可以9 ?5 B8 Q+ p6 c& \9 g" ]' i3 R$ W: z. a

. c$ C: H" i2 Hps -A   #找到PID  
; N& P& y1 ?, K0 O( C4 |  n4 ?kill xxxid  
8 `! W$ o9 a. Y- u/ ~" a9 T# f2 o2、启动ngrok客户端& i3 u9 H( N+ _9 d7 F# u- `
1 v  [- |( ~' K) l
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置" j% A+ a$ s1 V4 x- g  x( Y' X$ A

* a4 ]$ M, h6 A! n( ~: h+ w& Eserver_addr: "tunnel.bbear.me:4443"  
$ {4 `) y9 m: m3 A  |trust_host_root_certs: false  

/ u& M# K- |- e' Z- F4 f- H  s- b- e! u, r' |" j- D+ D+ ^/ y
再在windows控制台执行: v  W  u' {7 K: s2 |% Y; P9 }
- z+ b  {) t; S- U
ngrok -config=ngrok.cfg -subdomain upal 8080  
4 x8 a) G3 X3 \; W: @& g% I1 ~  i' N  ]5 [
upal是你自定义地址。$ B) x. W0 F. ~4 Q+ `) D
看到这样一个界面就说明成功了 6 p$ A, c( i. T% f, Z9 Y
7 x) V# D3 A# v: ]7 }! n- s
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
7 w2 n' x+ z6 h3 e
% K5 s6 H% o- g3 c6 R. ]( E: j% |3 ^& K9 [; ]
0 f6 C) h0 f8 _: M0 ^
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral! g; f; m* V! W; {) e- R

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2026-3-23 18:35 , Processed in 0.050061 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表