找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13388|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
# I9 D$ v$ ~1 W, K6 c0 M+ x  |5 s
1.go环境搭建" z1 @( {; Z- ~
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 ) \$ d. F1 F  l4 m- V
源码安装go的详细过程如下:
6 @; P1 ~- E6 L9 J. @7 S3 S1 @
$ A- F: h: K: }2 I1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。! P6 L# w3 u* _2 s

+ O  E8 }& W$ q* Q4 F& i' p& t% h- x" X2).将其解压到/usr/local目录下:, @$ y+ Y" W7 y: V% x
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  8 @6 R4 C% H! t7 n/ W; j8 J
1 ?  C4 t' \: m: Y# m4 j
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
) f' B1 I6 P/ K- K
. Y3 @# l  q9 S1 Z  F2 J3). 在root环境下执行如下命令:+ f/ p9 t5 T! o' l# G7 F4 M
mkdir $HOME/go  
! N) u6 c0 Z5 A1 ^echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
  b! T$ Q* [& r/ Hecho 'export GOPATH=$HOME/go'>> ~/.bashrc  
' C) T7 E( C0 R- Hecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
) h& l+ q6 e5 E$ N" Tsource  $HOME/.bashrc  
6 C9 c( R* d' m  A' o* B

0 Q; R$ ?" q. R2 `, a4). 安装go get工具% J. |8 D' _! o$ h( R/ |8 d# r8 x
yum install mercurial git bzr subversion  
3 v. x( a+ f: D, K( [9 ^9 Q  U$ a/ d$ ~7 H5 G1 S* E' x. O$ J
2. 获取源码  _7 Y& ^) X* f2 ^, g6 h
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
& s/ k3 h& T7 n0 v+ l! F获取源码:0 p1 O" ?$ C4 R1 I6 U8 k" T
git clone https://github.com/inconshreveable/ngrok.git  
& R  G0 m! Y# J8 V
! x& N5 `! i2 s; T6 q! A5 r8 ?  ~3. 编译1 x( Y# N) P8 _/ W$ z

7 l& D+ [  ^0 ?; u( l& L1). 配置环境变量2 U2 g' y2 Z" L8 _
% Z, z1 h& `# j. N9 w, _: ^
export NGROK_DOMAIN="tunnel.bbear.me"  7 z! ~) ~3 G5 e
tunnel.bbear.me替换成你自己的域名。 ' i, {0 H4 Q2 A8 `7 R

) ^3 c3 u6 O  P2). 生成自签名ssl证书
. [1 E; g" H  o& \4 F+ ?  ]
* C$ x! _# Q* b; P. f0 n: }cd ngrok" ]& M/ U; Y8 u
openssl genrsa -out rootCA.key 20487 z3 P5 a3 c( F9 @3 s5 x! Y
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
: e8 _' m% G" d$ ^. Dopenssl genrsa -out device.key 2048
% }2 u( C, t, ~! u6 k$ E& \openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr0 t1 y, f- [$ k" |3 D
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000. [( k  T1 ~1 b! U- J7 i6 q
cp rootCA.pem assets/client/tls/ngrokroot.crt
; q' C+ D7 u1 J- a+ j2 Ecp device.crt assets/server/tls/snakeoil.crt
( S2 t2 ?/ c' o) Q& i& {cp device.key assets/server/tls/snakeoil.key  
  @0 M' [8 S; L* k9 l2 c
8 [, q  y. y* |  w. o4 w8 @0 ^8 X
设置变量:
/ G6 ?1 J/ i$ e3 p! X
4 ]* Y( f! j* M4 eGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  : `  b6 \; L' P/ [# R0 u
生成服务端与客户端
4 |' D5 D+ O9 ^( {- d& H# D, h0 s
make release-server release-client  9 d+ d7 ?! `( j1 E
" v7 }! y) Y6 Y# J1 |& C
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:- N3 X/ {: _4 Y8 g

4 q* t# k& C8 B) X) C8 j( \$ A找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。2 L) T4 E: u3 P2 G- q  \
) ]3 a7 r+ w! i1 h: I  s) o9 q
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。. s* F7 d- s0 X. j  D
9 x4 N1 f  e3 S9 t( B5 Y( t
4. 交叉编译生成windows客户端, f" b$ h# y$ Z4 U5 |2 K  [: ~
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
# `; r6 Y0 g, E3 ?
7 A9 R8 T' I# h! O. a进入go目录,进行环境配置, g+ U9 c+ u, T7 ^% g6 R, N% ?
cd  /usr/local/go/src/" j6 |0 \  p" M& j
* d* S" E' \3 ?' j7 s% M' @
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  * o% X% J0 r! j5 i
进入ngrok目录重新编译  v& G, a# f3 b
cd  /usr/local/src/ngrok/
/ k' }! z) h) Y; D
& I2 a8 q. M7 ~% s# e  \8 q$ L+ v. qGOOS=windows GOARCH=amd64 make release-server release-client  ' _0 W7 t( H1 U% Y; R  g
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
4 S" Z1 N! a! k- @7 |+ d8 r& ]6 Z& M5 y1 s  e$ S3 x, `; R# Y
5. ngrokd服务启动与使用9 \; G: ]1 w% t! E3 r' d
1、启动ngrokd服务端. _& W- Y2 Q, k4 Z
3 U" s+ O0 S/ _( n* z* j+ e& d& S
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  : p: G% |8 l; S6 B, O' T. I3 j
注意,让程序一直在后台运行可以执行3 o6 s7 |% T7 f8 O$ U
) a+ \% c' b( ?1 l
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 0 u% }' _8 b0 q1 |
想要结束后台进程可以
& q2 y* s9 ?& G" C: j- c# {# i' c6 _: D, Z& g- P
ps -A   #找到PID  1 y$ D9 _9 [  B- ~
kill xxxid  
* p- p: n, p8 E8 s2 H, U2、启动ngrok客户端9 A4 L& K( r+ j

  f  b' {7 K8 u: m客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置3 t5 Y: a2 L# `( B3 L7 M( T  a: Q. c* x! t  R
% L8 a$ }6 T  {! o
server_addr: "tunnel.bbear.me:4443"  
0 N# B% ~) A2 Z% B! G- `trust_host_root_certs: false  

+ y& a: ?! ~  J$ R; e( V) f- [/ u% i6 C, M
再在windows控制台执行
; E2 g& v9 P, E7 ?
( |0 ^( h0 M$ A8 J9 A" Vngrok -config=ngrok.cfg -subdomain upal 8080  ; A% {) J3 k. r4 ~. b1 y! |
: ?. Q* b. Q0 h6 d3 w$ c+ @
upal是你自定义地址。
; ?( R7 r: i$ ]" f( w1 G; B看到这样一个界面就说明成功了
$ z. n/ e( A% q0 \4 `. M7 A
( `8 U; ^+ t; c6 D# M" [( e# [如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
0 d0 n9 k) n8 P$ M3 P
5 j2 }( Y/ L6 m1 S+ j5 y5 J8 T4 ~
6 V( R5 Y5 m3 f1 m4 ?3 @4 c
( w5 O# Q, E# I- i8 i4 J: m. S原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral' Z# R5 F' [- p. x

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-9-9 03:23 , Processed in 0.068518 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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