找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12655|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。" u: F. j5 Q1 u( `
  @2 S5 k' o! U3 x' j) D
1.go环境搭建
$ M  Y  e# S" d4 ggo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
" ~. d7 X1 O$ V/ o2 @5 Y源码安装go的详细过程如下:
8 I% }7 U2 M0 x) h: G, C( o% f, h( l8 b0 A+ O* a* x$ u
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
7 \8 L/ Y' b9 z: f" g# K
" O* k: w1 X' b* }% q; `2).将其解压到/usr/local目录下:5 X9 l/ [6 S- }  H9 g
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
# ^3 z* _  b8 x6 r7 \: m1 S
8 A9 M  ?+ M  m- a# f4 E注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。- ~5 b/ @, O+ r' `6 `; U/ E
; C+ s5 `: q5 C7 u3 n% x' M9 `3 V/ `* C
3). 在root环境下执行如下命令:
. D5 |% m5 M+ E( U9 [1 ^: j- f: Bmkdir $HOME/go  ! h6 R( L+ V/ |! `6 Z" w& n( g
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
9 p7 G: z1 c7 F+ recho 'export GOPATH=$HOME/go'>> ~/.bashrc  
, S9 l$ a! q" k& k4 h! Q4 Jecho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  & g" `7 q" Z  ^0 b) z) c7 j% _
source  $HOME/.bashrc  

3 m( A3 c$ q- F4 l$ K) ^- p) u0 d2 T7 j6 q
4). 安装go get工具
8 d5 c3 q6 W! ?/ A, \# Nyum install mercurial git bzr subversion  8 ?/ s, X4 C$ a% V" h- p
+ K" T" ^' N8 A) {% l* T
2. 获取源码
0 A) z- O2 y" Bgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 & h7 h& R5 |6 U2 v  j) g2 c" K
获取源码:
+ g% X1 @) C' h* t: _* ngit clone https://github.com/inconshreveable/ngrok.git  5 f8 S  w# W  W, v3 r

# v; K8 v8 e3 `: |3. 编译
+ n% c' H% m) P0 Q6 a/ y
  i6 h8 V* e* m& {6 W; q1). 配置环境变量2 j/ N- s8 T$ H) {, C

. ?9 h6 P" y  J( Y! Q6 \export NGROK_DOMAIN="tunnel.bbear.me"  9 u: j: ~8 K3 X9 }3 o1 m1 u
tunnel.bbear.me替换成你自己的域名。 3 R4 J) E8 [5 i' z  Z2 `. G

) n5 n2 q1 P. v0 z2). 生成自签名ssl证书  D( |; v7 a: B" g
' `* g& n! J& a/ B# f, v; ]
cd ngrok
; y9 ?# X8 G" p: V7 C0 f7 \" Z% topenssl genrsa -out rootCA.key 2048
! |+ ]$ Q1 m3 ~* eopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem" w7 x9 E" k& C6 B% C
openssl genrsa -out device.key 2048
% b0 [2 [2 W4 v) vopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr2 p4 R0 u2 k1 W8 O# I$ J* D" o& q
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
+ u4 ~4 f4 f  x# G; D3 @cp rootCA.pem assets/client/tls/ngrokroot.crt
4 f3 @+ ?, R: ?1 g) Y% k( q2 ]cp device.crt assets/server/tls/snakeoil.crt
9 w1 H0 y6 H( d, Dcp device.key assets/server/tls/snakeoil.key  

: S+ u- V9 x& j1 s, E: M* c& M$ Q4 V. |" L6 K+ `
设置变量:
) c5 h9 Y* O& h! I$ I, g
* Z0 V: N! B+ @( x% LGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
% h" F0 b2 ]; }7 ^& K1 p生成服务端与客户端
# @/ ]& B9 L/ r& v) q
9 K/ f6 [' ^) ?0 Vmake release-server release-client  9 W: Z8 B( v- G7 L
; u+ p) |+ B5 C: e& C6 t3 r
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:  `) d" ^2 L3 m( h

. V* b% F7 m( _% i( }找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。% ?9 g% \7 B2 o- X# v
0 c# E: w5 k/ p. T5 A
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。1 T, a8 ~7 W0 \+ P
: @  ~+ k% a$ x/ j# ^
4. 交叉编译生成windows客户端; w, |0 W# P" [0 M5 V
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:0 w' R2 {/ _: m( |/ J+ m5 t5 X. _
+ s1 U7 V2 I9 m
进入go目录,进行环境配置
: P4 N7 O: H  r! @  H  d$ Acd  /usr/local/go/src/" c/ }$ l  d, V& j

( k3 Z) u3 `  K  ]/ GGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  . K. ?& `0 Y3 l- ~$ w8 b, G: y
进入ngrok目录重新编译+ `: |1 H0 l6 Y
cd  /usr/local/src/ngrok/
1 d- W! {6 {$ z7 H: l
2 S) l5 }& p% CGOOS=windows GOARCH=amd64 make release-server release-client  # Z' _" y# G; F8 {% C6 m9 D1 Q
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
; k, j9 U  x5 ~. `0 ]* O% O/ _" c! {" I$ e: Y! |
5. ngrokd服务启动与使用  K8 g7 P: q4 k4 Z. Q
1、启动ngrokd服务端! C" P- Q/ ^$ C& o% Z3 \
+ |  u  [  d+ v0 o8 Y# m. i( {/ W5 @" C
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
9 N& D: H( N  c6 }8 i注意,让程序一直在后台运行可以执行
' @9 r/ Z1 _: I) u! r: t
+ w& }! v' p9 O: O! pnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 6 D  x; ~$ r6 F8 r- ~0 u8 l1 x
想要结束后台进程可以
7 ?. B8 `' ^7 y! s0 f
$ m$ P0 L" t% B; I, Eps -A   #找到PID  
- Y# n$ ?/ Z+ t' S8 [' r3 s1 j1 Lkill xxxid  ; {3 }/ _, C& P$ L" |! q  X
2、启动ngrok客户端
4 K" K: U7 k2 d# Q  [7 z6 M: @3 |+ i+ h' A" V7 V2 ?& L, \& J" e4 H
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
- v3 X% @) ]( X2 g
. N/ `* q5 C: O) m/ Wserver_addr: "tunnel.bbear.me:4443"  7 ]% t8 a% J$ q! g9 @% Q4 ]# y
trust_host_root_certs: false  
- E. f% z6 |0 t) D
7 Z" J7 |: U% t6 _6 Z
再在windows控制台执行7 D8 i5 j, X3 D7 m3 b
0 d. ^# B+ c  Y; P* r1 f
ngrok -config=ngrok.cfg -subdomain upal 8080  & K4 X& }! ]; _( O. n: G
: t5 V: b) _9 {% K* t1 H- T: g% H
upal是你自定义地址。
8 D0 _' I2 B& O1 o+ c看到这样一个界面就说明成功了
4 k: L- z9 @/ z$ N8 s6 q# R8 ?; f4 X0 L/ p- j; H9 y7 Z8 C: h
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 1 k/ O; J- D  ~. V, _" T; ?0 _

  ]+ h. I/ I! A1 ]# G* d" h- z9 S7 m7 d' y: Y

- e+ k$ R0 R; z$ ]原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral, J, M7 H0 |  N3 t) G3 k

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-25 11:25 , Processed in 0.069776 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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