找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10102|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
9 M- R# k' Y7 X$ C" t$ u4 }) J4 b5 ]7 M3 \9 M" Y+ J& f! R
1.go环境搭建
& t  N$ P: N% b7 Y# o" S2 r  _go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 9 \6 a; I# T7 g+ c, ~& Z1 s
源码安装go的详细过程如下:9 _9 _3 W  z. E) r2 R' D" y

' _/ L+ b" m5 e3 B4 \3 e1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。' ~+ ^# _! J. C
5 k* n. a. K. `1 x" O% X6 ~0 J
2).将其解压到/usr/local目录下:, f/ k' _% c8 u2 x6 y
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
% E: I+ h. W/ ~5 z. r2 z9 Q! b; W6 o" q& H0 \. Y
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
4 u5 u+ c1 k( G1 O
' O' b- j  N+ m, o) @3). 在root环境下执行如下命令:4 G4 S0 s* b% U/ `! {
mkdir $HOME/go  : a; @% t1 T% n1 Q# x, M: N
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  & @, @0 \  Y+ l! O9 z7 k/ ~1 q( ]+ E
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
# Q$ B8 o5 M$ Wecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
% U( u, P8 e6 v9 \7 F$ Y' C3 y5 b+ R# D" dsource  $HOME/.bashrc  
/ }& d1 X% h7 S- [) Z, W
" f- o- V% V- h. Q1 P, r8 Y
4). 安装go get工具
/ W# ], X; P3 A! c2 o8 X8 `, lyum install mercurial git bzr subversion  
& O! _, O7 C+ Z( A) o
( u8 ^) F# v  N; X2. 获取源码
0 C7 h2 N3 A- _, D- b: b, kgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 % h% e5 H- {' n8 I7 t3 y
获取源码:
; \+ w! i3 v; }5 Mgit clone https://github.com/inconshreveable/ngrok.git  * q# Z. G" b$ Z
# |7 Q- J" H3 i* ~5 L( h
3. 编译9 [" i& }3 N! m6 c8 w0 I  d
7 b5 ?7 ^, R" c) v5 p+ L+ u$ Y; h
1). 配置环境变量
9 ^8 _0 A  R! C& Z6 o3 X
4 f! |: ^; ]. Y- {3 R& h7 Y1 mexport NGROK_DOMAIN="tunnel.bbear.me"  + o5 A2 }& r! N
tunnel.bbear.me替换成你自己的域名。 3 e4 \" g4 P! [8 s, Q- m! m( B

7 v9 J# a) ?+ O. h& u: [2 k2 |/ s2). 生成自签名ssl证书& t' W" Z5 m. h# ~# S' Y
3 y! ]% A- _9 [: x; v
cd ngrok) ]; d  [( d" l1 F
openssl genrsa -out rootCA.key 2048
5 }' b1 R1 Q  _, x' s8 y8 ~" j0 hopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
( c& g- [5 i6 T7 T: _, Jopenssl genrsa -out device.key 2048" j* |. r; @, }3 M8 C" G
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
1 v9 S# y4 N8 b" K5 I/ `openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
8 f9 k6 c" w# n8 \, R5 ~cp rootCA.pem assets/client/tls/ngrokroot.crt' @3 X7 ]3 \4 a- T
cp device.crt assets/server/tls/snakeoil.crt
  k% u/ J" L1 w8 y$ Qcp device.key assets/server/tls/snakeoil.key  
5 }+ ?8 e, a! i) N

8 F, m6 G8 {, p5 d& c' d设置变量:& r0 S% A1 Z) b2 n0 h/ [) i

" L9 B9 L) {* O* P, {GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
: U$ v6 G9 T! e) ^! Q; M* X7 M生成服务端与客户端
$ q8 l/ j' J3 j% r  b9 {, O2 L+ C+ ?5 \, s
make release-server release-client  ; h2 k! J0 A) A7 n7 d2 a0 T
" a  d6 h. M7 A$ \9 X5 j. M
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:& z: ?9 J  \! r7 `9 Y8 f
& A' y3 B1 \4 X  i' ~! D* r6 {
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。: {) f) S6 h, G- z6 j

$ X: w: \# e; ^6 ^编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。# s7 P; d* y: I
& N* y$ ^- @- r6 W! N& {2 M
4. 交叉编译生成windows客户端
% }. ^) r" p; R上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:& J4 g2 q8 _6 x: A3 h, E' {
/ x- w+ W$ l3 H
进入go目录,进行环境配置
+ f9 g7 G( `) Mcd  /usr/local/go/src/8 L- n" l: v; b4 i* P

2 v. s  ]( M/ g" pGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  ( j3 `* ], J& [" `# T- x
进入ngrok目录重新编译
% \5 C+ G) b9 K7 w0 ^# ycd  /usr/local/src/ngrok/
/ u6 v% T- X* Y7 M) r0 B
! \& f  B4 q. Q0 V* c1 @GOOS=windows GOARCH=amd64 make release-server release-client  
2 W- N% T9 B4 [% \! f; x编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
9 l+ T" @: z3 {, b9 P% C- p$ P: G0 F+ U8 k  }! S
5. ngrokd服务启动与使用
. d  Y; ~" e) \" o2 s( o1、启动ngrokd服务端7 l) f1 O  B, x& D

3 q- Y; c- l$ [bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  ; s! ~. n* i2 |7 {& u
注意,让程序一直在后台运行可以执行. U1 T; l( [4 S/ A3 u# {2 K

- x4 m; s. X! f+ D3 A/ A4 gnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
3 O; U9 a) E) a7 M想要结束后台进程可以& e: r! o1 ~# n) ]5 p% f

- P# m' z$ _: Vps -A   #找到PID  8 Y6 G" [# E$ C) ?5 U( M
kill xxxid  
6 L1 I- Q2 ]; O6 k! J4 a; O* n& X2、启动ngrok客户端
+ f" p- ]3 `8 l. W8 N9 B7 W% q$ F  T# H. M
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置. @0 y  a/ R4 F8 A5 g) `; K) R

. F8 c% T, \& R& l' _& vserver_addr: "tunnel.bbear.me:4443"  
! \: C6 F5 }. k, J, I: }trust_host_root_certs: false  
. `. f: f9 W$ R$ v' |3 q
5 c2 j; o- H6 _- {4 N: e( K
再在windows控制台执行
- ^) e7 \0 d0 t2 b' M8 G9 w
. D: |1 a. U& l  C& N# S3 Rngrok -config=ngrok.cfg -subdomain upal 8080  
8 f/ p: ]3 E* {5 c3 ~5 N4 v
* w7 q- a8 f& k- jupal是你自定义地址。
7 L2 u; E+ d' s. u看到这样一个界面就说明成功了 4 C) ~4 u/ i  ~. H" D. F

% z5 O0 Y8 b& R& o+ M0 G* T如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 " c, d; c2 |$ Y% e4 F- ^9 I

7 d- c, C: P! h5 g: e8 s  v  ^; U. x/ j+ W" M& V
) J4 r% [9 L) s/ w, U& n  z! S
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral5 \" {! D; n# \; j) i) c

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-7-5 10:24 , Processed in 0.093753 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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