找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11953|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。3 u' s* t3 g1 W& b
" q& Z8 |4 T8 S" A  T5 O) Y( ^$ p
1.go环境搭建1 C3 a2 G; [3 P( ^) c
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
2 I& z* |* y9 I% h7 v4 I源码安装go的详细过程如下:1 G- c) g- X4 s

- I- M6 e' }& N" \1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。9 i& v4 L- _. Z1 H$ Y" B! P
0 @6 a1 s, b- y; m
2).将其解压到/usr/local目录下:
7 l, U: ?( e+ h: s* w/ Ztar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  % m3 r4 p' i: ]
6 U2 H! n& _5 w- m
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
# g, o( P0 D5 M3 w: V! X9 A9 j% k: c# A# b& r! C6 e8 R
3). 在root环境下执行如下命令:/ H" l9 I6 F* u2 {& ?! `
mkdir $HOME/go  # M6 W4 C" Z( m& Y
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
$ T6 W/ c2 b) c( k* _9 y* Fecho 'export GOPATH=$HOME/go'>> ~/.bashrc  
( p- u' X3 ~9 W1 fecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  : A3 r; N6 H, k
source  $HOME/.bashrc  

% G' {' f+ e9 i" t8 }9 \3 V
/ b/ h& j+ l, V7 M/ p: ^4). 安装go get工具0 X2 g6 h1 J: \& z. m9 V+ P
yum install mercurial git bzr subversion  
: `1 Z8 u$ L( K
6 Q* L; ?0 w+ f; S  }: y2. 获取源码
  L2 F& i; }7 p1 Dgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 : f+ R& U! y: }) a" W5 M
获取源码:
4 w  L$ @0 D" m9 k: k; Jgit clone https://github.com/inconshreveable/ngrok.git  4 I# u' G3 f; X9 E) S

9 X/ S( H; a4 r8 t* @8 V/ X3. 编译
. _0 Q9 \7 o) s3 G& \
7 I: ^# h8 N% F# N7 d- s0 ?1 j1). 配置环境变量
4 Z  i; r* c  ^4 s8 M% l$ A, ^) |1 h1 E4 U+ t# L, L
export NGROK_DOMAIN="tunnel.bbear.me"  2 \" E' _9 M/ `  n
tunnel.bbear.me替换成你自己的域名。 : m* n6 D* Z; v0 }4 E- v

; m' V, X/ z% z: x( _! g2). 生成自签名ssl证书4 ~% P9 }- I4 L9 Y! z. l
/ u' d$ a. q2 b6 c8 l% u9 Z
cd ngrok$ o8 B2 b0 w: M
openssl genrsa -out rootCA.key 2048
  W) c6 n- a" n: xopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
; w. g  Z) c: J* \openssl genrsa -out device.key 2048
4 N. \" q) Y( B  w, |2 V4 `openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr0 @0 H  E  {# g- J9 D$ @# n0 \
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000& h! Z/ u3 S6 n: I* Q
cp rootCA.pem assets/client/tls/ngrokroot.crt
0 v- E9 W% {* ~1 H" L# ?) ocp device.crt assets/server/tls/snakeoil.crt9 g0 Q# F1 e' h& G! [
cp device.key assets/server/tls/snakeoil.key  

5 D  s5 ^$ ~8 H# l6 M( t( J0 t) d2 K
设置变量:8 m$ ~1 L& }! G2 s- U. B
; d2 C8 {; v9 g( s' n
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  ! Z3 d3 l" H  e- U0 p
生成服务端与客户端
2 i, s  p) {/ F$ E
+ G2 i( b% C9 i  x9 P: B4 cmake release-server release-client  & G6 D0 H2 {, C. ]% v
3 W: X2 g4 R- C, K3 z
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
) K' ]% Z! x" a* b' m3 |$ n( L
# U: a, t$ v. l; O0 |) b找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。" _9 P. N# L. D8 {* k
1 s' [6 O  x8 G9 ~: _5 T
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
9 g2 p5 s+ m9 ~+ U) E
3 F$ K5 M! I5 K7 D; x4. 交叉编译生成windows客户端
) |/ v/ g" j0 G' f0 v; @, h9 S* T上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
* a5 ]: Z8 f4 E4 U: r4 l
1 R5 q) m8 N) k2 s进入go目录,进行环境配置
9 f% T* V& g) b7 dcd  /usr/local/go/src/6 b9 J. [: J9 o
7 a2 M, z. e& ^1 j" ^! M
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  2 l+ |" c6 {( j/ s
进入ngrok目录重新编译2 p# F) o+ f- m* f: [, O1 L( ]
cd  /usr/local/src/ngrok/
: f9 N, D- C) J  q, @& i5 w+ d: {8 @% M0 z7 f: r: T+ n. k
GOOS=windows GOARCH=amd64 make release-server release-client  # k# r. N0 i4 s/ v0 ]
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
( L7 n- a" k' T7 C- G: [* J# M" E+ }
5. ngrokd服务启动与使用7 d0 I+ i9 ~& a
1、启动ngrokd服务端. ?8 h% F6 j1 h0 `
0 z5 x8 `: {; T0 C
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
+ j4 h5 g9 k8 n2 Z注意,让程序一直在后台运行可以执行0 g% v9 c' u4 {3 G- R
& M! J% _. U# t+ P1 X0 Q/ K' B5 P5 B
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 5 F3 O; F# `+ k9 h( c
想要结束后台进程可以
4 j2 h* _( b" a0 f; H" c2 b0 A5 a$ S
ps -A   #找到PID  
/ F" N* r& D& _. D: v4 @) b- |# ykill xxxid  
. d7 v- Y  L2 L# {) u; k2、启动ngrok客户端
4 Q& q- N; o4 @5 G# F1 ~" O6 s
' u2 S: f6 C) X" S  ~$ E5 h- u/ B客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
$ F8 C- T/ u0 c4 Q  D2 K& Q1 t# {; L: @
server_addr: "tunnel.bbear.me:4443"  . r0 l. I& n# z4 a: R9 T
trust_host_root_certs: false  

" ]# I0 i: `  [* D6 I
" K3 w. N6 ~2 V再在windows控制台执行
( _" d5 F3 P: o+ d7 R) B3 k
  b/ r+ X7 s  k0 r, {3 wngrok -config=ngrok.cfg -subdomain upal 8080  ' r7 S3 u- P- t, D5 F2 ^) h* P
* F9 ]1 t$ N( r+ h
upal是你自定义地址。- k% u  {( D4 o, @) R1 G
看到这样一个界面就说明成功了
; L% o# Z4 w5 j6 v, _5 j0 e' h6 |$ P/ g$ _
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 5 d+ O/ B% Z2 l0 f

' C& p; |! {  v+ }
3 ^: I' k3 p8 g0 w0 @$ E! w$ q% p- `- K+ w6 R% ~* Y; s
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
$ F5 q! R$ q$ @7 C9 U6 [* E& H6 L

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-4-12 22:28 , Processed in 0.089008 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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