找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10814|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。: S2 ^  U* r/ C# K0 k& P
, f& e) q6 k0 C! w( J9 j" t
1.go环境搭建; r4 Y: j1 c! H) ~$ E
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 7 `# R/ M9 a# \: u, [
源码安装go的详细过程如下:  N& S) K9 }# }' w9 Y9 S( Q. c

7 @0 ~5 [! q% @$ V# m0 G1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。$ B: C7 j8 X) h

, |% @/ ]" L. y7 f3 N# r2).将其解压到/usr/local目录下:/ [7 c5 B; ]) s! {* A! q% S3 D
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  ) b( Y! Y* C2 A& s" b

$ _6 [0 x2 u- K注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
9 h; A8 }( ?& ^; g# C: q2 F+ J. ?3 J; _% V
3). 在root环境下执行如下命令:+ U( B; Y/ I5 |6 H/ |
mkdir $HOME/go    @; I. y& u6 p# d; P
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
. a) T+ ?1 u' m% b$ _+ N2 recho 'export GOPATH=$HOME/go'>> ~/.bashrc  7 T4 ^) C. i# A
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  , `3 P: Y7 g% W9 F+ n
source  $HOME/.bashrc  

0 ^2 V5 ^$ ~7 v& i# O$ _0 z: @  M) ~% _
4). 安装go get工具
6 d' d/ P5 `. ], y+ P- myum install mercurial git bzr subversion  
+ V& J! D$ d% N7 J/ u  ]+ P& C: j6 P1 O
2. 获取源码3 `+ u$ g. x7 ~: j; Z5 M
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
2 b. Z- S3 Q# R获取源码:% P0 o* j% H1 \$ X+ u0 S4 v
git clone https://github.com/inconshreveable/ngrok.git  ) w4 }# M. n  i9 v( A
& s9 L; M: ~2 b/ R0 u
3. 编译% Y5 J/ ?8 [) p- a5 X$ f0 \
& v2 r  P, L6 c
1). 配置环境变量: P% r5 w" r8 E2 |6 v# M/ [
# M/ D+ z; J) l; a
export NGROK_DOMAIN="tunnel.bbear.me"  
" ?6 G+ a8 I$ @# }# utunnel.bbear.me替换成你自己的域名。 " H. ^) u9 B7 i: e! X( \& E

& f" K. I' V4 b& O) h2). 生成自签名ssl证书
: i. J/ V; Y+ k/ c9 h3 a9 |
6 }+ H5 ^' p2 k0 p' F& vcd ngrok/ O' D  Y  A# D; X3 e3 ^, j0 n
openssl genrsa -out rootCA.key 2048" x' j: h; O: c& d
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem& ^: Q1 X4 n0 l; D1 m
openssl genrsa -out device.key 20481 l* D  n1 ^- X) v& \8 A6 Y
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
9 j, E0 n  X( q. m* U/ kopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
2 C( `* y/ H" Pcp rootCA.pem assets/client/tls/ngrokroot.crt
0 H5 ^# J1 Q; i' y. Q: H; Lcp device.crt assets/server/tls/snakeoil.crt
/ \7 P* B. S, c& [& Jcp device.key assets/server/tls/snakeoil.key  
, d" _/ Y9 I7 G' Q1 E! g
" [" c- [) t. z* Q" |
设置变量:& N9 H2 u9 Y: B0 `! U: s# R
2 X* C: y, ~( ]9 d/ K
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
! d# }$ o( D# T' l生成服务端与客户端' c2 r# C; w/ T, l* i9 [. m; @& u* z

, h  |) a: B" K1 A. Z* `9 K! f8 }make release-server release-client  
9 n1 ^& \, a5 ~& ?' Z1 S' t+ d* Z+ ?
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
4 J! s: u3 ]4 i% r# w
& F8 z, `& @) k$ o  [# N找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。' \/ E1 x  D* ~+ B6 p

  v: a6 x) }' X! `编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
1 d; X4 s" |5 u* B
' I; t) V4 Q* C- ~: V# R3 ~4. 交叉编译生成windows客户端
$ V% p7 v% ^) g, O1 o上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:2 g# X8 t% D# u; A7 n/ n

& {& j5 j- m. m进入go目录,进行环境配置- t" T, a+ Z# E5 A& g
cd  /usr/local/go/src/
$ G! D2 ~+ ?, j: f  P  z: w0 W7 p/ j" A8 \' e7 `1 \, |
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
0 `. l6 W4 A4 ?6 ]. F% ]进入ngrok目录重新编译. N8 ~9 c* o; b- t) E, k
cd  /usr/local/src/ngrok/& W- p/ D8 ?; U' W; V8 k2 s. Q

8 n: @2 j4 W+ I6 b- I! Y3 GGOOS=windows GOARCH=amd64 make release-server release-client    i. ~1 u7 T, _+ W
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。7 A# R9 S  e, m" K6 W( n
, p/ o2 z( J7 g
5. ngrokd服务启动与使用
! M2 y; p; M. t$ h% [2 L1、启动ngrokd服务端
4 H0 U: R1 o9 S: L4 l/ g  i
% \5 ~: L" q" r" a; z8 {9 o, Ebin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  8 m7 B4 g+ d4 \
注意,让程序一直在后台运行可以执行
+ F% Z3 p# a& w0 M! S
# k% U) i  x+ K! K1 v, s) }nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & , r# b6 o& B$ u
想要结束后台进程可以* `# }3 A6 B! L4 x
, L& ]0 N# J# ]2 z2 x8 C6 Z
ps -A   #找到PID  
- v$ l0 }8 w" Jkill xxxid  
" t2 n; g& d& L. N7 L2 \2、启动ngrok客户端4 a5 Y0 b' Y$ f% P' w+ _' N
3 I' a9 e; T7 Q7 K4 U8 m/ i9 O
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
$ c2 Q9 w9 C8 W, X  b5 W  E! V$ g
. r2 x$ ^* N8 \, ^" }0 x: G- sserver_addr: "tunnel.bbear.me:4443"  * o7 S5 {. w- T/ \; F7 T
trust_host_root_certs: false  
' h  ]0 ~3 r1 b% E# ^) f2 p
8 g1 q0 v- P. W" B/ V' ]
再在windows控制台执行
: W' p1 ]0 a- _: g8 N( \
( {% E$ W. d$ }" I8 Kngrok -config=ngrok.cfg -subdomain upal 8080  
- k9 F4 E$ O  M$ J
3 \; ?& N2 j8 I% T9 l3 Jupal是你自定义地址。0 T5 X3 _' t% \5 J1 i6 f
看到这样一个界面就说明成功了 1 i( _- h9 K  y+ A3 T- t5 p

. C1 f, W1 C9 Z* ^0 I/ O如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
6 C9 l- Z0 O/ u& g' P. v  X/ i  M5 V* C
, x( I3 D3 w0 V) ~$ ?0 J/ {

6 F6 z1 ?) ?* d原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral1 v3 Q1 O; x! y( o3 B

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-11-16 04:33 , Processed in 0.066739 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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