找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11323|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。) n! q$ X6 A9 Y* C

. Q4 B+ T  {7 t5 m! _, {4 w1.go环境搭建- O4 X- `: h- p" U, W
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 ( g2 ^( N  ^) y. t
源码安装go的详细过程如下:: P7 `& C- l, `( ?: |0 q. s8 z

+ |+ x8 v: z$ b8 D. W+ |3 v1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
* {" d! X6 _) G# @& o% J/ p5 k. K( ]) B
2).将其解压到/usr/local目录下:1 X! c5 k' v- c3 w+ k; {1 |: {
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  . H) [* j/ G$ ]& S. |1 D) h- ?
( a3 a* v+ a6 o+ E* m" c8 E
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。( k& Q$ V6 m' T  ]( Y  p

: |5 k1 @8 M3 o5 _8 L3). 在root环境下执行如下命令:
  B, f9 n$ ]* P, R- p4 C( amkdir $HOME/go  
( H( F4 \& z; U& x4 k  v- Aecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  
: _, F2 Z0 Z' N8 j1 b+ necho 'export GOPATH=$HOME/go'>> ~/.bashrc  5 k5 I1 W8 y( [& [* S4 J( \
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
/ p! s' i% x9 p& v8 Bsource  $HOME/.bashrc  
1 c# Q6 P1 Z+ D8 M8 S: _! M) P
1 s. K( N( p8 J# p6 |* r
4). 安装go get工具6 a9 g+ l5 @5 h$ B; i
yum install mercurial git bzr subversion  
* M# [- d! U$ z0 v: Y1 V% s0 V1 t& w4 L
2. 获取源码" U+ F4 U) U: i9 h& Q7 U! F7 v, O1 F
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。   p0 V& O$ g5 A+ W% x; ^. Q7 R* O
获取源码:3 G! c2 N( c. S# c# c
git clone https://github.com/inconshreveable/ngrok.git  
% _/ b3 f& i# c: r1 [  t2 d0 a; O4 I+ t% e
3. 编译
' ?; a/ i* n/ K- V; u9 Q+ {: [- `4 G2 Q) k- d9 {/ C# y) z$ ]" }
1). 配置环境变量
9 j! N4 Q$ o- d) }, S$ b7 P4 q/ n
' b2 y% O& `* Vexport NGROK_DOMAIN="tunnel.bbear.me"  
- A$ }, N6 ^; C- ^0 q. ytunnel.bbear.me替换成你自己的域名。
( V3 J5 z4 |. C3 Z$ M1 z: j0 W. o$ Q3 F. A
2). 生成自签名ssl证书
' ], [7 |( w( B7 V3 i: p$ Q8 M
# l8 K' P/ I6 G( O5 n3 ^cd ngrok4 \0 k) |2 p$ r; [8 |
openssl genrsa -out rootCA.key 2048* p( ^8 V) @. X" }5 ~8 ^- R; u
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem# q% k& e' w9 _+ B( x2 A1 h
openssl genrsa -out device.key 2048% h6 R. Y2 F: u( ^
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
$ s- E& E1 ]. p2 Q2 v# t8 G* U" @  F8 Oopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000- X. ?6 }3 T* a; T
cp rootCA.pem assets/client/tls/ngrokroot.crt& \& l* c) c; j' c
cp device.crt assets/server/tls/snakeoil.crt5 B$ R) M" V% [- x3 n9 |, J
cp device.key assets/server/tls/snakeoil.key  

, \" `: J/ k1 A1 R
7 x6 P, T$ f: p( F, W设置变量:
" |2 x1 {% d; ]( F1 s! Y, Y) D. ~
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  1 g5 Q& l0 i, h8 y& a5 v
生成服务端与客户端# r( |$ O7 `6 V2 [  c' L3 R

$ u( m# l) l! w  \# E3 x1 x# P# Amake release-server release-client  3 P) Y+ j% k4 ~  Z1 C7 E7 g

! x; [% ~2 m+ ^/ W! ^( o注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:6 v9 a. S! a( V" X

+ L5 }+ R' [1 K  o: E8 a0 I找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。* N0 E, V( }; S

4 Y) ^, Q& T  N" X编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
( M+ q5 Y. o# X! ~# F8 f) M
3 [. S6 Z5 ?% u0 A6 v9 S: C4. 交叉编译生成windows客户端
8 s' S% L8 X/ ^9 h! \上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
& r* P: m' A) H9 }1 W" j6 }+ _0 r6 X' m0 M7 e; X$ g* D2 u" N' N1 L7 c
进入go目录,进行环境配置: Z4 F  e7 p" I. `8 e3 ~7 P
cd  /usr/local/go/src/
1 i) {$ ]6 u) B2 u! c/ @1 ~7 q
$ X$ f8 g$ u0 B7 a6 V( z9 n) NGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
% z+ m4 p6 {' Y! E, ]! i% O1 M进入ngrok目录重新编译
: l1 \1 r  b8 mcd  /usr/local/src/ngrok/
' N' c. f' j) X9 y5 I6 [9 A" N
& Y2 O- _! V) ~, B( U# n6 S; cGOOS=windows GOARCH=amd64 make release-server release-client  ' G  `$ y1 b4 b: S( m& x. U
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。/ _6 u- r! r- `7 N8 w

5 i+ M4 e, ?% [3 d! e. n" R$ ^5. ngrokd服务启动与使用
* w, w( N& k4 }: W% d+ p1 B1、启动ngrokd服务端
7 j5 a& ^$ K7 i* l4 H: M: t) @1 I9 H( h2 F' g4 b4 N
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
+ ^$ B" Y: p$ H% B  Y! U+ }0 ?- l注意,让程序一直在后台运行可以执行6 e' I6 H1 w( K7 D8 P3 g; m- @

! W4 M7 ^% U* y9 n% M: Bnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
% [# t. Z, a9 Z4 U+ F5 `想要结束后台进程可以2 [, w- f  o8 [3 y4 D

+ S7 \6 \. e. ips -A   #找到PID  
2 U4 }7 x; C$ p/ U+ W0 c" ekill xxxid  
1 Y" f( k: u& H3 S2、启动ngrok客户端1 a  I+ z! D" F  t& T8 `7 o5 \+ R

& x+ e1 y& w+ u, q; ?  v8 L7 B客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置% i9 s& n2 A) ]) v
% j9 o2 S3 j  M' c
server_addr: "tunnel.bbear.me:4443"    S/ x6 ?6 @9 @/ L9 G
trust_host_root_certs: false  
$ O& D% H* Q* s' `3 g

1 P. l& A4 S* `( |% X6 [' Y再在windows控制台执行
. a: ?8 m7 M7 k' z. E7 i9 P3 c! U/ S$ K$ w- Z' k  I
ngrok -config=ngrok.cfg -subdomain upal 8080  
- ]- E4 E) B* ?; ^8 F; X* W' T. g
7 i' R0 t" r3 m1 G; M1 }, ]upal是你自定义地址。5 n+ F: @# l9 U- ?4 f
看到这样一个界面就说明成功了
2 z. E8 I8 D+ A; E: I+ }, L$ L" m7 t: N/ h1 V) b% `; l4 ]
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
" i8 |" ?# X9 d9 D4 R; j
! y# ?2 V9 i3 A3 u7 T) L' o2 h9 S( W4 ^' I/ e

* s0 r* E1 [# h0 |4 s" [原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral3 M% A- I( `9 _/ a4 V* K

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-7 02:21 , Processed in 0.076571 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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