找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13580|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
' o, l7 K) f: V8 U7 i5 ^7 L. y, m0 L7 q
1.go环境搭建
3 d* |& w: t" W2 {+ q" `go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 7 u  n' P9 E2 K* d, B7 k
源码安装go的详细过程如下:
' m8 v- T+ a3 m& ]; h3 R
. i. S1 M: a( D1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。5 m+ f" I+ i" n! d$ p9 x0 `1 g

1 s5 t; T. l7 W. n) D) {' P2).将其解压到/usr/local目录下:* y7 ~; h% Y2 g" Y
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
* \0 h; {! |) e+ ]; a# x( `( T. `. c8 w( G$ f( F) S# m8 s
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。' }5 I; N" i+ M6 J& r

: t2 y0 S6 X* Z! r; m3). 在root环境下执行如下命令:# a8 i- Y. S! j* n
mkdir $HOME/go  
  }& g* x9 j9 j' n+ [. u+ eecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  
, k8 V% a" [3 x$ n1 }6 Zecho 'export GOPATH=$HOME/go'>> ~/.bashrc  9 p! ?  X: g0 S5 ]9 F6 U% {. m# T
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  ; [( g6 F  r5 J+ d* n! K
source  $HOME/.bashrc  

6 h8 H( O9 [( I# M* C3 C+ R6 q& P9 }! ?' `! x
4). 安装go get工具! {$ L, k7 M4 M7 b7 I$ n
yum install mercurial git bzr subversion  + A% ]4 S9 t! |# @3 O8 k6 j5 S, s

* y: h( i2 N2 h' Y6 @2 n* u2. 获取源码4 c! x3 f0 s9 q8 w7 T3 G. q; _
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
( u- ~9 J2 y8 \- Y获取源码:
3 q. R9 |  a* v! ^4 f$ Zgit clone https://github.com/inconshreveable/ngrok.git  
9 E, }7 j: W3 A2 f  A0 P; s" s' F" ]( W# l) F! v5 r7 \8 d" L  q+ \
3. 编译
% _& w  {& ~6 k2 D: \& s8 V) Q6 T, n- M$ W% \! n" P; {/ n
1). 配置环境变量# {5 @: X" ?, o) k) f4 z
( q% v( _6 _; |3 v! |* F" P
export NGROK_DOMAIN="tunnel.bbear.me"  ) f) U$ l) D* P# g( D
tunnel.bbear.me替换成你自己的域名。 # A$ @4 V* b0 e: c

8 x: ^8 z* _6 x  }$ s+ N) J2). 生成自签名ssl证书1 m6 Q7 t6 R  u, w/ A
4 U6 R* E' `1 m' N' q& ^
cd ngrok1 L% Q+ I' A/ s* R0 O5 k
openssl genrsa -out rootCA.key 2048
( D# P& [7 c/ P9 T0 I; ?! ~4 O) ?openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem8 K1 H) h3 j5 a) J8 _; P$ e
openssl genrsa -out device.key 2048
3 p+ _+ \3 b! x: wopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
7 \  W% C1 a7 e9 jopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000& q" J4 A) l( n0 ^. d( a
cp rootCA.pem assets/client/tls/ngrokroot.crt
- n# Q( O) L1 l2 Q( P3 lcp device.crt assets/server/tls/snakeoil.crt* v1 U, t* \0 ]" E$ [# t! G  I% h
cp device.key assets/server/tls/snakeoil.key  

5 l% G! ?, E% Y" ~" r! g
# l8 x' Z; t# U0 ?5 q# c4 j9 Y设置变量:- K7 Z3 U' J" D) B9 H- F; A) c; h

& i( G" Z& L9 B4 P- E, r1 @GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  5 m: d6 S, T& S% b7 X& @
生成服务端与客户端# V# @1 [# m' Y8 \4 p2 p
6 ]+ H6 s) y5 s
make release-server release-client  
' T1 e. u3 p. M
( P4 W! a4 j8 }/ O+ \: O4 \注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
+ J8 g) B8 @3 F
: Q' p' l! H5 b/ z% a找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
: B+ E/ O- o8 q" [% x9 _( I7 e# W( ?; V8 \: u
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
% |# k/ v0 l' X  U' {/ Y5 P0 b  d
4. 交叉编译生成windows客户端
- p9 k! I' J' w/ d1 d; S9 D( @上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:" F4 W2 c. O* Y' O% Z, t5 j- A/ z
) T% D4 t' X5 ]8 ]+ b, L
进入go目录,进行环境配置4 f0 B* C/ m* Z
cd  /usr/local/go/src/
# ^4 I% J- Q) a0 b, U4 O
( T! V6 R1 k( `( \4 Y6 ]# C: b8 KGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  . C' P1 j4 v, L4 ?2 x- D
进入ngrok目录重新编译
& [( q( Y: F  Z& \cd  /usr/local/src/ngrok/' Q# Y( t1 a; R  V( ^! G9 s
0 Z/ t$ T7 l5 R3 D2 |- q
GOOS=windows GOARCH=amd64 make release-server release-client  
7 G5 l* i/ V, U) ?/ _- G编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。3 N+ w; Z# v; f2 a2 s: C
- w, J7 R# d+ K9 w; \
5. ngrokd服务启动与使用# l( U+ A7 I( O+ z3 z
1、启动ngrokd服务端
% R6 U4 N* v" q: u, G1 O, C, d8 d4 s$ k; z& V
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
6 v7 R4 R5 S) m8 r" N5 i注意,让程序一直在后台运行可以执行, Z2 i$ f- D( ?8 l. b; V; T/ o& }+ h

9 Q2 j5 ~) x( f, W" |( unohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 2 r7 B5 X3 D! L2 ]
想要结束后台进程可以
( g' b. M; j) N; E( p. F1 Q6 e9 |
0 k) M. u  f2 I& eps -A   #找到PID  
* \8 Y# i) w) k1 I! z6 J! Wkill xxxid  
0 O# H: U( D5 N! R; I2、启动ngrok客户端) L& Q8 K- J9 G: H% j+ F
, ~1 G4 v; B5 i$ m/ ^5 s$ l) C. A5 v
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置7 X' @4 G! d4 X3 l# s6 B. h+ |

0 Q5 J& T: ~) F* h- eserver_addr: "tunnel.bbear.me:4443"  
( c) }$ P1 y8 n' `) Etrust_host_root_certs: false  

: D/ c6 M0 N- ^2 e0 s, {. H
: [( f6 B+ c; r7 p1 {! ]" y* w7 P1 c再在windows控制台执行
% R$ ]2 Y* v. \* t) y2 G' Q& Q3 L- f7 f# W# G
ngrok -config=ngrok.cfg -subdomain upal 8080  
& C% b& r' E* y# J1 {/ ]9 Y, \& V! ?  h' m! m
upal是你自定义地址。' A1 [$ x$ b" R
看到这样一个界面就说明成功了 ) N( l; ~& f3 ^# y; }) ^

& m$ M/ b3 Z* L如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 * M& C" F3 e* L6 s3 L; s) q% C
; i9 }$ V4 l: e

. s$ i3 c3 r: y8 B3 d
1 r/ {4 E6 {* @原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
6 O  Q/ y) S# q  v3 s

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-9-29 07:24 , Processed in 0.077140 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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