找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12462|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
# o+ \  W8 t- W
: m5 M7 K6 ]# {/ r8 S  c+ S0 [1.go环境搭建
2 Q* l( b  }7 K4 u' B2 qgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 % w4 ]" b( I7 b# E
源码安装go的详细过程如下:
" V( Y& N: _% B8 ^. M0 J
4 H1 j5 g! x, p" ^  j: m* r1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。( T; i1 b- n' z/ U( e

* I( E$ l9 f9 |) y' i5 k2).将其解压到/usr/local目录下:  Q8 H  j  K* J$ o0 \3 h1 T) Q
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  + y" D$ L* C+ l. G/ i

+ Y& @; {/ `3 |+ ^( }注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。3 ]' m4 s% y( ^6 ^8 k+ |
) j  n) p& U/ S& ~" `/ J1 y
3). 在root环境下执行如下命令:$ ?/ U; z7 P4 i# z2 t
mkdir $HOME/go  6 q7 O+ F3 Z8 r2 l2 V( \- f
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  6 d" Q! C/ ]( j9 X  a) ~! a1 E: r
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  % b0 J. M% A0 t! R% P' ?8 Z/ ~
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
  J) k2 ?8 @& X5 ssource  $HOME/.bashrc  

* s7 F5 G+ q9 y1 {
5 [- |" i5 W5 H6 l1 q$ n  K, N4). 安装go get工具
) m- F! ~  U( A$ V2 S9 nyum install mercurial git bzr subversion  ; T9 ^6 u* \( _1 N- [+ {

/ U* p3 L5 V7 a& M1 O# B2. 获取源码
0 u% ], U- Z5 Bgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
! l6 N% ?+ K( G+ _5 l. y1 `( R获取源码:4 A" P. Z; }  t4 [; E- f
git clone https://github.com/inconshreveable/ngrok.git  8 f1 U2 S# [( C
& C  j0 {) i  r3 k
3. 编译
9 v" q5 r! N; u: ~4 b% X
- C$ j4 x% L( {; _' B1). 配置环境变量0 Z! W1 H: t2 C" @

- w: e  H4 _/ P3 j, Fexport NGROK_DOMAIN="tunnel.bbear.me"  
2 s- }- b* Z+ ?- i" Wtunnel.bbear.me替换成你自己的域名。 8 C- p5 I' Z) u9 S4 D# _
5 a2 ?, ^1 J# ^  z& O2 W
2). 生成自签名ssl证书
1 `1 f5 T5 C- R+ s; z+ k
2 V7 ^! ?* V! ]cd ngrok! T1 L% z+ q3 X6 Q9 C4 G% ^0 d
openssl genrsa -out rootCA.key 2048
4 J) X, u9 i* \. K) g7 T- Uopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
* ^; A7 f3 J# N3 L2 A- P3 s  t; Qopenssl genrsa -out device.key 2048" o7 J  s9 z0 N
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
/ V) r( P! s9 g% q' ?' vopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
# e# C5 R6 D) |( b: ]& H* Hcp rootCA.pem assets/client/tls/ngrokroot.crt
. ]' i$ ?' s5 f7 B" G0 qcp device.crt assets/server/tls/snakeoil.crt
/ r, u7 a6 Y7 n0 t8 R/ ^cp device.key assets/server/tls/snakeoil.key  
7 F7 O) U& a% y2 s; e
/ J: u( K6 M. `5 \' ]4 o
设置变量:; j* f1 V# I" K$ `; X; ~
5 y% E  P, g* t7 ]
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  - m+ ~0 g5 ^  F. P1 x% X9 C" K% t  |
生成服务端与客户端8 g  X: E1 z; {" [: D

* D$ }2 V3 k5 j, j5 \0 h, d! Umake release-server release-client  : B" W5 i% L( [; q: E$ E, l
( r* ]8 ]7 h5 V+ U
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:  D7 ?# s+ w  P( j8 V6 X
) k9 z3 c& w& w9 h
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
8 [1 n. y0 h( |; Z4 t/ B( M3 b
. x9 \& f: o" J. ?8 c% I编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。$ b  O8 T3 B. r7 p0 \
1 B! P, e! D+ O
4. 交叉编译生成windows客户端) L1 Y+ s- M( X; O
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
7 f" O% D* w) e# V2 X3 t
# @( ~. q$ ?6 X' m进入go目录,进行环境配置% ], E' @( H1 p5 K: c
cd  /usr/local/go/src/0 S; w# m$ r1 p3 P# @- L" v* t) c: E

/ j7 @) _4 p) f. ^) @GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  . J' \9 h. i/ K- `: L+ F
进入ngrok目录重新编译
9 l5 s9 M  m, `! _: I8 _: zcd  /usr/local/src/ngrok/# K  v+ X! ~) @2 o/ a

9 J" N. U  f' y' ?8 BGOOS=windows GOARCH=amd64 make release-server release-client  & o! u& F$ p  P" a! y' Q1 P
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
) G. f6 o: f3 j* O; q2 S
- j" J! r% W' Z6 e& j, I' g5. ngrokd服务启动与使用: w. V* O8 D0 c
1、启动ngrokd服务端
( ?, J) k/ z' o& D2 B
: _! q- b1 R# I) |: d- zbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  7 n/ h; h: ~' Z# c
注意,让程序一直在后台运行可以执行
- R5 ~( ^: |7 N1 c( d0 M# D0 E
7 P( L# I" Q( p; D3 T' k/ h6 p0 Tnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
% X6 Y* n1 P# C6 L5 g想要结束后台进程可以
- S$ B- C  N) Z3 L' D" ]
9 U& c  z5 u  _2 |2 v  p8 Ips -A   #找到PID  
! O7 N; t8 \; c, y" pkill xxxid  
5 \! r  L# v5 o- v2、启动ngrok客户端
1 @& ^  v! H) q: E: i  ~% W9 _- ~* C9 p+ P: k
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置" n# K8 M- ?) J* P1 G
1 r+ h7 l8 f% u3 h
server_addr: "tunnel.bbear.me:4443"  
) B0 m& d. ]. l+ i' w: Ttrust_host_root_certs: false  
# C' v' o' }2 @8 ^1 F# K
7 e8 N( @# a9 ^  X
再在windows控制台执行
* \- W, G+ {. t
/ l' c6 {7 I6 ^- l) G' M1 V1 angrok -config=ngrok.cfg -subdomain upal 8080  ; i0 o" P, ?0 X/ h& K3 q: Z$ C* Z

/ M0 J7 C$ b% ]2 p& Uupal是你自定义地址。
* K% _6 ^% _5 ?) l8 ^, C看到这样一个界面就说明成功了
3 N( y# a; U9 G" c9 B8 \
, t& x# \1 V7 N5 b% Y如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
9 A8 ]# U. g+ m, K( I- [9 s7 t0 ^; j% M1 n$ @8 }# S2 f4 ]' G
( g) J) I2 i) o
7 M. R: Y, j- |$ {0 n
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
2 }) k- S9 g/ O$ |7 z2 Y5 ~7 O& L

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-7 04:10 , Processed in 0.055769 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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