找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12532|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
. {7 N1 Z2 L8 O: @& S" ?. G3 |
+ c! M# y% B) d5 B) J, z% k/ V( S1.go环境搭建
- Z! J. k: e3 `  X5 v- t' t1 ogo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 8 t4 S7 ~1 \. k# d
源码安装go的详细过程如下:6 ?  `3 ~# n. \. }! o1 _( P

; M! O" _3 f8 A1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
. N" [7 ^4 u( N2 C6 Q. F( g" c$ Q1 X* ?% J0 _/ y9 k
2).将其解压到/usr/local目录下:
2 M# p& z" |- k+ E) y# E3 [tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  9 @: @9 @" f' M9 h% H& `! ?

# x# z  t# w2 b0 ~注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。# z' T, S" ]' D  L, U. x

: N  w' t/ ^! f4 @/ T1 Y$ M  W3). 在root环境下执行如下命令:- T9 y5 q/ z8 p5 Y: y
mkdir $HOME/go  1 ~3 E/ y3 W8 F4 ?! E( c0 m
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
+ W+ U1 z/ u6 [) q! |5 y2 recho 'export GOPATH=$HOME/go'>> ~/.bashrc    w3 S' |# s/ _. g9 t. M
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
" ]5 _5 e: r& U) Jsource  $HOME/.bashrc  

; }8 E5 D& L: V/ [7 `3 s9 c+ K
1 e/ n; ~: q; A+ i4). 安装go get工具
* N+ H8 s9 K: @3 r2 iyum install mercurial git bzr subversion  3 M* R+ B0 e  g. b' w
) ]0 {- p& k3 K
2. 获取源码
" O4 D- n$ g* s4 rgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
- ?2 s: C1 }6 l) x( n' I获取源码:5 j( y5 z' h- z
git clone https://github.com/inconshreveable/ngrok.git  ) f, c6 N  O2 d4 i! z
2 t" k$ M( N+ s3 |5 ]- i0 T
3. 编译
9 i6 A8 i3 g% u- E. u$ I+ Z2 E+ Y3 X2 U; z$ B6 x1 r" }
1). 配置环境变量
3 C8 j# e7 H5 T( D8 S$ C
2 ~# ~8 W3 s+ D  Q6 S$ J! q# cexport NGROK_DOMAIN="tunnel.bbear.me"  6 k6 j4 _, L, ^
tunnel.bbear.me替换成你自己的域名。 4 `6 W% r! ?3 K/ _, W. `& V( W$ Y% f

( q2 z) T, d7 J, _# m& j2). 生成自签名ssl证书
; \1 O9 r7 [9 |# S* D( C: }! \' M
cd ngrok
9 t, n9 X6 J" j" ~! ~$ x% b3 v0 Lopenssl genrsa -out rootCA.key 20481 h4 [) U$ |  s, m9 b$ a6 q, C
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem$ T  r8 g& r/ g% C0 L
openssl genrsa -out device.key 2048& J: }$ p. l2 m5 @
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr8 V% D6 {5 u, K+ `. J
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50006 H' ]; V) W; s# J* s; h3 }+ J
cp rootCA.pem assets/client/tls/ngrokroot.crt
' h/ ^/ ~8 L( _3 Ocp device.crt assets/server/tls/snakeoil.crt: R1 ?$ J/ U" h: v9 i- k
cp device.key assets/server/tls/snakeoil.key  

5 a8 ^/ }1 p/ s! ~+ {. I  U$ y+ m- |: ?5 Y- `8 t
设置变量:
% ^3 I! i2 t5 D: ?. {
4 T3 X$ {8 {; V1 \$ Q& _; MGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
+ W: Z, t* i: L9 Y2 T9 f  `" m生成服务端与客户端& y) o: h! p% x! V8 ^
" H6 |& L: l! a
make release-server release-client  / s9 X8 W: r' k4 p1 p5 b( p. H
/ D, X; h& W8 R5 R8 O6 `) v
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:' ~2 q# X3 [" S0 v; b" A: V' _

. d& n' _4 {/ q找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
9 T) g9 L+ U+ M8 A/ ^; V& e+ a. Z* }9 j" ?% C6 j3 g1 U
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。$ d# h1 [! S1 }

" C& j/ }- x/ S1 @+ ^# M4. 交叉编译生成windows客户端
8 l- J6 t% e. N. Z5 @上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
/ [9 y9 _  U$ m# g$ C/ }
7 S5 W( p) n* [7 Y! ]7 @8 j进入go目录,进行环境配置
2 C) i* q' m( l' {cd  /usr/local/go/src/8 U+ V1 p! G9 o6 S6 v. a: e

2 Z/ a- T# m  n& eGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
* x, I5 S3 p9 H# M3 f* p" k进入ngrok目录重新编译
/ B3 R2 x% k$ V$ o4 Fcd  /usr/local/src/ngrok/9 ~6 s0 I; G' c/ }& b/ k
' q+ T! G7 a* M+ v7 e6 P% g) Z
GOOS=windows GOARCH=amd64 make release-server release-client  
& P: r7 Q* z( X4 ~8 g' B编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。5 \+ A; L1 N) n# J/ ?

5 [8 R/ B$ v' X  k* N5. ngrokd服务启动与使用3 p% y7 m" {" O7 @( Q  E# a0 x6 I
1、启动ngrokd服务端
- a0 _1 d7 k4 o, e; J1 d4 a- K# J( C7 N% w4 ^
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  9 B; M; N; S2 z" \5 l/ O; i' [0 x
注意,让程序一直在后台运行可以执行) z; V' X0 M4 G. f! l, G

' Y( N; g: \, k- h" i1 @nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & ; }. x! z# v0 l7 O5 H+ l5 a1 z3 H
想要结束后台进程可以( P& u4 H, V7 s9 g! m3 f  l
) H0 E8 C7 b: b. a
ps -A   #找到PID  
  [6 Z/ N) N$ Y; v; [2 m; Ykill xxxid  
$ ?" |! b+ W& H+ g5 H" `5 T2、启动ngrok客户端; L/ x5 D1 A2 q6 x/ E- T

5 F7 d) ]6 i0 M. O" j1 y客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
" L8 ]! N/ f6 O8 [- r
/ J- r; e; l2 L" r/ P  }1 `# cserver_addr: "tunnel.bbear.me:4443"  : G9 x# F& \' C( m8 S* Y) e
trust_host_root_certs: false  

5 L0 M; ], U* z- |
4 w2 v! _- x  t6 F2 E0 A; h7 o: t再在windows控制台执行
& \) n9 d5 g% A: P2 j. x) L0 E- _* k; I# ^  s
ngrok -config=ngrok.cfg -subdomain upal 8080  
/ J1 b3 X' i, M4 t4 S
  V$ A0 L) X) E9 Uupal是你自定义地址。1 J: v& f& W( b) C3 e
看到这样一个界面就说明成功了
9 m8 y  K' K/ O  B
& G7 p, p0 m5 Y6 I如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 7 V# h7 K/ `" t2 X) q
# C: Q7 B$ c% h4 p: J9 V
8 J, k0 I) S7 {& r  ?& u# Q; p

3 B- }6 l: C5 T8 B3 l原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
/ v+ T2 I2 `  q5 p& i! R

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-14 21:52 , Processed in 0.081932 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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