找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12941|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
0 Y% \3 e5 c) j& X: N+ G( P  U- f" e
# l  v: z: V  s/ K) f  R& x+ N2 k1.go环境搭建) H* B. l+ @' q4 k) ~+ J/ [( z
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
: y8 `, G* H3 P- B源码安装go的详细过程如下:4 Y8 l, f4 v5 b  `

+ s& u6 {) p, F$ @6 V: d+ d1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
% ~) G) V5 P( P$ K$ b1 H0 q3 B! x3 b1 h9 q3 [8 S
2).将其解压到/usr/local目录下:
+ a  {! |- [9 \tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  3 u; P) U9 O" y& j6 I8 M9 h5 ?
  [7 c8 E4 d& B- @
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
! ^* m  B0 G5 u- s- [' p+ a0 `( B) N: M  H) y5 b8 I
3). 在root环境下执行如下命令:3 p2 P1 t. |# n* h1 L0 x! t
mkdir $HOME/go  $ w% S* V. N6 ?# j; T
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
  P- _% c0 Z8 n8 h. Fecho 'export GOPATH=$HOME/go'>> ~/.bashrc  5 U2 r7 W, ~6 A  N# v1 D/ O
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
- @" u) Y  s' q. M) [4 u$ `' lsource  $HOME/.bashrc  
  m# H9 R; Y( e3 u( r* z% i) ^

9 y7 s- n7 B# e) X# y- c3 E3 c; L4). 安装go get工具' Z. y+ j8 h* y
yum install mercurial git bzr subversion  
% F+ x5 u: V# {1 E/ ?& G: s1 Y4 h
* B2 p9 [9 y; L* @* y* @2. 获取源码
6 t" ^! v4 S" Z* f- K' H- Qgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
$ G0 K% d; C: k8 V' Z: A$ [获取源码:
( _+ X4 C3 P) i" |$ Sgit clone https://github.com/inconshreveable/ngrok.git  
/ \0 |3 {  |( V$ [* q& L& _. L7 e. B& W! ?% g% {& r7 B1 `
3. 编译; I* ]9 C. f2 i4 \6 Z
8 E$ _, y0 c! ], p; e6 j1 i: W
1). 配置环境变量
, ^) P+ B3 ?/ Q4 L. {5 o5 k; I
. M: E) y; {' j3 r. h3 f1 r, uexport NGROK_DOMAIN="tunnel.bbear.me"  ! H  ^) ^; Y; r5 A% _; n
tunnel.bbear.me替换成你自己的域名。   b- U0 t$ Z: u) x
% \( e0 i3 s7 u' e3 j# h/ V
2). 生成自签名ssl证书
3 K6 A- M9 }; |/ E7 t
0 Z: I7 p. G  _+ B/ W/ v  g" }6 I; Bcd ngrok+ e/ A! U6 C( Q9 s8 o" I! [
openssl genrsa -out rootCA.key 2048/ y: T3 ~4 P' q" c7 F9 v0 A
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
) @8 O8 J  N* x0 `5 ?8 f$ e- \) @" Fopenssl genrsa -out device.key 2048
' ^( \, I7 _& ropenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
: h; X7 J9 U5 l# lopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
  `& I' S% }# |6 r" _. fcp rootCA.pem assets/client/tls/ngrokroot.crt
; V1 U8 S0 n& j! fcp device.crt assets/server/tls/snakeoil.crt
, E% P$ G) @* ncp device.key assets/server/tls/snakeoil.key  

/ P: C( u. J. u7 w9 v# A4 d, {* [# O" s8 f
设置变量:
- Z/ c' W3 {6 G
, X& {2 n% t, K9 bGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
% O! g) i0 W2 R生成服务端与客户端/ d: \0 w% ?4 P, z8 C0 a

! ]! n, q1 v& a$ m4 q- P4 N! y5 Vmake release-server release-client  2 K- y2 H1 i3 N0 L; @1 Y' y
$ @8 p3 Y7 w5 h* B: C; |+ F
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
0 M' n, o4 N8 e9 q& u3 {/ H# r! d3 H8 Y* L& q- B2 E" Z6 _8 ?2 V
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。. z2 N4 Q* a6 Z, ~; N9 r5 Z
  _. {/ ]  L6 `/ ^
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。! b  }5 ^" L3 N- ]( g8 d

% G* M- W4 c$ \! Z+ e4. 交叉编译生成windows客户端
# |( W4 H8 M4 v$ i* \上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
/ A. H* i7 _4 @
7 H4 q" e6 x! q( S, i$ X5 Q2 g进入go目录,进行环境配置
$ F8 {$ e! j0 }( Zcd  /usr/local/go/src/4 T% M5 _' _0 w4 |
: T9 Z5 ~6 U* ?0 Z0 x
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  4 J, j% f( {: t0 y
进入ngrok目录重新编译7 e+ s& N9 ^) w: T6 u- }( D
cd  /usr/local/src/ngrok/9 e% [3 H: W, J6 Z' c+ x* ?8 f' ~
( |7 w  [( G4 q/ u
GOOS=windows GOARCH=amd64 make release-server release-client  
& U0 j) O6 {( h! }编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
4 q- ^0 C  W( {0 Q: ^5 @2 l- c% _; j3 ^8 c  i: ^0 A
5. ngrokd服务启动与使用
5 r2 m" F  n. O( [. r1、启动ngrokd服务端
) E( A% e+ p" e- c, {- Q$ w+ ?# n6 N, R( Y
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
# c5 b- X6 O5 j, l4 e) G# v注意,让程序一直在后台运行可以执行
3 _8 o5 h3 ?# a! m$ m5 g. F# V! ?
5 a0 Y  R3 h' ]6 P$ v$ x- ?7 q+ @" Z- gnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
- }+ q( y2 O8 Z1 W9 v- P  R想要结束后台进程可以7 ?  e$ `$ h$ B& s
- G. R% N3 J% I( C/ U
ps -A   #找到PID  - i/ j- A5 h' z
kill xxxid  
( X& g3 E& x: j, `: Q! W% j2、启动ngrok客户端
/ m( _  u. m7 Q0 ^: Q! [" R- ?! t5 N/ k! ^# n1 I
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
  N: V: M% O* d2 v! X
9 O3 w5 J0 V5 \7 l7 p3 Zserver_addr: "tunnel.bbear.me:4443"  3 f* V. L( C( V
trust_host_root_certs: false  
3 ?- B. E5 H) r3 Z5 t

8 V" D5 S6 J9 ^4 O7 x& D再在windows控制台执行% N& A4 [. X# \; J) l

) l; N5 t0 X; M6 Yngrok -config=ngrok.cfg -subdomain upal 8080  
/ x' ]+ S: `0 _& V5 n+ A- V/ h$ G: @0 o" C- m, {
upal是你自定义地址。
+ a4 K( M- Q' _- j4 l! H. D6 S看到这样一个界面就说明成功了
4 F7 ]+ \: m, F1 c4 J" n- S% r2 L/ a6 Z! N
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
7 P6 _5 x4 e8 Q3 f# f& k+ s' S; [% W4 w3 y2 J$ }6 J9 H
  s5 W8 i0 b+ n2 N! b

! n* m" t$ H7 b* Z  _1 @原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral8 r; n9 p3 K  R/ I

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-26 17:40 , Processed in 0.093752 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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