找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12176|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
/ O; p, e7 d# }' P
9 Q. Z, y! v3 [* J% z9 [1.go环境搭建
* b% [3 r& b' Y  i& f3 e& `6 P# ^8 ugo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
; i" V9 |% W/ z1 e源码安装go的详细过程如下:
% Y6 G0 r3 Z: q' u+ j4 o7 e5 b, Y, |* Q, g: Z
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。% B8 B" N0 [' N- v* ~6 ~' o
. k- K' _& T- o) m
2).将其解压到/usr/local目录下:
3 i! F9 c7 x! `$ a- gtar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  5 E/ V& o# {3 n/ i8 c$ d# m! ]
, h  @& ]" ?: B3 v1 P7 x/ B
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。$ S! T- L1 f& w+ r

- `5 R# y5 l+ w$ e3). 在root环境下执行如下命令:
% U8 ?& u# Z8 w- c' b& R$ f) W) Tmkdir $HOME/go  
/ D$ B0 n" D1 }5 D$ Recho 'export GOROOT=/usr/local/go'>> ~/.bashrc  # @: U- a5 Z( }0 m; p1 [4 }
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
' C* O* L. R2 l3 z9 @3 H7 yecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
% S7 i: |& _, q) P+ y  B) l8 jsource  $HOME/.bashrc  

/ f7 N2 J  M" m& x$ O& C& x$ `; {
4). 安装go get工具
, J5 {! T7 `: B' B3 Ayum install mercurial git bzr subversion  
3 p4 i6 E  D2 v" v+ @6 b  W
7 q9 `) Y1 i; B. }2. 获取源码. Q7 @7 E) X: B  M5 w
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
5 l3 y( }9 }- m6 |% J5 J获取源码:* K, J  p4 b/ r7 n# [2 H: I. E
git clone https://github.com/inconshreveable/ngrok.git  
  O/ A. S5 b* O# A, V/ Y# j8 d9 t$ n' c' ~5 u
3. 编译
  q. A9 C- t1 G# r/ s
- h. t$ F3 a3 [1). 配置环境变量
" U, q' |8 H6 p: `' J  j/ r: \! ?  o1 N3 g
export NGROK_DOMAIN="tunnel.bbear.me"  # o" N% a# J$ L
tunnel.bbear.me替换成你自己的域名。
/ l6 \# N7 z4 s) p- g/ d8 C$ P4 w: _# q/ z1 R- n
2). 生成自签名ssl证书
- d" B( {2 A. y& S6 d5 a# a0 r+ h1 ~- s, I
cd ngrok0 J7 l: d) f% B, O, q: d
openssl genrsa -out rootCA.key 20488 }8 U- o! V. t7 K- t5 A. d
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem" c7 f- L' T" M) b, ~
openssl genrsa -out device.key 20487 |2 o% @. b1 ~# {6 x/ p
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
# O$ r9 G: P  ^openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
' G. w: b3 r3 A' x8 D# tcp rootCA.pem assets/client/tls/ngrokroot.crt9 e( {/ m: K. q0 Y: l. i
cp device.crt assets/server/tls/snakeoil.crt
. _  W) E0 w; B( M8 Xcp device.key assets/server/tls/snakeoil.key  

& X6 }2 v0 e" c: M% D* x& P$ D0 v6 e4 l) C
设置变量:+ K5 n+ F8 {1 Q5 T* N
( B. L+ c2 L' _1 {4 k) U
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
" U( w  ~$ O$ T3 k8 H生成服务端与客户端! C  ^& e( v( ]. g/ _8 j1 U  ]+ g
; t( o+ l, \/ m; h
make release-server release-client  3 j" y) I4 f1 S( B. v' R
6 i: d* b5 c" s- w
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
, c7 W/ v0 R1 n4 {7 [5 m: D5 P" Y) |3 `3 B) E8 x
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。" l1 L" a; T3 Z( y! P- ?

- A. Q0 M4 A) T1 J编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
) W9 O( g5 o( k; n+ q9 l  b
: ~+ y+ j& l" _1 m/ k4. 交叉编译生成windows客户端1 s- L: @7 H" M$ R; X( t9 r
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
* }* {9 `. r8 E7 F
* E+ i- \* e) y' q0 f进入go目录,进行环境配置
% `7 {2 m: Q1 l) K# Y! k7 k5 K3 s. ncd  /usr/local/go/src/- G( v% [% ?( k2 M- k8 {

; R3 ]& C) [/ n: r) AGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  * z4 s% |/ e/ C$ z% W9 @' E( l  H8 _
进入ngrok目录重新编译) l4 `3 M/ ]- ]0 S/ }% y# t" f% Z3 r% _
cd  /usr/local/src/ngrok/
8 `- @# ?3 M% d1 V! q* [7 b$ j4 V7 Y  g) c& f
GOOS=windows GOARCH=amd64 make release-server release-client  
  E7 a: J7 Q( B: M: E9 v编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
: B, I/ X# r( K: m5 ]
0 ?9 g1 K" ?- O# y1 f5. ngrokd服务启动与使用2 t( b+ @" @  P
1、启动ngrokd服务端
! E& {9 g! v8 n. R
/ p  p# U6 C% x2 \. _4 m6 [) Obin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  ; j& a' b& b3 H  n+ e
注意,让程序一直在后台运行可以执行7 X! T* C& Y! e  n

  }: ^$ r9 U* Y* T1 hnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & $ {: _1 R3 B' L7 `4 R1 _
想要结束后台进程可以
; u* [7 @% K1 r0 g- R
3 T# z! {% p! A  Pps -A   #找到PID  ( w, f$ Z; w5 d5 I3 ]6 a) ]0 y
kill xxxid  
: ~* F) H6 R1 w& z2、启动ngrok客户端& t% @- |8 ?& ?+ R8 p, o

$ l6 s% x6 W8 r  ^$ G客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置% R8 d+ B9 z# i, v# U3 d

* f# q2 K4 e4 l+ Bserver_addr: "tunnel.bbear.me:4443"  ; `  P' k1 a$ v1 U
trust_host_root_certs: false  

3 c8 x' }4 ^; s) U& n
4 f9 w" p- _  \再在windows控制台执行
) a' c: ^  x# O' o
! X+ }; M5 T" U, R6 dngrok -config=ngrok.cfg -subdomain upal 8080  
5 m% h& u! Z+ v1 B( t% H  B. j4 _" _: T
upal是你自定义地址。- }: W4 y9 i, L8 u+ h
看到这样一个界面就说明成功了
4 M1 ~' ^/ v7 V6 q) i/ @, R" w  i' z5 q/ J2 i/ O. k
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 ; ^4 K) `" o( A( s
4 x6 [, K4 I# W, }  k

8 H3 v* K0 ^$ j. F9 C) W1 G8 W9 E
  f, _1 V/ f. j/ B原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
3 V! s# r( l* l3 x6 H% M+ c0 K

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-7 00:35 , Processed in 0.068193 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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