找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13048|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。+ P" ?8 V: y: W9 r1 d% Y
9 \7 N, ]( m& w% m- |4 [4 i
1.go环境搭建
+ R) k. ~) N: s! w9 b! b2 ugo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 - M& I9 q) ^6 h# ?/ f
源码安装go的详细过程如下:
- x$ j  E1 W& ]1 z/ \! d! O4 m; n0 {9 V- h, N
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。" P2 d2 o, N+ e2 V% a) t. Z" L! G
; Q: S2 q9 k; Q) d
2).将其解压到/usr/local目录下:
; T' V" |* ]. ^1 Wtar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
9 D7 G+ f8 L; j' q9 T# q
) z- D/ ]% |3 k9 }注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。) \1 f  F+ b3 g! m' ~
( N$ e2 w& X0 x# W
3). 在root环境下执行如下命令:- V& s- A; a8 _: |
mkdir $HOME/go  : t( l: j8 k1 ]* G: H
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  & W3 U0 ?) ^2 {$ G
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  1 M. d" Q* t4 C+ W
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
! `! T& h0 b# x6 l' lsource  $HOME/.bashrc  
( @6 a, m2 Z- x' Z+ H

) I; |( b( A! k( n. w$ z4). 安装go get工具) H" b: m& t4 ~
yum install mercurial git bzr subversion  7 ~& K  X+ O3 V7 R% V

- X  Q6 h* n7 e& k! u# c& t& N5 Y! ~2. 获取源码
: @! |; r  J& V  Y+ ]git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
& `4 n6 T# @! |8 i2 w. Y获取源码:* W; p3 s/ w$ `9 Z
git clone https://github.com/inconshreveable/ngrok.git  
6 k1 B0 ]0 V2 m4 t! j" R( h
9 X! s6 t7 l0 R3. 编译
/ a2 U& Y; R8 g: a
; c# a/ |% U2 ?# I1). 配置环境变量
0 l! G) Z/ x2 I  [3 e4 r
: B" ]8 Z3 f) @' O0 q) _3 kexport NGROK_DOMAIN="tunnel.bbear.me"  , O; R! W! O) q7 g0 U
tunnel.bbear.me替换成你自己的域名。 ' b5 M! l* K3 e9 l! A; X

' g4 u; g7 w5 V& f( e2 W; K2). 生成自签名ssl证书
5 m/ i. ]; e  a. H" x' x$ ~2 s
0 ]( V2 ~5 T6 T$ m9 zcd ngrok
  {6 ^1 f4 d( D" Zopenssl genrsa -out rootCA.key 2048
0 ]9 ]( G5 d* R! L* H2 j9 popenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem3 w/ `3 b% \# |( P* R4 Y
openssl genrsa -out device.key 2048
8 ^" d7 }" a1 s. v1 ropenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
3 U( f" X# j! m7 Q4 P- Vopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50006 Z! `8 _9 \# t, f" Y; G
cp rootCA.pem assets/client/tls/ngrokroot.crt
3 f2 m$ K$ B5 [9 a' Q: z) Hcp device.crt assets/server/tls/snakeoil.crt
& t" o$ d3 R: p8 Q# f- }cp device.key assets/server/tls/snakeoil.key  
$ o3 B/ J5 J1 Q. W% V9 W" K0 Q

0 {3 X; Z% s& R" P7 |设置变量:
; ^) r" _: i" @+ n5 @% x0 ?" E) ^$ |3 S/ O6 P
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  * T! E; |- i+ e! w
生成服务端与客户端
- Z% m2 v' O7 Z1 b6 S7 u% w
2 Q& X2 A, U6 P8 u9 \make release-server release-client  
3 y% e3 H) D- ?* F2 X. i; V/ \2 c' }2 K' a6 ^( x2 K: n
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
6 y; L# p8 J2 m
' r% T) l$ E, I2 ?# d找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。5 N" L4 S  X, l% n6 y1 d; b
! m! X; P5 Y9 e( J7 X% a0 {& r
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
, M# s7 G) a) _, T# N
* k8 O9 @! R- E# n/ W4. 交叉编译生成windows客户端
+ z( s4 x. Z7 }+ o" N上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:+ x& Y" k# }7 T) {" H" Z9 n0 N! \
& b! T7 D0 F& b& ?8 a7 C
进入go目录,进行环境配置
* Y2 c" A/ ^/ N) U, V7 ]% Wcd  /usr/local/go/src/1 h+ a/ H: m2 \) ^- y2 s
% b4 ?! O  m  L3 p  ]
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
& C2 q8 Z$ N, ]" h' O进入ngrok目录重新编译+ d) H0 Z; N1 l" u# Z1 I# E
cd  /usr/local/src/ngrok/
# H4 ?: N" U0 A, O( M8 D5 l2 {- H) j0 Q* a  t) x8 c
GOOS=windows GOARCH=amd64 make release-server release-client  1 G5 N( t, _  f) E7 V- q7 \- k
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。8 e+ N# P+ O/ V
& r: Z: g- U% U5 g- s, k# \5 S) t- m
5. ngrokd服务启动与使用
' ^" m3 Z$ [# l! N) |0 d- T/ l1、启动ngrokd服务端
1 M5 [# P4 M# |& D& E) @! ?3 \' A9 k( ?- D
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  : F+ ]- ^: S1 y4 p
注意,让程序一直在后台运行可以执行: D/ I" ]: \: L$ @: _

  Y; {/ ?, b, ?& |- Y  }5 xnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
7 G) e9 t, Q) I" `- u9 l0 e& r5 w/ j想要结束后台进程可以
7 s6 E+ h+ O3 D# R  {1 {8 p4 H6 b3 L; y
ps -A   #找到PID  
1 }1 _: _9 G. @8 r1 a  R: zkill xxxid  
. j7 w0 ]+ W$ t( {6 T2 W2、启动ngrok客户端4 L- h3 l' W5 u8 `% l# Z

- V& y1 W5 J% a6 ~& J客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置4 y: ?& ~: G$ y3 C) \3 w
+ ~8 }2 ?5 s) C( t1 }
server_addr: "tunnel.bbear.me:4443"  . M! c2 M: R! @- f
trust_host_root_certs: false  

0 K4 \6 d' L2 J: a) H3 |5 O$ L' U6 e6 p2 P' u& i% v& C
再在windows控制台执行/ W; ?: N* l( \# F7 u: x% x
$ @% D( Z) n* @+ T& w6 e
ngrok -config=ngrok.cfg -subdomain upal 8080  & B/ \2 q+ G6 ]7 \9 b2 n$ A

9 j  Y1 U& K9 |8 s3 {- `upal是你自定义地址。5 U" o/ i) i, K. S3 G- W
看到这样一个界面就说明成功了 $ n' Q2 _6 @$ f" l( a

+ i# j  _4 c8 `如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 0 v" q  F/ B4 s: h% k

- ]# B9 T( c. q  O0 T% ?
% O& C! i: T# J# z; T' M
4 U( e8 K, L# I- X! @原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
% z! @$ e4 o& H% m' `3 z0 y+ `: {

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-8-6 01:33 , Processed in 0.070835 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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