找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12547|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。/ Y% d: G; i9 v# u! q1 `

/ b5 T/ ]$ c/ x3 y( n; D1.go环境搭建! g  P4 y; ~5 P$ j9 |# S+ {
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 8 H/ M, }6 t$ _; X7 |. [3 v$ I
源码安装go的详细过程如下:; Z4 h) |! ~' Y. G% \

* Y( S& V: ^/ U0 r3 B' {. c  [0 G2 O1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。, r" M/ r" t$ w8 J

7 ~( J/ e, }. }5 Q  P, j2).将其解压到/usr/local目录下:
5 C+ q) K- q# a2 W7 \8 t  V; K5 star -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  # c1 C0 d' R0 x( x$ ]  U+ D
8 K$ m3 t" v" G* k( B! a6 A
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。1 f4 C4 c* P, I( ?: E9 t

( y3 V5 b3 L& X* V) S' W% A3). 在root环境下执行如下命令:
# Y5 t- \( x* E% |$ v0 Omkdir $HOME/go  
+ p0 e3 s& c" mecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  / O% y# f' V% ?7 o
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
9 G, E" q/ G" {echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
; N* q% o6 [( r. C$ Q/ g" Psource  $HOME/.bashrc  

: W. ?1 \8 ]8 c2 G& r
1 ^5 Z: ?2 g& w; d  x4). 安装go get工具1 W+ M2 x: X) i( y+ o, U2 T) f0 t
yum install mercurial git bzr subversion  
( X0 [6 r8 M4 D% U# X4 `( T8 y9 b4 r
2. 获取源码
& D, D- u: ?: U1 D( X/ agit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 / j/ Q+ M. q; Q' b6 f6 X; b
获取源码:; m5 V& w& H( l; d+ p5 Q; B, S
git clone https://github.com/inconshreveable/ngrok.git  
- l# h4 ~( {- x% Y
& [4 W' T2 L: G3. 编译/ Z$ b% e0 M1 D/ ~# Q1 {7 a7 p

6 ~8 _9 Z( W: T: h1 b1). 配置环境变量7 j5 {0 D( a5 U" h4 i- l4 Y4 V) v

! Q1 B1 A- h2 W; ?. |export NGROK_DOMAIN="tunnel.bbear.me"  
% r* B% J1 g8 A9 w- s; e; l- htunnel.bbear.me替换成你自己的域名。 ( a7 f% D" n' Z& s) Z1 o. _

* J) }& P! w8 ]+ E+ Y2). 生成自签名ssl证书
1 C& F, V5 T2 ~. R; d
- D4 [3 h$ E- Q* S! J$ Kcd ngrok
6 u+ O- A8 Q( M2 ?, Z- v. M/ z5 oopenssl genrsa -out rootCA.key 2048# x* u; S% A% a5 E
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
; B! A+ P% r9 h8 R8 V; Y, |' Topenssl genrsa -out device.key 2048
+ ]+ h- }, F' p/ e. y/ G! Eopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr# M& v* E" x9 X
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
! u# G* V& K& o( n) I4 V9 U. ~cp rootCA.pem assets/client/tls/ngrokroot.crt
1 c& Q% ]2 B  _7 K9 Z) H; Ccp device.crt assets/server/tls/snakeoil.crt
( V% E0 b9 {  k2 U- o& vcp device.key assets/server/tls/snakeoil.key  
& l% \( [- p$ y- x0 u; K
2 h! E* L. I6 L% b* _9 f
设置变量:8 ~$ I$ z& s" \2 s& }& x
4 n6 M6 T2 G: @6 S( x7 D
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
1 G# g& c, d% B% C生成服务端与客户端
" M2 @; ~* ^) W6 }# h3 J7 d
- I/ K  u4 u6 g* Cmake release-server release-client  2 [0 J+ j: M: c. t" \6 y
$ Z7 H& ?( ?) f6 _
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:3 [) S% q+ P7 e  B

; K2 ?& _2 D1 i$ n$ L2 X4 x3 x找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
5 q0 _! h4 B! n! Y/ u% y. T# h% x8 B- ^$ L
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。. g4 Q. G/ j2 |8 w. E6 I! M* m
7 y) r) i% y% ^/ w2 w+ k6 C2 `% Q
4. 交叉编译生成windows客户端
' G. ^  c1 t' R5 p  g上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
9 c. P+ L* K5 `5 x2 ~% {5 F, {2 O2 h
进入go目录,进行环境配置
  ]* M0 m% c9 E* acd  /usr/local/go/src/
% N2 D% i! K8 y* ]; Z- X
7 K0 y4 W1 n1 U# P6 }GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  / `- z& m/ ~* I0 q" ]( M0 e
进入ngrok目录重新编译0 f. E4 v" q2 L/ C; C' p9 N+ l/ m
cd  /usr/local/src/ngrok/4 k' k% s. l2 r: }! {

7 r( k8 S9 ]6 }  v) IGOOS=windows GOARCH=amd64 make release-server release-client  9 h) w4 v+ O9 K+ M
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
& u  m3 I1 \3 h7 w8 I( P) C, q: z4 b  g$ f- V9 z1 p
5. ngrokd服务启动与使用! d- S5 k4 |8 @& ?0 J
1、启动ngrokd服务端4 j2 C4 l# ]) i; {
  M6 _" @3 O$ @  o5 {9 V
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
* w- v* i. w- S# x% F注意,让程序一直在后台运行可以执行
: s0 m, Q5 `' k. Q# U* Z) }3 m) b, I
nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & 8 D" a4 c8 O/ D# W: Y
想要结束后台进程可以% }" e/ z* Z# a

* R7 I+ b6 d( Sps -A   #找到PID  
' c5 I9 ]5 ]: Dkill xxxid  
! V' }( Q  G( M! Y3 e: C2、启动ngrok客户端
" z$ N" k( D: ?7 D) L& D" `/ X0 [  m. b- E7 y2 l; T+ K" B
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
$ `5 A4 d# |" j4 {
5 n3 t! H. c  Gserver_addr: "tunnel.bbear.me:4443"    `1 G  _2 Y2 B! J' \& c# @9 i
trust_host_root_certs: false  
: ~1 L+ F% W5 L7 }4 \$ {

* g- Z: w7 a: r' F; u3 L% D再在windows控制台执行2 y- n: x; R3 p; _7 n- n$ [
0 ]# V- Y2 b; g" Z* h1 ]
ngrok -config=ngrok.cfg -subdomain upal 8080  
# N; j* I3 D0 L" U, I& U! Z8 p1 B0 k! C7 C0 R- @# O; w5 [
upal是你自定义地址。
0 I  N8 h0 Z) E- r; Q* k7 V3 d/ z看到这样一个界面就说明成功了
( ]3 T  p# a7 _9 W- F
+ p, R' v1 x# ^) g4 s8 p; I如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 % a8 g7 k  t1 J- n5 j8 _
/ F5 g  r  f5 ^+ O3 @

! `  j8 |, ]% a6 }1 A8 T- w- I! a  Y$ s9 ]
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
7 i7 |0 g( h+ j7 w% R' r

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-16 09:40 , Processed in 0.079387 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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