找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12546|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
1 }; d: G; Y) a( T% ^/ R! x' e; m6 D  j$ N# B( j
1.go环境搭建; ^. k: D. Q1 \; M6 k
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 ) W* ]  a: j1 D9 x* m8 C, p' D
源码安装go的详细过程如下:) x4 B8 a( ^4 A2 J0 J  _
3 w/ W' }3 I0 {  Z
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。2 J/ m- l: O9 g& q$ T
) x4 ~$ l2 y4 L. ^
2).将其解压到/usr/local目录下:
3 P/ b: B( ~/ A) n- }0 k# ftar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  ) G6 c4 n( a3 l
* s2 _- Y: [% v- Q
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
4 [  b$ N1 f8 x- x3 R; ^) {
) l0 w7 L# j) ^8 y" E3). 在root环境下执行如下命令:1 |- l8 q- M( V( \$ \6 ?' [; H2 E
mkdir $HOME/go  
( w+ Q% w( N! i; `  N* Necho 'export GOROOT=/usr/local/go'>> ~/.bashrc  
; |8 n, D% p" }echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
1 u( G/ }1 W" D/ U/ yecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
0 @0 q& E) z* B9 L% b5 G5 qsource  $HOME/.bashrc  

( l1 H, g: Z7 c5 j0 B
1 T/ B; e, w9 A* Z, G- L4). 安装go get工具( }9 o8 R4 o1 ~2 _4 }0 S2 l) n" O
yum install mercurial git bzr subversion  
) m  Z9 ]# a2 O( L, K# Y" }* _# d; ?5 F! q$ ~0 W# j: P
2. 获取源码6 B# a* @+ m- J: K+ t7 ~: u
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
; i' q0 C9 ?. D* [( @8 a8 P5 T获取源码:5 y  U& r7 x$ [/ n5 M) x
git clone https://github.com/inconshreveable/ngrok.git  
2 [0 }) L, G$ A3 B1 }$ H% X
/ Q7 i, B" h, K" l6 N3 o3. 编译* J* d# G7 M" c- f
; \+ K) t! V" o/ o) N6 ^) F+ H
1). 配置环境变量
, |9 W7 B! I0 b: }7 y1 `
/ B1 J( U1 k% P1 M  |% t' o2 V; dexport NGROK_DOMAIN="tunnel.bbear.me"  9 _5 A5 i0 M7 I# v8 O# V
tunnel.bbear.me替换成你自己的域名。
# k! U1 Z5 @* n. l8 v- ]! e7 U2 l: ]. W2 e
2). 生成自签名ssl证书
( R" b# F+ f+ Q4 R2 O9 ?1 a8 O& E4 j' ?4 r9 N
cd ngrok
4 S0 l/ _7 f2 T3 Yopenssl genrsa -out rootCA.key 2048) {+ p8 Z& U* x7 N1 K- [
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem6 C- m7 S8 y7 k2 u8 r
openssl genrsa -out device.key 2048
1 n& _, c* }# q+ J% y/ [7 R/ Z2 |openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr% _0 g: F, Y7 c5 W0 _% X! v. O- W
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
- l9 ^: X+ j6 Q3 o; p' ccp rootCA.pem assets/client/tls/ngrokroot.crt( w5 O* R' L0 N$ X- ^$ [
cp device.crt assets/server/tls/snakeoil.crt2 v( G6 j% K5 k. K
cp device.key assets/server/tls/snakeoil.key  
7 p& j8 P3 k) f, B
! l) u% |, p+ g  @
设置变量:2 p0 G6 K9 I4 U$ H
* i% C; J4 W8 I
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
5 F- d; W7 d9 q4 N5 M- f/ v生成服务端与客户端
1 p# c4 u( E9 ~' ~, u
; W& k( a) B* Q" hmake release-server release-client  ( V0 z7 U9 c8 s1 Z8 |8 E

" M. }" Q* i4 ^6 z( z9 P" i注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
8 ~' W2 {5 Z2 ?! U: [8 Q  L0 r8 n' C! V
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。6 a, |$ Y% s$ r2 a! k! J
  N  |+ E6 [- U8 c7 @6 R
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
/ W' w" b8 Z9 R! f- L! |) y4 e" n( \- L+ F6 F' R
4. 交叉编译生成windows客户端
4 O' R4 W5 ~! h7 k上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:1 J. }( K' \3 W5 }$ r2 g2 Y
; g2 T' e8 i4 J8 [3 r8 N' G
进入go目录,进行环境配置( e; r( b1 _- r) E4 q% Z4 U
cd  /usr/local/go/src/
. j8 A% ~* f& Z
" S4 Z+ v) P1 s2 U$ t+ Z* W4 {GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  3 P2 h1 N% G: F& h% L
进入ngrok目录重新编译3 p/ m# M, s, O+ s  \# Q
cd  /usr/local/src/ngrok/0 r! \! Q) Z4 k. `
4 B( O3 A3 b' y# C
GOOS=windows GOARCH=amd64 make release-server release-client  
/ U( v: L5 w$ z, A% \: L1 r8 p编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。$ Y" i0 t. T8 P! S

' ^4 O& a* E4 [1 j! Z$ ~4 |5. ngrokd服务启动与使用
3 R  u& a+ o( h* @6 N& U6 y1、启动ngrokd服务端
* Q1 x& z( U8 e* ^; Q; {: u/ o" Y; T9 K. k& d, K
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
2 a# T7 D7 n5 \+ R" W& q* N* j注意,让程序一直在后台运行可以执行% ?  s1 S0 _$ w3 j! x7 t
; O3 t% s7 @  {2 T$ a! C$ f
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
5 W# I6 [( d; n+ V2 Z3 \想要结束后台进程可以
9 N8 W  s+ c& D' W' `# `$ ?( K8 m( L! C* q+ n( [. y+ J# r+ W
ps -A   #找到PID  
" J$ f$ C7 a4 k4 r) [- ^kill xxxid  
: J: }, k' X# f1 q: c( U8 R2、启动ngrok客户端& }( B7 D0 s+ Q; x& Y" @1 [

* h# C, s4 |9 M7 B/ R- K客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
5 n8 ]0 ~, B7 {6 P% c3 D) e  Q6 Y( Z6 l8 S8 [( c+ ]
server_addr: "tunnel.bbear.me:4443"  : |  l. f0 G1 Z- M' x8 r7 E
trust_host_root_certs: false  
5 j  Y+ K  B: k) |: M. z
. J3 t- l) @$ Q# p
再在windows控制台执行! C0 i5 @7 {+ u

; ]' b+ {- F; c; l& m  s1 W; Z- tngrok -config=ngrok.cfg -subdomain upal 8080  . B; ]- q1 _. r2 r( @9 t* Z' |

7 f$ ?2 s! Y* b/ r$ }$ xupal是你自定义地址。
/ k% |1 _6 P6 \* u1 g# G6 G看到这样一个界面就说明成功了
! T. ~& p$ g% Y7 N* e3 L
0 Q" X+ t  _2 _3 n& U% U  I如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
$ X; m; H/ @$ E2 K/ l$ _- m% x
! e9 X  `0 t$ j3 B( y; `$ q8 o, i, o8 S6 g! b

' J) q, I- Z/ e& a$ ?原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral4 G; I0 u% r, h$ V8 O: M1 k

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-16 07:12 , Processed in 0.087056 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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