找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9951|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
& w' M7 ]* S8 H4 U. l# O# l" C- M' y' w3 f7 I- X
1.go环境搭建" o8 s# k- M. D
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
3 R' C) z: C  R) [4 l* q- H- G: j, [2 ?源码安装go的详细过程如下:2 U% }9 y2 [( H# T
& E3 O- v  P, v0 o7 i/ [6 V4 y
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。/ v2 V# o( ]5 g. b0 g8 [4 s% x. f

) Q6 l8 }& ]1 t$ T$ N& z( a8 c, Q2).将其解压到/usr/local目录下:
8 @+ o  o/ ?% N1 O2 W; vtar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
8 b! m8 C0 R& ~6 l1 N. s( p/ }. \8 S; S. s5 h
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。, `/ L; s. o" {0 _
: G2 y( d5 x& R: |" s+ F! z# M
3). 在root环境下执行如下命令:: h/ c5 I, |6 [9 L7 ~, C
mkdir $HOME/go  4 ~4 z3 D; W' E  r" Y2 R
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  * C5 f- R+ ^! O9 D! _; E
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
2 A1 ?  l, E5 d, h) q2 L- r! Oecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
( H/ @. E3 U; [3 F; Psource  $HOME/.bashrc  

/ K5 T5 w& c, g& m3 C' C6 l( v. z" z6 @6 ~6 ~# L
4). 安装go get工具
4 t: {- L3 p  ?1 O' Gyum install mercurial git bzr subversion  
6 q2 {1 T' M! R, H  [- O. Z# f
6 e# U- [% C  R# i2. 获取源码+ q6 q- H+ u+ S8 e/ x# Z1 G% c
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 7 T( N1 ^' a& e8 _8 R. C' h; N
获取源码:
. U2 b' P! f) J  y* |8 X1 b+ sgit clone https://github.com/inconshreveable/ngrok.git  
$ d! s6 U* l" l
1 A7 N: L1 ?8 O% }  `& l3. 编译
' S% X: Z% `" R7 _  u; [; K
' x! f" v4 {' u, f2 H9 V0 B1). 配置环境变量
6 |) C0 }: M7 v4 h- Y
- y+ ^! n3 o/ a9 Q$ U5 g8 fexport NGROK_DOMAIN="tunnel.bbear.me"  
4 t! _* b2 e0 ]' o8 t1 Qtunnel.bbear.me替换成你自己的域名。
! Z7 m# y5 T/ P1 K3 o, l: D  n1 r, C' @4 l! t1 H/ ~3 |
2). 生成自签名ssl证书9 o# P6 J4 I9 L' m

1 r( K$ `: q0 y3 v$ R( g0 Vcd ngrok
$ I* G4 P0 ?# yopenssl genrsa -out rootCA.key 2048; {2 ]) E# m7 n4 ^+ v
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem6 H% T5 F7 Q" Q/ _
openssl genrsa -out device.key 20480 b7 `% G% b( I; g0 y! o+ b
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
! M% L; U- L) {6 i" Z) X4 _8 k  h/ ^openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
2 L- s( v" I$ n! K7 kcp rootCA.pem assets/client/tls/ngrokroot.crt7 b2 @2 q4 G( ~8 K/ W' M0 I- K
cp device.crt assets/server/tls/snakeoil.crt
. ?3 T4 Q* E. F( Icp device.key assets/server/tls/snakeoil.key  
* e! s: Y& F' E( ?4 U
/ z: J+ S- p) \7 h9 |
设置变量:: _+ [0 ~- R- t6 ~% D! k$ @
+ w# l& v3 r7 `3 x: R5 Y, X& X( a
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  6 e/ }* E. k2 Y$ t
生成服务端与客户端
% Y$ U7 c* ^) k+ Y1 H7 x
& L6 D  h/ o5 j. a/ Imake release-server release-client  
) f, _% o5 V6 K# X2 o4 Z( U
  j" U8 Q  N3 R6 n- L9 b( A; A注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:) ?3 ?6 U3 T1 r" @$ k8 ]
. \4 X- _/ a5 R
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。7 E0 V/ Y, r4 f; N5 K

% m5 a$ D. f1 p1 Q( `# ?; @编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。: j4 s& ]' B# z3 P% {

' ?8 v8 \7 k! C. K+ X4. 交叉编译生成windows客户端
3 T9 Z8 v1 M/ T8 r1 S  w( [) ]2 d上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:$ }' r* B3 ~0 y  y: q; }( q: S; u4 W
) w& n  {+ y) }. n, B) |: R
进入go目录,进行环境配置: b- j. I$ s, B5 V& u
cd  /usr/local/go/src/9 j- ^" f0 V  h4 s, E
$ H# u0 g0 x1 S6 k4 C" u: b
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
* Z( \6 L) T5 G% G$ K进入ngrok目录重新编译1 q( e' P2 J# K; |* u
cd  /usr/local/src/ngrok/
7 M# m4 |4 o' z( @; M+ E( z3 J0 ?* o) G# [& z: ~) |' g
GOOS=windows GOARCH=amd64 make release-server release-client  
; f  T" f2 ^9 D6 i编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。% M. L, l" H; V& X2 n& E
8 Y' O% Y" q, \) C  o1 o: z; k
5. ngrokd服务启动与使用
7 M: |# s/ d  {1、启动ngrokd服务端
7 D) u, H$ C, T% V& ?2 M; P
0 h' B7 i5 Y4 tbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  + [2 ^" P- G- e& F
注意,让程序一直在后台运行可以执行
6 i+ J: ?4 e1 V+ w' z; M, h
7 S, }' i& N, \) G0 @nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
. I  }6 ?6 @  j/ V' q想要结束后台进程可以3 S9 }" p8 [3 j0 c- l/ p. e- g& F5 m
. Z' W4 h7 v0 w* }
ps -A   #找到PID  # A: k: Y$ }. S% u* O# o8 k- B
kill xxxid  
' k' }) w3 r! f* ?$ q. G2、启动ngrok客户端1 V6 ^' |$ {, H& `& ]# i$ X
6 p4 M( R  s7 K
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
5 I' S% p5 C& n, t
3 N; [; x4 y$ Z; a( A9 E8 cserver_addr: "tunnel.bbear.me:4443"  
- M% w8 S) a5 }/ t2 X; }, etrust_host_root_certs: false  
$ Q: W$ V' u1 {  g
# q6 a8 s- i* \# Z1 k' t6 J, k
再在windows控制台执行' d) g9 |7 B& U" e
' F2 B* M, K, u
ngrok -config=ngrok.cfg -subdomain upal 8080  ( p3 k# ~6 j( {* u  n) v! w; ^
8 [+ ]5 i2 }, o8 g6 |  p6 g: L
upal是你自定义地址。9 M4 X; D% m) E; m. b4 ?% A
看到这样一个界面就说明成功了
( L4 G$ d: H$ W# \, g+ Y  Q: _+ v1 }
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 9 X# s! w; }& N$ w1 @

8 @0 X5 I! ^$ U, l) ]2 {+ f6 O! N/ o" m8 H6 W" t. j

! }7 w$ d% W( ~& P% N. B原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral: d6 `( F4 [4 B( @, c- o8 {% S

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-6-7 13:21 , Processed in 0.055387 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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