找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11737|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。8 i# o6 v7 F1 g* v

+ \% Y' W/ I. y) L* d  E/ @3 k1.go环境搭建
  @9 u2 i8 {7 r5 ^go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
$ u. U# _4 l) L" f) P2 K% C源码安装go的详细过程如下:" O* f3 ^6 _5 _& c2 {# `" E9 m6 ?
2 j$ v: k; f) [" ]" ]3 O7 `8 w
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
' [  v) s1 @  H) @$ a0 x0 C, L) U/ x- a5 Q1 T
2).将其解压到/usr/local目录下:0 u; Y4 n& [) s/ A7 I& \
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  - g! m( i0 D5 c& J; `* h. N* C  S  _

3 j7 a2 h' L& S, i. n注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。* D$ a0 h8 R. `* _2 y" o
+ Q' Q  P5 u7 Y* L/ l8 A
3). 在root环境下执行如下命令:
& _% i) c6 J1 i2 |- F( Jmkdir $HOME/go  
8 q5 t: Y' B3 x: Q! Qecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  ! V3 V! Q& H* W0 G& a2 a, u" f- p
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  & _9 x* ^2 a. p6 @+ h; `/ _, U
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  4 Q4 P2 |% l# \" a
source  $HOME/.bashrc  
# Y! H2 X+ W7 }, G; F. s
# k6 h. Y: ?: ^9 H# s
4). 安装go get工具9 b/ R. S& l! k- x
yum install mercurial git bzr subversion  / n7 N( y! s+ _8 @  y: h4 g
1 |$ \! K; y4 c1 i. E) K' f
2. 获取源码
" Y% z7 @' v* F4 j2 mgit版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
* M8 I3 I( \! A- W4 X3 j  D获取源码:
. A' V6 s+ p3 S' j9 D1 qgit clone https://github.com/inconshreveable/ngrok.git  ! K2 c/ c6 T% Z0 A1 _# u. ^- Y6 q, d

1 a, j" ?$ `8 L+ }) A: [% k1 S- F7 G* R3. 编译
: |6 _8 C9 w' w' ?# T" i) L. J
" c" k; i2 w6 r0 B1). 配置环境变量6 \, ?% z5 [9 O$ b2 u/ r' i3 b; |
6 g5 Y) @0 J0 c, M
export NGROK_DOMAIN="tunnel.bbear.me"  ! ^. ~) ]# `. A  J- w6 w5 A
tunnel.bbear.me替换成你自己的域名。
# [3 [( y& X, l* q1 E3 l
9 i7 v+ u, D* Q! _! m7 ?6 K2). 生成自签名ssl证书1 b5 s6 o$ g+ w! s1 V/ \
9 @3 L8 U. f  U; d7 c  J" ^
cd ngrok
4 G2 l: ]9 C, |. Z. \% copenssl genrsa -out rootCA.key 2048
7 J* R- J3 u3 C% F) H/ \openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem% t' q/ G, h0 p2 W$ J  _0 Q* V
openssl genrsa -out device.key 2048
1 Q; C" L2 ]% l  T: Bopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr( q1 e0 ^! m& o2 o
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000! [( P7 V& W1 `% [# Z
cp rootCA.pem assets/client/tls/ngrokroot.crt
0 M- Z. t. a& H# ycp device.crt assets/server/tls/snakeoil.crt
- k* C* i$ {" o2 K, `6 Ucp device.key assets/server/tls/snakeoil.key  
4 y& B. R% g/ k+ B4 W. t

4 V0 _! {$ E) n- H4 \设置变量:
9 R/ o  K5 m+ P* ]6 u1 c3 C
) V* ?1 `2 a" O" `6 ZGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  % ~6 p( C* l# ^- |; O% \5 e  [& `8 Q6 e
生成服务端与客户端
( B+ c9 }. w& I! _$ {+ e/ o3 Q& m, b4 ], X# `0 |
make release-server release-client  
0 P8 v( L; N( _; `& m" t, I, K- V  ]& T* H5 W& R2 B# J/ [
注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
# G; [2 B0 U  Z# ]! y: Q
2 n9 R; r% C9 ^( m% {7 C$ ]找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。  H- ~; v* Y1 ^- N# K  z/ o5 D- \

- W! \/ v/ w* O4 l6 z, Z% c+ S2 [编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
0 G: l) a7 Y" E' L
& @) r" e- t( r- O# |4. 交叉编译生成windows客户端# V+ l9 K' c1 G+ S
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:' |0 x8 k- A) M
( z9 y2 P. o- N  u" N- }
进入go目录,进行环境配置2 J* |& B3 ^3 @7 k  _+ [3 h
cd  /usr/local/go/src/  A& e. `! D! X7 q5 R( w

( V+ F. a, z  v7 G5 q& rGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
, u7 e2 E  E" @# \4 u/ s" Z进入ngrok目录重新编译8 y3 S! F# u( @+ ?- @0 ^3 v4 }$ V0 W, i
cd  /usr/local/src/ngrok/
- b9 ^2 l8 M- B6 s1 i+ w1 ~1 R, L9 ]" w
GOOS=windows GOARCH=amd64 make release-server release-client  
3 o2 G6 t7 ^8 z编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。( q% T& }/ V, ~: \

" s: `" K6 q8 r6 ?) m5. ngrokd服务启动与使用, w1 N# X5 @6 T# Z. F
1、启动ngrokd服务端
, L& U/ w  ^+ R% K8 d3 v% f; G) O; L! u9 ~3 F& C
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  " e) |0 J% w8 p7 h% {
注意,让程序一直在后台运行可以执行
0 e# Y9 f: z! Z. E; v; q- l5 h6 x1 Q
& A) v" L% r5 `% _9 |" }nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & - H" v' o! y6 F
想要结束后台进程可以
9 p% [1 A' G( w& H
0 h5 @  Y" _3 Fps -A   #找到PID  
! R. ]: ^' ?8 a3 f5 Wkill xxxid  
+ E3 O+ G# G: b( M- P: I0 f$ |1 C2、启动ngrok客户端; L. I! O5 a6 e9 S6 \9 f
7 \9 B/ N+ b6 V. U6 `. H
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置# {2 ?0 y6 z  s

& b# o6 E6 U5 b, ]1 Yserver_addr: "tunnel.bbear.me:4443"  
/ [3 j! N1 s! P% D$ u9 }9 Itrust_host_root_certs: false  

6 }# Z# q2 m" m" ^, x) F
; n( G/ k: x4 k6 S8 v: q再在windows控制台执行; T5 T7 ^4 |* f: R& W2 K

& e- b( N# b- s1 _8 t+ r) \, Lngrok -config=ngrok.cfg -subdomain upal 8080  
8 W. y: E: j6 j! x* v1 K* l) b' U$ R& s
upal是你自定义地址。
/ x0 B8 t+ r2 V) S8 `  A看到这样一个界面就说明成功了 3 s3 M6 p& |4 t, d1 {2 y. n
; Z# o( v5 k' S5 h* p$ V/ t$ W+ g
如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
7 l& I" y9 R' {7 N
6 @' c+ W' ?3 f/ W$ u( A, i
- `! e; @6 i* d1 s2 n3 j4 S% i9 N' u/ M( k; w+ F. s9 X
原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
/ E0 |! h: w6 d& e3 _

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-26 04:43 , Processed in 0.070413 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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