找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11270|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
2 n+ z3 \/ _" P) g2 [
/ A& `# t/ U0 Z1.go环境搭建
  K( t' o1 E' Y- {go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
6 h; e. L. N- N% z: ]) S3 t" y源码安装go的详细过程如下:9 r/ l7 G' J, \& H0 g2 Q9 R# [% y

- v0 [7 u( u4 [+ P* W1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。( A9 D# }. S, U( D4 ~% S" L

, U) E: v* _, {7 Z  R& n2).将其解压到/usr/local目录下:
- r& T1 _  V9 o, J" J: J- ?( N1 t  Vtar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  ) ?4 `+ _: G2 d

/ w7 O- Z" I8 m" }7 @5 i  C% _8 c注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
9 u, L5 I: O  o; L% d2 `5 D. F3 v% Y1 p; Z0 h0 }
3). 在root环境下执行如下命令:& G" h4 X) f6 R, N# J$ Z
mkdir $HOME/go  & Z3 x. V4 T7 ~* O0 w/ T
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  " J, [6 I! S8 q5 F( U. Q% \# h9 w& t
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
: S( |+ S, ~  F. z! m9 Y3 U- ]7 pecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc    E6 E3 w1 u, ?1 d# t. t" U
source  $HOME/.bashrc  
1 R& ^" g$ W" v% }4 `( ]5 k

- o$ m4 K* u: D/ n4). 安装go get工具" n' b7 M, N+ B# f  N
yum install mercurial git bzr subversion  / G" t% \- ^' e1 F3 O
2 @' n/ b  F5 c( b
2. 获取源码
2 C3 u% ^# l/ c  L. v- Ngit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
9 q7 u7 o& @0 S7 g) M$ U获取源码:
( n( f: A& i5 g4 D6 S9 I) W2 cgit clone https://github.com/inconshreveable/ngrok.git    c0 l% `8 M# O& M0 v/ [  O/ y

4 v7 C5 a, s! l& S$ G! i; p3. 编译  h6 m2 \$ h/ ?6 o9 _( ]) L- ]8 F

. K5 I- e  E4 E, x1 G1 a6 C5 d1). 配置环境变量
) C" P1 l; `* r) X7 S0 v5 h+ X5 P) D1 e- g; }8 c- p
export NGROK_DOMAIN="tunnel.bbear.me"  
  c; c6 F$ p& }. F& [. B- T3 P+ ytunnel.bbear.me替换成你自己的域名。 ) b/ m: L6 ?$ P% d4 I8 T

9 D9 a( ?9 f: D8 z5 P6 w0 O2). 生成自签名ssl证书
" r7 @5 Z, J' J* J9 E4 F& y, X. n# @4 r( m- J
cd ngrok
, Z( C; L( y' ~openssl genrsa -out rootCA.key 2048- ]. b/ |! b, E/ v$ G( L5 a" P
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
! d: {* T( k7 ^! K) b# N( U  Lopenssl genrsa -out device.key 20485 ^2 {0 e2 u0 z& ]4 a
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
) t! C) q& |2 [) p0 B: L( p0 bopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50006 A7 {: }% i! ^
cp rootCA.pem assets/client/tls/ngrokroot.crt% r! V4 u9 x1 h
cp device.crt assets/server/tls/snakeoil.crt) l& i" V  ~9 W2 Z5 y. f/ I
cp device.key assets/server/tls/snakeoil.key  

: n, l% c8 p# q# \. I: I8 g6 j: b, X2 V
设置变量:
: X; {) P4 {4 {6 p; Z8 N9 t2 L
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  " f; r0 \9 a0 k3 T/ N
生成服务端与客户端
  d$ A, ?$ Z9 W2 k, ~! P( @9 a* `5 m+ M0 f% Z
make release-server release-client  . j& f' h$ t) O9 g2 v5 @
( g4 l: S+ E  n, [( j% I3 X3 @
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
) U9 J+ i! X8 d1 u
4 h! Y# U6 @* @3 r$ a找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。  _8 u6 M$ k0 H5 L

7 }4 Q$ l9 d+ K( L. x5 R编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。7 h6 Q8 U$ s& T: W$ A! K
* U+ @& y8 ]" r3 j( Y
4. 交叉编译生成windows客户端
( `! `6 E+ N1 M( v% `上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
) G9 E* T  u7 J" e' |5 m* q; a' O& A
进入go目录,进行环境配置
' [7 k8 f% C1 d& Ucd  /usr/local/go/src/5 E0 l& J/ k  M1 h. F; t' Q- `8 f
$ X3 `) }# `" i  Q/ b- J  l/ n
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
. G- A; h3 [- M进入ngrok目录重新编译$ n/ W' Y- ~7 b# g. c7 Q8 ?7 S
cd  /usr/local/src/ngrok/
" o/ ?. I( Q" P1 w* D4 t1 e' [, B6 U
GOOS=windows GOARCH=amd64 make release-server release-client  
% }9 ~" h( a% s$ J编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。- E1 W1 x5 M1 j. e& R
" g5 Y4 E1 b3 H4 K- }# F0 j) l
5. ngrokd服务启动与使用! g7 X! D" A4 L* @8 N/ r2 U
1、启动ngrokd服务端) [4 z. Q$ S! D  S) o9 G) {
  g, Z9 e5 S" n, a, }7 `" ~+ V
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
" ~9 k0 b9 N) G- ~, @; D  ]( s% h9 H注意,让程序一直在后台运行可以执行, E* Y, c2 t8 s+ D# G# z
; O9 H0 ?; D; R
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & & O- U8 A& i6 t! o8 m" |$ [# K
想要结束后台进程可以
+ [+ C  c" Y( Z4 s, W
* R, V5 e+ C0 t2 gps -A   #找到PID  
5 n! K, |+ Z; `. Ykill xxxid  + [( O* t5 e' W' k# R4 A; L
2、启动ngrok客户端: g- Q( {- X. w. l( }/ u* E: ~
1 r! ?8 J* N1 H  v  [! [# l
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置  q0 v1 u; j9 h6 M' X. O; N, i
5 Z  h0 N2 n5 {0 B" c( n8 V
server_addr: "tunnel.bbear.me:4443"  
& o& R0 u, [- k# Ytrust_host_root_certs: false  
& z6 o+ m; T. q

9 b5 B$ M0 A4 }: ~再在windows控制台执行, H  l$ n; k# L6 V# k

$ }9 W4 Z  H6 y5 j5 K7 {ngrok -config=ngrok.cfg -subdomain upal 8080  
) p3 Y- `4 G/ c5 _+ h
7 ]1 @6 o) P. e+ R( S7 ?upal是你自定义地址。
/ c. R8 M% d' ]  ~" g6 c看到这样一个界面就说明成功了
. Y. _4 h) {. f* F. w
- G+ G1 y' u: q5 s如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 & D+ T* T# A! `3 i

$ b  b' Q- o) A' v/ U
, q( ]; Y$ |# J/ ~' M6 d
/ \3 C  q: p4 ~! H原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
3 P/ S  K9 \) Q$ K, [- R- x- F% }

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-1 03:20 , Processed in 0.076406 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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