找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13790|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。! z3 r8 Y* p: p0 i# _. I
! W! i3 k7 l# s2 j, }! w" f
1.go环境搭建
+ m* R" a* D% E/ \( `& s6 Mgo环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
5 x) x4 n2 t7 i" H4 j# Z! L源码安装go的详细过程如下:
; }* B; O: Z+ g  X0 C- C8 s6 L" n, F0 O+ ^
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
, x% X' F7 y6 t0 C( |: N
) l+ w) c) B* R& _" i2).将其解压到/usr/local目录下:
$ Q1 K2 h( Q( k- [; ]: m0 ?( Mtar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  - e) F1 q  c, R# H2 |6 f" L. E

: R& C5 j& k* G! k注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
( a1 p5 ]. X4 C7 n9 E2 ?' U
4 q0 B; M: E  |) _! y; ~& A3). 在root环境下执行如下命令:
/ {0 q9 R5 r: i' W& \( D" tmkdir $HOME/go  
) H1 {+ |" s$ @9 J1 U5 R1 Recho 'export GOROOT=/usr/local/go'>> ~/.bashrc  
9 I2 J6 O1 s: f! g; M: J0 Jecho 'export GOPATH=$HOME/go'>> ~/.bashrc  
8 C  C, B' K2 ^  q4 Becho 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
8 m. S, P+ V) h- p" w3 `. Csource  $HOME/.bashrc  
; Z; `9 p+ M6 K& P: u9 @& ^
' [- i+ f4 h0 G. R+ ^3 V& E
4). 安装go get工具" P  B7 d6 t$ t$ ^- E
yum install mercurial git bzr subversion  
+ H4 E8 b* G9 m  i: J/ H/ Z3 ~
4 R! [3 Z& i! B! C- O3 K3 ^9 l2. 获取源码" @- P! d, t/ U5 G. g
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
7 a7 o5 r& H* W, n& ?获取源码:
, R) \: N4 V$ Q6 G2 X# z+ }7 {git clone https://github.com/inconshreveable/ngrok.git  # ^! O, o7 W/ Z! q7 J( J
" \* N% t- m6 P4 Q
3. 编译
8 `1 f+ P; f' M, D( i3 c6 ?
3 `) g/ {" o+ t% Y, m5 e1). 配置环境变量3 [" o% ]" |0 b; @, Y" A. B

2 D  F0 f1 H4 L) Gexport NGROK_DOMAIN="tunnel.bbear.me"  3 N2 [6 ^  o) D) k7 s. c3 J/ ?
tunnel.bbear.me替换成你自己的域名。 / ^; u' |0 B% S' C

! I+ f) R. O' T2). 生成自签名ssl证书
. i% \& P, {8 k0 \
: x- P  O3 h! N1 Jcd ngrok9 W$ I" I  K" v) d% h" d% U: \" A
openssl genrsa -out rootCA.key 2048
8 M# A  I. U& S' q# oopenssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
$ w' O/ F7 A% C* C5 ~openssl genrsa -out device.key 2048( \6 l' e% k( ?
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr& r5 a) Y" L1 A7 w4 {
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
3 G$ x2 H4 F# H: dcp rootCA.pem assets/client/tls/ngrokroot.crt
) N* ]* c' j; c6 q2 d6 Ycp device.crt assets/server/tls/snakeoil.crt' A6 ?7 F' b0 y. v& }2 d) t
cp device.key assets/server/tls/snakeoil.key  

" d' C$ n" y$ t7 u3 p' U$ B
( m: s) P! j8 K; T/ p5 b9 Q设置变量:
( B5 J: ^! B' A* e6 w' \/ g2 R- R$ e
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  % ?' h' e  c# f
生成服务端与客户端
; T; m6 o# g  o, s" h. J; i( a5 q" l; l8 a9 K/ p
make release-server release-client  1 v4 H- g3 `" ^: E$ _0 O, y

, `2 R* K2 {" ?7 Q" E8 m# d  ]注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:( D  S' {4 L, ]" b, }0 f
3 @% l* f0 i8 M- _
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
4 ]" P! E. _9 [  S: L0 Z# p
8 R, b8 c3 M  U" D' n; _编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。8 _/ D$ N: I+ u1 u( l. m

" ^1 d- g* ]2 V4. 交叉编译生成windows客户端
1 ?0 ~* Q6 O" {+ H上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:
' j7 A% X, A7 v# E; D+ T
5 i( g! V" ~$ E/ s, b3 h" e进入go目录,进行环境配置7 D$ I  Y, M) Y
cd  /usr/local/go/src/
" T( Q" [6 v- g
& c* M+ q' M7 j; U# u& KGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  8 _: K7 ?4 ]9 I1 C$ w; E" W
进入ngrok目录重新编译* a% @5 g/ X0 f5 ~4 b
cd  /usr/local/src/ngrok/
4 N* k) ^5 ^0 n5 {( E" @
7 B! A+ C. F) E& R8 P9 B0 \3 _, IGOOS=windows GOARCH=amd64 make release-server release-client  
+ \" a3 y! {9 Z1 |0 w! S% S编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
/ D& Y- q+ m3 S+ |) y  x1 E3 g- G. T( {) I& P# G' i
5. ngrokd服务启动与使用
% z' Q1 G  n9 ^  g7 I+ q* F3 d7 H1、启动ngrokd服务端
7 l3 x2 P# l: x8 B* S  q: r/ [7 {! J& @
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  8 c. N; _! A( }$ A2 S* j- u* O+ ~
注意,让程序一直在后台运行可以执行5 p. ?) ~& r1 T% \' f. G# t$ {& b

/ D2 r% o4 d$ V) h7 F& m2 Enohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & - c" @/ H0 E5 o" P3 U) q- s% L
想要结束后台进程可以
6 u  T) p1 K% y. @, f% z3 x6 {6 W6 X. l" {8 V* A; [  g
ps -A   #找到PID  
: Z  a8 M9 ^% x6 d: K* Ckill xxxid  
7 }* P% {7 T/ T. \2、启动ngrok客户端/ e% M, O9 ]  [: ~1 {
. @. I8 |9 S9 v
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
5 ~+ m8 e, S( r9 n5 A, C; I" n
, m" Y6 [% v8 j8 Y$ W9 c$ Rserver_addr: "tunnel.bbear.me:4443"  5 i- C7 T$ [: C* K
trust_host_root_certs: false  
0 L/ P$ p7 N! X' D* S+ p
/ l; ?, {! y  g4 V* U: Z* c
再在windows控制台执行3 D$ @: o! ]1 K! J
$ N2 z$ D6 F+ Y
ngrok -config=ngrok.cfg -subdomain upal 8080  
: {3 }2 w" [! L- c3 R
2 U! }# Q5 i. ?5 Fupal是你自定义地址。
! l% p9 }0 w2 _+ G8 Y6 w看到这样一个界面就说明成功了 ( D! g( I! n5 e  e6 @

3 o# K: t- h7 N0 o如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同
9 U& c$ `/ K6 B$ A( l1 I" o4 R8 v" N1 f6 e# A- y+ P

: N" J+ A, x7 g! g! W
- Q2 D; V4 s- Q原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral
, ]! Z" M* w& P

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-24 16:55 , Processed in 0.044258 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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