找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11913|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
& G+ z( F) O3 R, S, @! R% b, Q
: s( ~( i; H4 `7 V1.go环境搭建
* X2 `2 }( e7 A* N! X; R9 Hgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
$ B% @+ u: X  y* Y2 ]( i源码安装go的详细过程如下:& p, M8 o2 ?+ \- ^

1 }3 X7 B/ {- x' \1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
4 w% R9 ?. k1 s6 Z% F9 q; l0 P0 @% b/ j3 g2 ]3 H3 t& p' b- D
2).将其解压到/usr/local目录下:
' j/ t# D) n. {tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  * @5 K- i  U8 m2 P
: f. Q2 f; F8 a8 p7 ^* ?' f9 }
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。# m( y* y0 t; H/ N. `4 x; U

' y3 u8 ~" {  ~, B4 }3). 在root环境下执行如下命令:) d, R1 P: m. Q" a; u. a
mkdir $HOME/go  
" P" O/ S# x1 ?' v: [/ Fecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  
* |" w& a7 |; E5 M8 necho 'export GOPATH=$HOME/go'>> ~/.bashrc  
1 x" U% w' l. Z/ g7 Hecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  7 V. @! ?% h; M5 s- _! \
source  $HOME/.bashrc  
2 u6 W) x1 c  I- e
+ H. R5 n3 }+ c. l8 E0 Z
4). 安装go get工具
3 G, O# H- }7 M( |9 Gyum install mercurial git bzr subversion  - Y: d- t. B, C& d
. t( N% b* h( I4 x
2. 获取源码
1 ?+ Q- F) ]0 c( _git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
6 ?9 j+ F% S7 N5 V2 i获取源码:' p, H$ j4 r% v: }% E. `
git clone https://github.com/inconshreveable/ngrok.git  
0 X* p$ A, Y) @1 V9 n; j
8 f3 U" X& [$ ^5 l8 Q3. 编译
4 Q% C( q+ u, d# v2 z5 O0 x, J; d) k. H; x( g9 E
1). 配置环境变量" s, w) z$ |  Q$ o
5 P; o7 F) c" ~% d9 H9 i  D
export NGROK_DOMAIN="tunnel.bbear.me"  ; ]7 k7 \* N8 V
tunnel.bbear.me替换成你自己的域名。 ) u! l" ~8 ~. P% k& @

7 c8 s* @! i5 T$ Q* P6 o, _& x+ X- E2). 生成自签名ssl证书
! S& B+ c  t' f2 [  l
, y& Z- f+ _, L$ dcd ngrok8 ~8 H$ g. o6 ?4 ]) l
openssl genrsa -out rootCA.key 2048
* q& _5 X2 H; h% Z6 Qopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
% `  V2 @9 Q6 q4 J5 z" Y0 Aopenssl genrsa -out device.key 20483 v) |+ {0 O! W1 B1 E& L
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr4 ^+ z$ n) \' i6 ^6 ]
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50007 V! j6 S5 }: ^( R( Y$ i% @. r( e
cp rootCA.pem assets/client/tls/ngrokroot.crt
  j! _, s" r" c; V! Zcp device.crt assets/server/tls/snakeoil.crt
# l2 B/ X/ N; E  |- q0 I( Zcp device.key assets/server/tls/snakeoil.key  

# b4 D/ I6 K  s7 G- G- D0 R$ ^) }
6 @/ Z, |) L# x9 `: p9 j/ Z; f设置变量:8 \0 _2 A  i# @9 _* w' E
8 F7 O6 W, B# p, _, N- ~
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  . j2 O. E3 y1 ]& n2 k
生成服务端与客户端8 Q) I, |. B" T! _6 n

, x: ^: f1 B# T3 V+ M1 Wmake release-server release-client  
6 F9 R5 h8 J& R% q& n7 U2 M- d# x# \# }; Z5 ^: M" E: C
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:$ o8 h; v$ H  r

7 W9 O: b. X7 ]* G9 Y* w; l找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
' W9 f5 E: ?; i  J! X
" f! Y$ r7 v% C  I9 S" Y编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。" y9 P) T0 d# o! R% h" L0 E
$ n) H8 ?4 I+ U; q) ]' x! D
4. 交叉编译生成windows客户端
* a. D8 `& w! d$ g% N上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:0 u0 D: m  t! Y+ }

1 s  [8 J1 e' ]: y) T6 |6 y* c; N进入go目录,进行环境配置
8 |7 k1 R5 n/ s# `" s5 L0 |cd  /usr/local/go/src/+ S2 X4 M& L- S9 k, b# o- ?' X

6 }9 A4 u! ^, q6 k& X( u7 Y' `- J8 xGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
/ X2 f) G+ x' \1 D. L" Y进入ngrok目录重新编译# R" h3 }5 u! \. `) h5 }
cd  /usr/local/src/ngrok/
9 M2 v, q) M3 D5 U
) _. U& t# t* K% hGOOS=windows GOARCH=amd64 make release-server release-client  ! }- r' i# }" g6 I& h  N/ T" q
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
+ i4 }. \; C4 `( K7 M7 m* p8 u! G- s5 O
5. ngrokd服务启动与使用. N$ |; ]* I, J7 f
1、启动ngrokd服务端
9 G, @# ?1 r+ d; ]. @& c4 c# p( }6 Z4 @: ~" F7 c4 z
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
1 i. h0 O" B; X& ?3 p2 H注意,让程序一直在后台运行可以执行( z8 g+ D) m8 S! F

& w, P& F8 y& k+ B2 e4 u! gnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
- h5 j. a. j3 K* y3 ~想要结束后台进程可以$ ^  h! e3 u1 x) ]  [- k( S1 G( B1 F
" Y( L/ N1 t" N
ps -A   #找到PID  
  v8 P  S  _/ m7 ~2 f4 Ikill xxxid  
) R9 L5 Q0 G% h. C6 q& z. R2、启动ngrok客户端9 k& z, o; W) ?1 S
. M' p; R3 \7 D2 O$ C
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
, O4 a4 y( ^$ `6 Y5 _8 M# _$ z# ?- O& d9 ^5 o
server_addr: "tunnel.bbear.me:4443"  
& O  r5 T$ `/ V4 m! |: _+ jtrust_host_root_certs: false  

/ r  x- z# B  B% Y8 b
4 K; h" e; d, N% f. I) Q/ Y. P$ F再在windows控制台执行
& h: p' J' p$ a' Z. l) s; O
3 S+ M4 u8 X' b4 X/ Y* ^) F* U+ V6 Dngrok -config=ngrok.cfg -subdomain upal 8080  
6 r4 K; y  T& U
: F/ ~" b4 |1 r6 l% C" h  ~4 wupal是你自定义地址。
6 }2 P) D1 @+ z" r/ O看到这样一个界面就说明成功了 % o$ V: F4 y' T1 u0 D: ?
' s: d% k) }  g, c
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
$ ]% G& g9 [5 f6 n  X( W
& I, V  f1 Z- U4 b  _- a% C" J! n+ M1 u% I/ M' I  _
/ m# `! I. ^+ O
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
5 t. ?' \8 k+ R; |  ^9 Y% A7 s

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-4-8 12:39 , Processed in 0.080214 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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