找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13643|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。- ~( U0 i8 z  _. ?
: V9 A* Q, o1 B
1.go环境搭建# ]$ J' i" Q9 `' K  Z/ E
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
: [8 t8 q0 D# x9 P* E( }1 L) C源码安装go的详细过程如下:0 V+ x! G3 }) f7 n4 I
) D  V1 L. R& @! g" `1 B: H. Q, E
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
5 n1 b5 `% d: B" _2 n/ T
/ L/ x5 f5 m$ S& F$ |& u  U8 C8 _2).将其解压到/usr/local目录下:
( m" ?9 T$ D- K( }2 u1 ?tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz    l  T3 [+ \8 P

4 N7 D- m. s, R1 u注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
% P, v. u4 S/ d1 l. _
/ E7 q. Y3 y( w9 B3). 在root环境下执行如下命令:
! {2 v& H+ U) U& W+ v2 t  m* w1 I* c) gmkdir $HOME/go  0 J3 @9 {8 g, }
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
$ ^% X! N' x6 q9 }' fecho 'export GOPATH=$HOME/go'>> ~/.bashrc  1 Z- W# ?8 C3 Y! F  k
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  $ P% k! c1 H; `4 _0 `
source  $HOME/.bashrc  

- d5 ~/ ^! a6 v" n; Z
* f8 [0 J( Z- g. C) m6 Q4). 安装go get工具( v5 `$ l5 E, R# u& ~1 o% L
yum install mercurial git bzr subversion    F% I; t$ Z8 |& O. ~0 H8 e$ M" s# M

) w9 Q9 A7 c  b& ?/ c2. 获取源码
# u$ {& ]/ N7 Wgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 & Q( p1 l' {* K# o( @: M0 |
获取源码:
9 Z+ _  P- i6 c9 `% i( o9 ugit clone https://github.com/inconshreveable/ngrok.git  
5 d% G, }  k/ h5 {% J& |: h* D& }8 ?0 p; `4 q: F4 N% L
3. 编译
+ D- `: S% l4 O$ R( R( W9 Q- C! w4 {9 z
1). 配置环境变量: ~/ P9 Y& P0 G

' G9 g9 s8 `3 p4 U: S! u+ b$ R2 ?& Aexport NGROK_DOMAIN="tunnel.bbear.me"    b/ N: i: e( e  J  i- z
tunnel.bbear.me替换成你自己的域名。   C* |6 R; |- U( V

6 Z- `' K" z4 u4 x! c% U) G. v2). 生成自签名ssl证书
! b- n0 c2 ^# S/ @1 A0 W9 _$ `: M2 N
& ^; g; a" A$ r- u- gcd ngrok
* d& b- j( x- ~+ A0 q' q! ~openssl genrsa -out rootCA.key 2048
  V8 H5 {/ \9 D7 E' Gopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
9 D6 U+ A1 ?/ h6 m' G$ X7 Bopenssl genrsa -out device.key 2048
/ F' ~$ ^  D& ?/ copenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr+ Z( A) M. D8 l8 g4 L5 ]: N  D
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
1 p9 F9 J6 b' B, X# ]- m0 P8 |2 mcp rootCA.pem assets/client/tls/ngrokroot.crt, G7 v2 C- a; ]9 Q6 x! V
cp device.crt assets/server/tls/snakeoil.crt
' V0 P6 M% D0 ^7 X' hcp device.key assets/server/tls/snakeoil.key  
# P8 U) E4 g. q2 @6 a: [+ N
2 }% n6 Y* z, U! o0 X2 `
设置变量:# a2 s1 D# |, _7 |: v  G; N5 }
2 m: s1 t0 e" S( R# ?: K: n
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  : r; U) q. f* o% b6 c) k
生成服务端与客户端; F! ~8 l# \* [  J1 e) Y

8 E, g- U9 b, w: l, c- o3 N8 dmake release-server release-client  
7 j7 y( ^* O) Q" T( o+ ]6 M0 `4 S
8 X3 C4 u4 A# x, `' H: I6 |! G注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:5 Y8 D. V/ r9 p9 P; v+ F5 |0 f/ _( w
5 Q- f/ e% R! e: k0 p% d
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
  z5 F; f* T; }  d5 L, N2 e. B
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。8 f3 H# v& U. B; e) M+ u

! J, O. Z* @' O: d' t+ ]4. 交叉编译生成windows客户端' L+ i+ G/ a% E% P( U( Q
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
5 s* K" @; q* t6 h2 m0 I3 r, {( `5 i7 r8 s/ I8 n8 N: u
进入go目录,进行环境配置
4 O' j3 V5 h4 Vcd  /usr/local/go/src/' f% L7 I/ P/ m8 N

9 X% N- {: r# }! D6 W, }GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
& x8 B. F: o9 ?' e2 O" C进入ngrok目录重新编译
, l0 _3 e) \8 X5 O# n& Ucd  /usr/local/src/ngrok/- n; Z, [# u0 j5 c0 |0 i
+ w7 E! ~: O: T  H! Q
GOOS=windows GOARCH=amd64 make release-server release-client  / j- \/ k2 K# e' ^
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
% L5 {) G; T) v$ h4 v: i6 N
& m& n& ~5 F8 J+ ~. l- b7 g# Q5. ngrokd服务启动与使用
5 T# c. c( ]0 N! a1、启动ngrokd服务端
( H6 s6 P  p- {6 P) C6 P. z9 U2 g! R4 e1 D# t$ k% Z- z' ?
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
! t% N. p$ s5 \7 \2 b注意,让程序一直在后台运行可以执行
) d* Y6 ?+ ^+ H; h' [2 V5 F
% E3 C/ y0 i0 u( {; w& T5 snohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & . e- I) Y* }. C  n
想要结束后台进程可以
7 v4 _8 O3 _: T8 I# l2 r' k) j, ]: `; [, \
ps -A   #找到PID  
) }3 _3 [& ?. M6 pkill xxxid  
3 f) Y! ^0 T- I2、启动ngrok客户端9 u9 L; M; F8 e9 ^8 r( |. Q% P4 }- |

% }+ |4 d+ C, U# s* p1 t; I9 W$ C# {客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置6 B4 Q8 C5 O% {; f/ d$ q! P

' F% t; q9 L) Y9 v3 Vserver_addr: "tunnel.bbear.me:4443"  ! t" e$ `9 B  Q+ [. Q- e
trust_host_root_certs: false  
: k2 Z5 i$ J% Q

+ y- C* x# i# g2 Q. i* g2 u$ C再在windows控制台执行
+ z2 }; ^) W& ?6 G' l" K/ z- b
( q3 k+ }4 |" z# ^ngrok -config=ngrok.cfg -subdomain upal 8080  
! G* z5 y* w& B, u: O1 }7 j. ~) f7 |
upal是你自定义地址。
7 d4 c  g9 ^! G6 J8 [- \看到这样一个界面就说明成功了
0 a* V* ]( |. M( u4 |( |4 ~4 i6 C  O  L2 \. @( |( A
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
' Y% x0 |5 R( t5 |2 M" b2 V) q/ v1 Z+ R& e

, N" a, J9 v6 ^3 @5 o" R9 U
6 L% y/ |  T/ b4 z. `6 A原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
- A, F% b2 P% T- u8 t7 s8 s

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-5 01:43 , Processed in 0.071157 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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