找回密码
 立即注册
查看: 6952|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
6 s0 {, d! Y- W
3 w3 [$ F0 L" W0 \" d1 U6 X1.go环境搭建
. p; q) P& f/ D! H( fgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 - `+ G# w3 [$ k& ]  p
源码安装go的详细过程如下:
$ u  |$ S" r5 E! b# ~/ b0 S: v( n
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
: I4 Z2 ^( `1 w( d- T- x7 \( B  y% ^; P
2).将其解压到/usr/local目录下:' a) q+ B$ {, g  q
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
8 n5 F) X( w0 A4 n9 B) N4 I& H) E
/ c- ]& ~5 u- G" y注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
% T6 ~; C8 l- G  S# ^3 H( ^2 A! I
3). 在root环境下执行如下命令:
- X: i! r: h2 ]% Amkdir $HOME/go  2 }1 l1 J  W) Q. o# ~6 m
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
' t5 J( i6 W( m/ @" xecho 'export GOPATH=$HOME/go'>> ~/.bashrc  & _5 G: e4 P* N/ y3 d
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  ' M1 g0 q! ]3 L# Y( k, |; }' s
source  $HOME/.bashrc  
; V! z8 p/ p, \
! x# ]: Z; S5 ?8 p- G% I
4). 安装go get工具
" i% `8 O, H8 nyum install mercurial git bzr subversion  
( K% {6 d* p) ]' @/ n( p- `
/ m. z9 B* @( ?. W/ X2 z2. 获取源码: X$ U" {' Y; W- f* d, _# i# _
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 ) [1 }, _7 R5 K! w+ x
获取源码:+ l. U0 E  b+ O+ H  W' u
git clone https://github.com/inconshreveable/ngrok.git  
' S6 {7 @' D2 X. d5 b) e) Z0 T3 e! A- T8 i3 G
3. 编译
  C, g" _1 h* n7 U" g; ~; y* V+ F' o$ E3 {+ U( Z
1). 配置环境变量
7 C8 Q4 h, M# ?0 E1 L% S- i4 h0 X" J5 C- s& [( p7 @6 N
export NGROK_DOMAIN="tunnel.bbear.me"  : L) G/ @5 c( _
tunnel.bbear.me替换成你自己的域名。 ) D7 e% h: f; \9 L' N. e

- _; v" E/ G- L) A2). 生成自签名ssl证书
7 b9 y' M5 v( k5 U3 I: F& J# J5 Q( q( \# f2 D
cd ngrok+ x( h& R4 h6 Y8 S6 \$ Z; |$ F8 C( M# A" Z
openssl genrsa -out rootCA.key 20482 w! i2 g- U+ O
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem1 D2 j+ U) g1 P
openssl genrsa -out device.key 2048
( m! D! l: A3 \2 Copenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr9 n; v0 w8 E) f' n; a5 S
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
5 ^: D; |4 W& m! A/ D( H" ]cp rootCA.pem assets/client/tls/ngrokroot.crt
8 C/ U2 c  c, X) Ocp device.crt assets/server/tls/snakeoil.crt
- W( Q# d8 N' P* zcp device.key assets/server/tls/snakeoil.key  
- q. y% l7 Z/ h' F& |

% `* }0 c$ ~6 L2 X" T设置变量:
3 }' ^$ Q* K/ i# Y# E2 R
% ]3 ~  J4 w# F( {GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
) B: a3 Z! a/ J9 N生成服务端与客户端( n- _; Q. T1 g: `( p
0 J: s+ L0 e; G, L
make release-server release-client  
& V; J6 \1 P5 p) L7 ?' x
1 }  y1 O2 A, W注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
8 ^  W! b* S- q- p
/ o) y: `4 j' K9 Z, A找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
; P/ T% [2 Z3 Z/ c1 K3 G. e6 _# M6 w7 j
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
0 g3 X3 S5 V! F4 n+ s0 y
# g+ N7 T' O8 w4. 交叉编译生成windows客户端
3 h, E0 P4 \" F/ X" M' {上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
2 ?- d% ]' @8 a2 c6 c1 F1 h/ W7 L4 E
进入go目录,进行环境配置% v* v! z9 x. I' b
cd  /usr/local/go/src/
& ^/ ^' f5 j* m' c( w( j
/ v  m2 S6 _+ K$ `( g3 |, WGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
0 S! L: `/ p" S2 z) Z% T6 t0 r- c进入ngrok目录重新编译5 p# z) H; P) M8 M$ |" k
cd  /usr/local/src/ngrok/
$ E" B+ `+ D9 m6 A# E) x3 B. D- W7 c- u& g6 X  j
GOOS=windows GOARCH=amd64 make release-server release-client  
3 u7 P# j6 |3 U编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
! z, b  ]" m7 |0 C9 U3 g  |4 X2 \7 t( k7 ^# O! {) X" `
5. ngrokd服务启动与使用& |1 T/ e' v5 L4 \( _; P% H. x
1、启动ngrokd服务端7 v9 e# b' _5 H. ~5 ]- n0 P

7 @6 `# {# G, b- H/ Ebin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
. z4 V8 t# Z' S6 s1 g注意,让程序一直在后台运行可以执行
" K! J2 Q) N! N; ]8 g/ X1 O( H- f. t/ J- b9 E' S% o
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
8 s. V: [" \0 V想要结束后台进程可以
5 u- q0 b' y: W/ l1 r0 ~9 o) r+ |
6 m$ J3 Y' E% xps -A   #找到PID  
+ J+ _8 P& C/ hkill xxxid  4 q3 w) m# b" M: i% J2 K) c4 ~
2、启动ngrok客户端
0 r1 f0 z7 C) W( w
5 T1 M1 @! c( q7 b# ?( \" B/ J% V客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置" a! M: `+ {, y7 F' R* Q, V5 [
- q4 \; R& b* R
server_addr: "tunnel.bbear.me:4443"  
; l' C7 {. y% jtrust_host_root_certs: false  
5 g& s% x) ?7 }. c& F

  H7 z3 Z: A' D4 I3 Y8 ]再在windows控制台执行; \' D# P, i  ~0 Q, d1 q8 K' d; {
. g# M4 E* K" x- O
ngrok -config=ngrok.cfg -subdomain upal 8080  ( |4 _3 r) m3 G9 K" |, E
% [' r$ r; [8 c  V5 G! Q& u
upal是你自定义地址。
1 q: @) {+ O: `看到这样一个界面就说明成功了
5 d8 I4 a5 b6 U" q& h' r4 R
" y& n# `5 o* H: N  a, r2 R如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
, e+ E( y1 D7 m' {" m6 i3 Q1 Q" a1 s1 d% q8 r; e% J- u

& y7 R; Q  w( v
% o# y8 P! G8 K' \9 a原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
: E" q! q+ x9 V+ b

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-3-29 23:04 , Processed in 0.227616 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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