找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12352|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。/ W0 \7 Z+ k. }$ _

/ R0 _! P2 i  ]8 C1.go环境搭建. |+ a! \2 U) r' z
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
  Q3 X1 Y5 Z2 E6 b源码安装go的详细过程如下:
( G, d  m5 e8 ^5 @: Q" f7 Z: Q. r% R' K, I0 R% P+ B( N
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
7 E& k' U( ?% L9 l8 Y3 N2 e
7 C. z% Z; J) A' d8 V& W2).将其解压到/usr/local目录下:9 A9 R3 l4 ^6 I/ w
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
# c# U; g9 ~+ v, z5 \6 T
* h0 ?% N% S+ y5 a7 {" Y/ C/ n注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
! E8 ]. o$ h  ~! @( [' o6 H& F
9 k+ p: ~  H0 G+ W5 V3). 在root环境下执行如下命令:& _( I' ]% K: E! l$ Q- H; b' ?
mkdir $HOME/go  7 X2 }- i7 P( W$ b3 L& L  L
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
; p2 {# Y# W8 |' d. T" Y. J( |echo 'export GOPATH=$HOME/go'>> ~/.bashrc  # f2 b7 [; H( p. ?% x$ n
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  + v6 g- C- w, @, c6 j" |7 Y6 g
source  $HOME/.bashrc  
% `7 Z7 p6 \! W- w

/ Z( {7 Q# T( \2 d4). 安装go get工具
8 Y. m) D5 k' N6 jyum install mercurial git bzr subversion  
1 u) @1 @- U! i  S( U! `6 T' m3 E
  ~! o  ]: e8 e  d1 i: S  \$ \2. 获取源码
/ H5 k( J  U( Q6 \# Q& ?. T0 cgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
0 E# }, y3 B* k0 t' |获取源码:
% Z# n/ A, E4 c+ ngit clone https://github.com/inconshreveable/ngrok.git  , k4 E$ L) L+ Y2 @2 `" w

- Q$ k  [) I0 R8 ^" m3. 编译
- \% l; A6 c% \
0 @. ]" ~! @/ M" a* P. P  b1). 配置环境变量: x2 N9 `, }5 k  B& S' n

" H6 i: e4 O! j8 V- M1 [9 mexport NGROK_DOMAIN="tunnel.bbear.me"  8 w& x9 ?& F$ m0 C
tunnel.bbear.me替换成你自己的域名。
8 z- b3 q7 h+ s: r, u) @* D
  C0 S' j5 `% i8 q2). 生成自签名ssl证书* S. O+ e( b3 d) f
4 ~2 T2 G: \3 _2 D
cd ngrok
& D% ~2 ?# f/ V8 |. Popenssl genrsa -out rootCA.key 20483 S1 `, }3 S0 H1 t
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
- t( {5 a. P/ T1 {  Hopenssl genrsa -out device.key 2048
: E  g2 a1 k  X$ Popenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
9 w" r4 I6 h* @openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000- s+ \- L8 U( L
cp rootCA.pem assets/client/tls/ngrokroot.crt7 I$ ?  @+ V  M* [8 L
cp device.crt assets/server/tls/snakeoil.crt. P! d5 O! g3 a1 U8 j2 F
cp device.key assets/server/tls/snakeoil.key  

) M: P5 T5 @' w& k, D; t& X$ L# [6 }1 g& m3 l) A2 F
设置变量:& D; s9 c/ s  t' a

: t4 g+ g8 I9 c/ f9 EGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
: R9 C7 y* e9 N/ _4 v生成服务端与客户端* F( p5 S7 G: `( O" G/ b
; c( f+ V6 ~: O$ Q
make release-server release-client  6 H5 ]1 b6 d. K9 m9 B

& e6 L+ w  K2 j0 X; ?" n. [# i& l5 V注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:% @/ R" [4 k7 c/ g6 H% R' y5 ]; t' L

$ W. k/ X5 u3 d8 z1 g2 \找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
. ]+ J$ u; {/ X/ F: d" Z7 r) q, M6 t; [3 f, ^
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。9 C- X$ t: L5 {: Q
; U- @- T' z$ M- {
4. 交叉编译生成windows客户端
) S- U6 P3 Y( V上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:- D! _9 i, }$ D/ C" g7 _; w

* Y( X4 B. U: T- s( c进入go目录,进行环境配置% l8 @, K& l7 U; d# S) `/ y7 e
cd  /usr/local/go/src/. x" p( \" x: H& R
3 c; k6 H; `- U$ ~0 r; a# V6 o
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  + N0 {: ~) D1 e: e8 Z0 \( U/ C
进入ngrok目录重新编译% L* G" [; z, ^7 B6 p; z! P/ k
cd  /usr/local/src/ngrok/; W1 @! |0 H* R" K3 z; {

9 ^! `! Z9 E+ M/ y. hGOOS=windows GOARCH=amd64 make release-server release-client  
+ y. l. r% n( m编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。+ y$ ~' d8 j6 h& b( w& r* X+ c" F8 s2 l
( p! w, V- a% G- x8 \3 o, P
5. ngrokd服务启动与使用) ~. |+ K" g0 n6 Z
1、启动ngrokd服务端
1 z2 O) ?( u+ K8 t6 d
7 U" y# G  Y4 s! Z( l/ o" ebin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"    u: h8 e  e6 G4 h. [. c% K
注意,让程序一直在后台运行可以执行/ h, J& h' r: J3 a3 ~$ [3 q: v
/ O9 U" F1 J/ M
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
, b0 D, T- Y% t, ~想要结束后台进程可以
3 l" L- N% ?2 b/ H' b6 M' R, c! S+ [; I8 J
ps -A   #找到PID  ( N' K# |- D; L/ h5 W/ d9 O
kill xxxid  
- q9 o! a8 s" I& F1 r2、启动ngrok客户端4 f' L  y  G& Y

& p$ G" G- E- i9 p+ P* j客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
9 o5 r& C  A6 I; O3 Q) ]0 A) c6 C
" x: ?" ~1 }% R9 e0 w1 aserver_addr: "tunnel.bbear.me:4443"  " }& `% f. g9 Z$ W
trust_host_root_certs: false  
6 s( Q# q. C( s* Z7 W' z) \' L7 ]

8 h' m+ O+ d2 |+ z再在windows控制台执行
6 G  l; W, L6 I% i* R0 F7 x& f
) @( _  S" `6 [ngrok -config=ngrok.cfg -subdomain upal 8080  % O* s3 B3 V; q
6 `, b0 J' y0 o9 R  N
upal是你自定义地址。$ K: V/ O& Y( F3 R  d
看到这样一个界面就说明成功了 3 @8 S8 R! R) o2 O

) I8 ]& h$ V# X! ]1 j& I4 q2 D3 j如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
6 b% c$ V2 W" D1 X) Y; y9 o5 b4 U1 R) ~
4 p; r" Z" h" W

# ~7 ~8 b0 I! \* A$ F原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral$ ~4 t+ T3 i; A/ A$ N& O

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-25 09:57 , Processed in 0.075975 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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