找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12365|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。" X6 E3 r& I- G
) u6 J: P' |* z3 l7 p5 z5 _6 c8 v( A
1.go环境搭建
! G+ I1 {! B% ~% ago环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 % N) s5 l. l2 w$ n
源码安装go的详细过程如下:
. ]: O1 w) l* P$ |1 t7 @! o/ Z! h/ P; h" H
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
+ W% p5 ^# e+ R# x+ g9 G& U! F3 O8 A: ~0 _1 A$ V0 O
2).将其解压到/usr/local目录下:
8 ]  ^- b7 o( ^; G. ptar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
( D, J" a" M7 E; U
. ]3 y* C, d1 D8 a注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。. O4 f( M. Y2 D! `
2 w5 {" U7 d0 m; w; H9 }
3). 在root环境下执行如下命令:. B* j; T# |) i/ A
mkdir $HOME/go  ; s  ^" {  _4 r* M5 ]
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
5 h9 g' b% y; |echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
: @+ D/ e1 p# w, F" H( Q& becho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
" c- {2 ]) M  e: S) Rsource  $HOME/.bashrc  

0 ^* ]0 Z  D+ i3 N- S# @% ?4 r* J
3 I  G! ]/ @- p) b4). 安装go get工具% _- g/ A1 J; ~3 ?4 K2 l3 j
yum install mercurial git bzr subversion  & m) k# a9 `2 R( o6 h( e! n

* _+ y6 o8 d0 g2. 获取源码
: @: y" d/ Y8 }2 c9 dgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
' g' j. C3 Y* M6 I7 x$ P获取源码:
$ R) `; I# _8 ugit clone https://github.com/inconshreveable/ngrok.git  
0 K7 r2 w$ ~6 _4 B( q* ?5 C$ w. q3 [  I4 b2 ]/ R
3. 编译
( Q' e+ G, i* N2 R$ H
- m5 f, t; N, O) D9 k! T, M* p4 c1). 配置环境变量4 N. ~6 O: d  m- Z; X2 W' ^

- o9 X9 S" M6 {: Uexport NGROK_DOMAIN="tunnel.bbear.me"  1 k. \0 |/ y- y6 ?0 v
tunnel.bbear.me替换成你自己的域名。 " D! m* h: R9 `/ O" |. P2 i! a& v# ^
" U" ~2 h1 |2 ~$ w
2). 生成自签名ssl证书9 c( Z( ^8 \8 e. s
1 f, ?# c* A& }1 e0 |
cd ngrok
8 R4 R+ U4 N; |* t6 hopenssl genrsa -out rootCA.key 2048
: q8 s  Z% o/ c0 n1 ]- C' oopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
: }! l8 u) K/ S# y3 d& p. Dopenssl genrsa -out device.key 2048  d* x* D3 e, J* y* Y( k
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr9 [0 R, J/ }* E! Q+ z
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
8 w* H# t- T( o( x/ i2 N7 u# Acp rootCA.pem assets/client/tls/ngrokroot.crt5 \# c; V  ]+ C) k0 }9 ]' V- B
cp device.crt assets/server/tls/snakeoil.crt* H2 s2 k/ h. k- {4 y
cp device.key assets/server/tls/snakeoil.key  

6 \" c) d' c" i  m3 w' O7 n' _4 d7 n! d4 j* V
设置变量:0 Y' [8 q8 p# [( D! b: R; _

& b* A4 b6 i* f6 g! ~; }. z- iGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  3 r  a5 g5 d' v$ J+ e/ ?
生成服务端与客户端  L5 }- z! ~) W/ M! o9 w# F) M
7 ^" l/ c: x9 F$ M- S6 R; y
make release-server release-client  + a& [: d2 u7 e4 i, b. i6 o
0 q- `  ~/ `0 N! y
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
# X( Y) a) {8 F3 ~! S4 [' I: ~2 k3 T) {) N7 |8 u
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。( i* w, A' U2 i& N) v

$ x8 L* P# w1 V; {编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。+ ~! x( G" @7 T! s' k8 q+ J2 I5 W

( ^$ z' a0 i" N" _' S" Z7 {4. 交叉编译生成windows客户端1 s7 J' Q+ c  x) z" ?
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
4 j" n2 c" T3 E) L# V; f5 l$ M' |, Z/ ~5 P5 d' Q. T* K$ g
进入go目录,进行环境配置. V' d$ @+ t2 b- N; P2 f
cd  /usr/local/go/src/
8 R( D( Y/ w' N1 ]
5 M* r# a4 z, a0 n- ?. IGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
# m4 I% i# A$ S, F进入ngrok目录重新编译
8 v# d* F+ \- `cd  /usr/local/src/ngrok/8 o3 D2 C) ]; s- J8 I

" p$ j3 z2 R+ v/ iGOOS=windows GOARCH=amd64 make release-server release-client  . w: C6 i% g% f3 \4 A6 s: }* P: p
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。7 J6 o: U1 Z9 ^! Q' w! V8 Y
6 t: n$ t4 |. v6 l7 L8 q! y2 a/ I
5. ngrokd服务启动与使用
- Q: F- f8 S8 K& r2 u; a8 r( A1、启动ngrokd服务端7 V# u% X( @) V* G$ L# `
! W0 u' j, l0 m9 z
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
; B$ k! o2 D9 F: W- x' I/ V& e: ?注意,让程序一直在后台运行可以执行2 r+ ~* w' |) w- K* H2 A! @

- d: N2 A2 i8 e2 m% L7 y" q. }nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & + K" {: ~7 g$ r" f
想要结束后台进程可以6 {6 {  E& j, ^: ^" a
! ~) n9 T0 N3 q% l: D4 K# t$ |
ps -A   #找到PID  . @6 S- K; _7 ^2 I) m: O/ n
kill xxxid  
: |3 o! e- F& s) r1 V7 I  f- y2、启动ngrok客户端+ G( r  x3 @2 F0 @

7 w% H" n8 |0 ?, x" ^5 N! a客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
  d1 [. D3 y0 a. ]! T8 ^/ u, \* ^- p- y* o) E  q
server_addr: "tunnel.bbear.me:4443"  ; v& {  Z' T$ {
trust_host_root_certs: false  

- p6 A# ?+ n& D6 T: a4 |% Q' e& C# G$ x( T5 R9 V) d
再在windows控制台执行+ K8 v9 n+ }7 k  U0 T
# `9 s" M1 H) C
ngrok -config=ngrok.cfg -subdomain upal 8080  # |: _' \6 [7 ~2 a+ d

* N; G/ V1 j( ^4 C1 Dupal是你自定义地址。; A2 `( i0 x/ \! @) b0 k
看到这样一个界面就说明成功了 5 X( ]+ \% r9 j4 X

( U# y  y/ R* R1 C* x如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
0 Y0 o0 o! S$ v: D
, ]5 e- n9 m  H6 i( [- U2 l
8 }/ l1 L$ G1 v3 L( V+ D0 Z1 M8 f& [( z6 |
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
" j& b! ?; R- ?7 X! P# J& ~

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-27 04:20 , Processed in 0.079576 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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