找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9813|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。& S1 X7 Y, Z% x9 {4 D

. r. }$ j# p4 ?1 X5 C1.go环境搭建
0 e8 ?& S- x- W$ l( \go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 9 x0 }9 p+ Z  G6 C! T
源码安装go的详细过程如下:- j: v; s, X9 ?7 z6 q

7 K. c- k7 }5 v- M1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
( P! d, d, u- F# \( G% t9 R) p' O: K* M: _5 `6 j
2).将其解压到/usr/local目录下:
" h2 @  @$ E/ u1 X8 u  X7 Btar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
' X+ R* ]& F5 j" @6 a7 F' h  S- X9 o7 w: ~* {, I& W
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
8 e/ f3 G1 T' m& d9 |+ B' a
- j5 a& f3 r9 |& t3). 在root环境下执行如下命令:
/ }, f( a. t* ^7 W* A8 N  wmkdir $HOME/go  
4 E; @4 z0 j) Z$ r* U0 j  secho 'export GOROOT=/usr/local/go'>> ~/.bashrc  3 }$ D. S5 V( L, H( l- N
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  : f8 p) \+ x1 x/ O% K+ J. i
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
* n. q# `0 C6 F" _: Q- Y: Y9 i3 n: [# ksource  $HOME/.bashrc  

7 Y# F6 \, J: G9 k) Q
! |# N6 b. [: c4). 安装go get工具, @1 W, c5 l( M0 I  P* w% T. ^! y5 t, @
yum install mercurial git bzr subversion  & C$ [/ j: U& _  P9 U- @% a
; s/ ]7 Y" e0 I4 M$ D
2. 获取源码
1 k- |9 l! i' s- y" h2 Ygit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
. l1 H4 V6 V+ }$ ~# z0 A获取源码:% j% i# y& {  D5 s9 ]
git clone https://github.com/inconshreveable/ngrok.git  7 X4 S! d% ^- |2 e
/ }) p6 @. T5 d- m: v8 Z
3. 编译
7 R; y6 M) K! O& ?+ s+ J
, l8 `1 O+ Z" b" Y! y) B1). 配置环境变量
! }- D9 Y  R: Z  j" q* i! n9 [) ?3 j# q% R2 x. q: e  z
export NGROK_DOMAIN="tunnel.bbear.me"  
* i# x7 @: b  d  a8 v) gtunnel.bbear.me替换成你自己的域名。
: ?- K2 `4 H4 E6 x
- h2 @9 t# a, O0 D0 k7 j1 R0 n, S2). 生成自签名ssl证书- T5 P7 @9 V0 h6 H1 n+ K
7 u& K; d1 R% M% X0 r2 J! Q4 K
cd ngrok) z- e. Y, j6 V; ]
openssl genrsa -out rootCA.key 2048
. z3 x+ J# e: a1 Q, X% n% c' `openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
9 C+ O8 D  Q3 L( P/ c) t+ F. jopenssl genrsa -out device.key 2048
& k5 z" |/ M2 h3 q% u- x8 \; Gopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
& H3 e7 \: E/ p) ~6 N! n! _- I# ?! Ropenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 50005 J& k! L7 k( X4 x  Y
cp rootCA.pem assets/client/tls/ngrokroot.crt
" X5 z0 Y4 g* B0 `6 p, s1 hcp device.crt assets/server/tls/snakeoil.crt
* V( Z7 a* h+ K7 s1 Bcp device.key assets/server/tls/snakeoil.key  
# h$ {$ \. V. p; `) k  F  a# n
+ Z1 y5 z" A& ?/ g4 u3 e& k
设置变量:
+ q( K; u9 M5 M+ @0 F) A( P4 f8 M& P9 c, U" X' [4 q* h
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  6 d. y' R1 i. S1 A0 Q
生成服务端与客户端
/ P/ \! h3 w$ U
7 U" F( D! U( q! emake release-server release-client  
/ {, c% K6 Z# ~" t
( p. U7 S% G6 n% Y& u注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
. L* W# d$ ?4 n2 O5 j( T) E# ~" v9 B, \
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。( H  H# h2 p3 n& a

/ y1 G: f0 c" t' w  D6 ^2 z编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。! z& A0 Q/ e9 Z
. n" f  l9 g9 r+ y7 p, }
4. 交叉编译生成windows客户端8 z9 r, R; a! r% N5 i$ e2 Y
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:9 {2 W1 y: R8 T$ G# E* R9 W

. U. z, |0 q7 B+ W0 d+ t进入go目录,进行环境配置
. I$ j- _' Z! i1 Q. Mcd  /usr/local/go/src/
# L) \. Y2 W0 A+ z# O7 ?$ O1 t2 Z5 K/ W+ V" J, B9 V
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
6 E1 o2 T2 g- S0 v" X& B进入ngrok目录重新编译
% g+ B& }' d9 W% \2 Z1 Jcd  /usr/local/src/ngrok/
! m& M9 v5 ~2 A, A( s; N( S) C
0 p4 a2 t# p8 o& k. W2 hGOOS=windows GOARCH=amd64 make release-server release-client  
0 t+ C, L( w0 |; b编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
/ f9 E; p; n  s! }. U) n' z$ d$ P" D+ Q% ~$ ^
5. ngrokd服务启动与使用
+ Z! P7 I: G/ I! U' H( A1、启动ngrokd服务端
2 E/ z& g) Y3 C' B3 `+ d
4 ]; E$ Q8 k. ibin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
4 L6 K- D5 B% M2 s3 z# |4 W* V注意,让程序一直在后台运行可以执行; q9 i' u4 [, R3 n6 W5 X$ S9 h, @

: R1 x# d! W! s, anohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & ( N. u* e& w3 `( U6 \- L
想要结束后台进程可以8 t& [% ]" d2 F: z

, M8 i6 h$ k& g* g! G' Z8 ~ps -A   #找到PID    G4 ]/ h0 f+ {" k; i) `& G
kill xxxid  
, z# R, z$ I9 d: i2 L+ [8 m' M/ n+ k2、启动ngrok客户端. b" Q! E( p% c8 T6 a; }8 H

; n$ z+ E$ d4 k# b: W客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置- ^) W2 ^, T( q: Q- i
: ?. k; p1 e% g. q7 ]
server_addr: "tunnel.bbear.me:4443"  # K( \9 n$ \' X5 y: z: p
trust_host_root_certs: false  

& {+ ]5 ]1 \/ m2 f# H& K, _1 ~! ~, y( R- R; S# H: I% X2 b+ z
再在windows控制台执行* L8 n7 D0 \* S8 b& F5 L
, ]* f! T4 [" \$ ]* N. z
ngrok -config=ngrok.cfg -subdomain upal 8080  
: Z# a$ P! @. z5 O2 Y" |7 O# u. o8 ?2 D
- N9 [" b+ T8 `) v+ kupal是你自定义地址。
2 I3 ~) }" P+ X6 m看到这样一个界面就说明成功了 5 V' a, g8 @% ~0 M( Q$ _

% ?" A) v+ w- A) y% p4 L0 T# |如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 & S- |  e( x* X4 ^, ?

9 \5 }8 x8 h: W3 I! C. T
9 d# j8 r$ ^/ m5 Q. U) T0 @& l5 C8 N: X. e* F9 U/ s/ A$ N
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
/ k+ x- |% u( ]8 ~1 \) i* F" t

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-14 08:48 , Processed in 0.097584 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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