找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12764|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
* v' K6 J  d5 w! F: o4 ^  `
, d% }- V7 j- u& n5 @) M/ X5 ~1.go环境搭建
1 _( s/ l- S" Zgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
6 s4 X: r0 D; v1 X& c0 H4 y源码安装go的详细过程如下:" I7 U$ L+ Z$ S! v# G

& R$ _1 n8 Y& j+ b5 C2 z1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
. @: c9 P8 r% N8 h" h3 e* e0 c6 o
" ^3 A; w) R3 _+ ]. M2).将其解压到/usr/local目录下:; h. a$ Q9 q# i4 a% C
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  3 b) H, F5 Y$ x) R8 y. ^
) I0 U6 }  V- W- _( W0 l
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
: Q! d/ }  i, W3 {  M" K# G3 @, ]- T: l( r
3). 在root环境下执行如下命令:& Z: N4 u$ I( B& C: x
mkdir $HOME/go  
: r: [3 G7 E; ~echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
. k' t+ ?: F1 ?9 I+ M: [  Wecho 'export GOPATH=$HOME/go'>> ~/.bashrc  & `$ ?; p5 T4 F/ l: z& h& Y& [
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  + k6 P5 B7 |$ H2 J; {
source  $HOME/.bashrc  

! e, E5 U$ o. q/ c; }6 T. t2 a& L5 n- P5 M
4). 安装go get工具
# ~; \" g& c% B. n6 R$ ~1 x) Dyum install mercurial git bzr subversion  
6 {  i* _# v, M
- G8 `0 R  i9 C2 J1 [+ p; \2. 获取源码
+ Q- D% `- B7 p" J/ Y& C. ?git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
' S& P' v. m. n获取源码:& x- y/ y" Y5 ~- z3 h5 p
git clone https://github.com/inconshreveable/ngrok.git  
% V2 {+ T  H9 _) a
$ i6 q, }4 j( H  g3 R3. 编译1 t; T9 W. l; w; A  y6 k9 _
5 m( r4 r" r3 [* y# h
1). 配置环境变量
) \4 m; n; J7 e7 Z5 ], A0 k; L# e) V
export NGROK_DOMAIN="tunnel.bbear.me"  
0 G& f  Z( v0 }/ h& t, R& W! y7 Ztunnel.bbear.me替换成你自己的域名。 2 |- \+ E# a: l! u

+ R: Y) e# R  D* [; k$ @- k2). 生成自签名ssl证书
8 S, f8 w* C- c- m2 S+ x6 y, p. ]) V: C( h: Q' F
cd ngrok0 [1 [. Q! `: J1 m* S
openssl genrsa -out rootCA.key 2048
* `3 r) t( u1 Gopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
1 ]5 V# Z. r9 g; c* z3 s- g% n6 Topenssl genrsa -out device.key 2048
8 a" J7 |2 x9 T+ L+ ~% Xopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
& ]0 _, ?" \. N# K& u6 a, i) fopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
* ~1 |9 b) Q; _' }* O6 u% Xcp rootCA.pem assets/client/tls/ngrokroot.crt
" s9 l" `) V7 P! G2 B9 Q: x" P8 Rcp device.crt assets/server/tls/snakeoil.crt
$ k; _! s) B( M) p: d; Dcp device.key assets/server/tls/snakeoil.key  

! _# z. p' S. K5 x! k& r! L! A$ C5 S- @# O* x
! i4 ]; n7 r' J* L设置变量:
+ F; I, s6 f9 A/ |0 i4 p# h' j' P
) G2 `5 E" ^" S5 f  W- UGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
% y7 Y$ T0 ?. ~  m; R生成服务端与客户端: g( O9 Z$ _* X" [1 ~/ N/ F1 d

. V9 T' i( G' Q' b6 bmake release-server release-client  ) V2 k* L. u9 @  A: T! V
! W1 q. r3 J- X* L
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
. L6 D0 c3 A' C& _( R+ M. S8 @6 N0 ^  ]4 S! g5 E: _
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
, U/ l* {4 s" ]; V% Z% I2 |! ?
# G  @4 J! f- z3 m! i, }! k编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
; p# Q9 q. b) f3 E( ~
* j3 j5 Y3 T- k, v0 z) _4. 交叉编译生成windows客户端7 b7 N1 n$ h; H7 J) K8 r$ n' S9 g9 e
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:- Y, U5 x9 X; W# h7 x

9 a: V  u- g( w进入go目录,进行环境配置, r! K1 ?7 t; A: I
cd  /usr/local/go/src/
' k# o% ~+ p0 G; L/ [% K' p6 `7 S
. ^" L1 W- p; v0 D! P! UGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
- U# x- h  Z! p8 T9 a. ?! K进入ngrok目录重新编译4 L1 w# G& b8 e! _1 C
cd  /usr/local/src/ngrok/+ f" ]6 Y; u& A$ f! X/ g' J
8 d, C- K/ g1 m& I/ l) \
GOOS=windows GOARCH=amd64 make release-server release-client  - S1 {* b# N9 @+ C
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
  N; ~3 g4 ^) ?! U0 ?" h
) W. k& d( b. E" {7 n% A  T7 w5. ngrokd服务启动与使用
5 ~5 @6 B& Y1 y1 @8 K8 l1、启动ngrokd服务端
+ O9 N% @; q. ?) A# S  [3 U9 K6 O- K2 ^! v' H: }+ G
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  9 b( y6 m3 \4 Z9 a7 w# ^$ X% X
注意,让程序一直在后台运行可以执行$ G8 ]( a* G0 u5 ]/ S. Q

+ C3 c5 r  N0 ~8 y4 `5 Vnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
: D8 P5 Y% g: v5 ~4 y, ^, q想要结束后台进程可以
: e8 ], _2 l0 s  W! ]! u3 u2 Y
9 q1 {# Q2 f- n  u& D1 f$ N6 Wps -A   #找到PID  0 Y4 d( p, m3 D3 \
kill xxxid  
$ T( m& V- s- H( W; \0 ^2、启动ngrok客户端
4 R+ U7 D+ U0 S
9 m8 c" v. V9 y6 g4 U1 l6 o客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置1 L1 w) F, d- _# X
$ l0 T$ a2 ]3 ~, F
server_addr: "tunnel.bbear.me:4443"  
9 _+ u7 B/ _6 M& |. q" S$ M' ptrust_host_root_certs: false  

; }- ], Y. [2 y3 A' f& g" Z( I) Z4 s- o, _
再在windows控制台执行& N& i% x/ M+ F1 I0 H

* D. g' K" y" t  Z5 G2 Angrok -config=ngrok.cfg -subdomain upal 8080  , l! ?+ }# P: [9 A' Q

9 d. ], [* q: N% {* B9 supal是你自定义地址。. S, P+ i1 }6 [. O8 d8 m
看到这样一个界面就说明成功了
; {) V, j' s! z6 V" j; e$ |  H, L! @+ P, c/ Z- m7 V6 \
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 ) K5 ^; z1 y1 ]1 M6 a. F
$ D: n3 f& k1 [5 ^: {

& A* G# C# V) K/ ~, r+ C9 B% w3 ^5 h2 R/ y- w( P5 E
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
- F  T5 c% J7 B

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-6 10:50 , Processed in 0.075250 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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