找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11105|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
5 I$ g% n9 S+ L2 W3 I, G
# S6 \6 K2 ?" P: X1.go环境搭建6 f7 s4 J  u& c/ K! t2 z3 o8 h
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 ) E' @  v* v. N# P
源码安装go的详细过程如下:
' `# y$ s) ?" P. p5 T$ u) D( Z6 B
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
) l% i) O5 d- F" O5 x' Y8 `8 G' y0 s1 z; [
2).将其解压到/usr/local目录下:
2 t3 |# n% }" D+ q6 C, ]tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
% S# K: G3 E8 W' _3 I6 o, J  X
2 i2 ~3 [( t1 F注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。% I- W7 C7 }3 ]1 X/ ^$ @& Q* W

/ u+ y9 {8 _3 G' \  A& p; I3). 在root环境下执行如下命令:5 K0 Q1 B/ ]7 O" G
mkdir $HOME/go  1 X, H, d  A5 W3 U  O1 o. Y
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  2 b" ?  v7 F9 N
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  ! d3 y( X2 `9 Y7 m# ?2 r3 ]  n
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
9 i0 v- i. p" V& |source  $HOME/.bashrc  

6 U$ p; @: p1 A# J- o) R' h. E) E4 |3 t% A7 x! i3 d
4). 安装go get工具
" g' c  X( [0 q+ x% `yum install mercurial git bzr subversion  , J* R& I% r4 Q$ G7 C

! d- w% b; T4 _. \+ ^4 n4 @" L/ Y) R2. 获取源码* f, C' x$ @: `2 k) z; L0 _
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 ( H0 z) }. a' n! z0 p% v
获取源码:0 |) X+ h' n: F# S5 o
git clone https://github.com/inconshreveable/ngrok.git  
2 w7 I- D3 x) j3 S
7 L& d- i4 X- _1 k4 g6 Y3. 编译* B- v$ O+ g+ h
$ _% l* K5 T- b- j, V' y! f
1). 配置环境变量
" |! ?1 v$ x. z) q* Q" Z# s% {+ y( n6 g8 t$ U
export NGROK_DOMAIN="tunnel.bbear.me"  
( b. S  G$ y& J8 xtunnel.bbear.me替换成你自己的域名。 : \5 K: u# j2 x. \% ]$ _

! B% e( [5 J8 b8 h7 O) D: ]# T2). 生成自签名ssl证书
) |) U1 W5 I  V; F7 l  r2 X8 \) w- ], c. j. n& c
cd ngrok" Z% C* H5 ?* Y' ]. D7 j! D
openssl genrsa -out rootCA.key 20488 c3 a# b4 Z2 l& \' D0 W
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
0 d& q$ }9 U$ t% @0 T0 jopenssl genrsa -out device.key 2048$ b  A1 K$ @6 k3 I+ X) n
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr/ r5 Z, U0 z; {6 q$ ^
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
2 J) T4 v4 c2 J. R9 pcp rootCA.pem assets/client/tls/ngrokroot.crt
3 h/ B# q+ R. i7 Z6 ocp device.crt assets/server/tls/snakeoil.crt4 B+ A! g+ u* A& A
cp device.key assets/server/tls/snakeoil.key  
3 j$ p( k/ i+ r6 J
  I! [* t0 O5 m0 j+ B: D7 L1 n
设置变量:
6 D  H6 o4 _, F3 r$ S2 W+ g
: n- o9 M+ f- C1 I9 |. |GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  2 d) o( v+ e' j6 ~: q
生成服务端与客户端
6 y# K* u# m( k5 S7 K8 ?" b, B. W) U* ?4 I7 K* g1 [! K
make release-server release-client  2 D3 M' T4 N- G8 L* K5 b, k
: ]" e0 L+ Q- K' N
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
% N4 {6 {  g" w- M2 R  q6 u
1 T4 X) c# Y1 y# K5 l找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
" `: Y" R% V0 o! Y9 O: l
6 y) s" S+ \, X4 F8 W/ U编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
4 C1 |5 N8 Q, s* [' o4 x& m
0 E/ |  o2 S6 G1 T8 a4. 交叉编译生成windows客户端
) a& G9 M; a$ f, Q  b上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
5 h! h7 ]) q+ ~& e2 p5 a3 B
: ~' N9 S' A& O0 r' @进入go目录,进行环境配置% j# G: Z3 G) W& A" l; z
cd  /usr/local/go/src/3 I) R1 p  @  J# }( {4 c0 O9 ?1 P1 e6 E

' W7 f* v; D1 q2 f* z" q+ c* [4 l9 mGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
, s) L" x; W3 ~) |2 _" O进入ngrok目录重新编译
2 Z. L5 k2 P9 _2 K& x3 W/ c9 B4 Y6 Tcd  /usr/local/src/ngrok/
: c% H$ u5 d( U0 b! m) `6 M4 S! w- o
5 S+ y/ y  X( G( u+ y' Y7 IGOOS=windows GOARCH=amd64 make release-server release-client    E; D% d7 c0 u
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。5 G% a- u  J( @6 \$ I, c0 \: X8 i1 |+ j% R
7 p$ Y+ d$ q) ?0 _$ L
5. ngrokd服务启动与使用
5 \! L$ d; D# h8 K) O( G$ H1、启动ngrokd服务端
7 P( M) s) k/ y7 I1 _" R
5 |" @1 ]* ]  d5 f( R. sbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
9 x8 A3 Y7 p0 z: E( E6 a9 \注意,让程序一直在后台运行可以执行( I+ ]$ Z2 g! s0 L  s

. x( O# V9 e/ L! u7 Unohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & ( j+ @: \& u" T7 q, e. o
想要结束后台进程可以
1 H) \% I0 m6 a* H
8 ~0 u5 q* Q! ~( E. ?ps -A   #找到PID  8 \3 N. l" W8 R5 D, @2 C" W. t. z0 P8 `
kill xxxid  
; d7 c5 X" }, H! o* P0 x: t2、启动ngrok客户端
7 H: Y& N- r$ y$ S9 {+ w
0 Q3 |" y) j$ D0 h9 ~3 T9 T客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
! `+ W2 |; w$ Q% O, O6 O+ n
. M9 {7 e, S1 wserver_addr: "tunnel.bbear.me:4443"  
6 x8 \0 j  Y2 T6 qtrust_host_root_certs: false  

* \% {' K$ l+ j: U9 {0 b2 v4 E$ ^8 S. U; a1 l& T! P4 t
再在windows控制台执行0 d! g5 P& O: [6 M( `2 c6 X

6 \( B( w* O) L3 jngrok -config=ngrok.cfg -subdomain upal 8080  
4 ?  y) S! d% ?$ N, S6 j. H6 A! z% D1 u
upal是你自定义地址。
# |2 \9 C0 J4 P: Y" Q看到这样一个界面就说明成功了
1 o9 M! [) t# d. o' I* O! [8 l6 A" v7 J5 ~: d
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
0 ^- r9 T8 a2 Z
9 T& r- G' S0 ~5 v# c; z( c! n! j( p* @& a
- V6 V' \2 l& Q2 ]8 `% o* v
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral% L+ o7 U& D. X. E" p; Q+ J

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-1-3 02:06 , Processed in 0.050475 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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