找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11866|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。6 i+ }+ R1 q, v9 f4 r0 @2 u4 O) C
. ~0 w# l& U; f  u8 s
1.go环境搭建3 j! T- M' O% @) w/ |
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。
2 o6 q, c7 E/ D' [7 h8 ^; E源码安装go的详细过程如下:9 E5 l- y) ?( P' w
7 \- K( ^% l& l$ ]; |; r* T) n
1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。" I7 c% T3 K. i6 ~: E7 d' r
8 Q2 P, i/ {) K6 h6 N# j
2).将其解压到/usr/local目录下:3 ?1 l" Y( f% n, |; E
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  ; ]1 T/ E: o: Q, l5 M3 |1 ?
# g$ Y  |7 F* K$ S2 J
注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。
1 _" o  S: E0 S' I0 a
; B# T9 `) r7 V9 i2 v3). 在root环境下执行如下命令:
7 n2 k8 m! I0 r$ hmkdir $HOME/go  
+ c8 O- B. i  S# Uecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  ( h/ }3 ?$ F* M; H2 _: w3 B7 q
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  $ B# Y  G* w6 d7 r2 R; I0 D5 N
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  & t; m' O0 F+ U
source  $HOME/.bashrc  

; z( D. P$ r. K; y: p8 {' U& _! [( s% X/ q# L5 K4 J
4). 安装go get工具
9 ^& Y( ^/ M4 w4 w  ?yum install mercurial git bzr subversion  9 b1 A+ O2 f0 l, N" _# ~
$ p6 e/ n. d+ Z' j+ B0 k- E4 @, {
2. 获取源码6 B( d+ r& _* h8 u6 A  w
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。
; O* b4 `4 g; ?' E% T7 f- i4 [获取源码:( A* d0 V8 O- p( C/ x4 `
git clone https://github.com/inconshreveable/ngrok.git    S3 ?9 m0 K! g- v7 A# o
9 |7 C6 h: y( {  J5 _  ~
3. 编译
+ Z7 i7 K; ~1 }* ]3 P' X& b" \* ^2 \# W5 ]  ^/ B
1). 配置环境变量
$ L4 Q' K2 A/ e% P* X
4 }' w0 x% x. C, m& V1 Xexport NGROK_DOMAIN="tunnel.bbear.me"  
0 o3 b3 C5 e* p8 d( Ytunnel.bbear.me替换成你自己的域名。 + _* l* `/ N6 R, T, v6 k  w

4 b7 ?3 I2 t( l, {* B) o2). 生成自签名ssl证书
: m+ H, y7 e" Y) n* [* ]  C; ?1 D; L1 I1 A
cd ngrok
/ \, p7 i" r( p% G& sopenssl genrsa -out rootCA.key 20484 Q, K" ~9 L" F# G# U- n4 n
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
: N- O: f' Y- s0 {3 F8 s0 b$ [' \openssl genrsa -out device.key 2048
3 t5 O' m  e/ F4 f& a7 copenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
9 b& b# t8 e+ W$ h1 _openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000! E0 d& B) Z* e* M# d0 [: v
cp rootCA.pem assets/client/tls/ngrokroot.crt
9 Z; T* ]4 |- \2 l, E- {/ |; Ycp device.crt assets/server/tls/snakeoil.crt% I4 X$ W" b% w. t3 P" [
cp device.key assets/server/tls/snakeoil.key  
) _' D7 I1 t4 ~8 B

% `5 I3 {4 _/ C5 j2 ^0 r/ k- Q设置变量:
' `) L$ E$ X' I4 h* C6 j( R
& ^/ M2 j1 J0 S" L: N- MGOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
( |" C. L  o/ b生成服务端与客户端+ D) H9 c: N( r& `2 j- ]
6 k% B# m9 G1 A1 e) @6 i
make release-server release-client  4 m3 r/ V$ u+ ^3 c; S! F

# M" g- H6 u5 `+ m3 f. A0 ~注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:
+ H4 Y* V4 K' x0 d) F- d9 T& Z+ o& J, W0 X2 ~4 I! }8 G, t. Y
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。
+ |3 B; L# c4 {7 }; {- I% v9 d$ a$ F
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。# V! P3 x5 {& M, a% g1 O6 e) P; _
' L0 M9 S+ `; h7 k# G3 j6 g$ w) k
4. 交叉编译生成windows客户端
* f3 U6 f1 k6 ~+ W上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:, I  `. ?+ M+ L# R
5 I7 y3 z# ?. f, V6 K4 z. g
进入go目录,进行环境配置
1 ]; j  q; C3 Dcd  /usr/local/go/src/
2 M6 y; j/ K$ S& s7 V2 A. v' e' T& b/ b3 x4 s& i
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
$ C; a/ u3 f: T  W8 R进入ngrok目录重新编译
6 Q- W# U. a4 m! `! O+ R/ bcd  /usr/local/src/ngrok/& r7 |& @- J0 U' d2 Q  x: L
9 s6 [) }2 F$ H( t* b! c" @
GOOS=windows GOARCH=amd64 make release-server release-client  
6 m; y$ c/ U2 B0 C, J& d7 D# j编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
- x. k, s/ ^# a& @: ^, V: L  Z4 S2 X5 A9 D. x* G% |5 @5 D
5. ngrokd服务启动与使用( W1 q5 y$ r+ {
1、启动ngrokd服务端3 i  Y/ h3 e0 w% N2 }# |) u

( R- w4 N4 g, @+ d6 i! dbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
, ]3 C: h9 z, I: r注意,让程序一直在后台运行可以执行, N1 U& E6 t0 G. T4 U) C: l6 V

7 e5 _  I) w' X6 cnohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
) Q3 ^. G* o9 B- A4 u8 J7 P1 l5 l想要结束后台进程可以0 P5 g! p4 \' R7 Z) R- G) Z" W9 G

$ P+ r# k% k; \. \$ e: L3 s( Z, Ups -A   #找到PID  1 H, u' F4 A- E- b1 B" n
kill xxxid  7 q9 }4 i' t  w! {( i5 s; u" x
2、启动ngrok客户端) k8 Z/ n7 f. f9 Z+ r2 U. f
# w; L5 M5 _" i6 H$ X. R
客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置: u, I4 n& q8 O+ a

" N. n( W/ q( _$ Kserver_addr: "tunnel.bbear.me:4443"  
6 s# R8 E' x# l. c* A3 vtrust_host_root_certs: false  
& g4 |" `# P- f- S

+ h3 m9 A3 s6 V# w再在windows控制台执行
3 A5 M5 z$ X: C3 \" Z9 Q( D( {: p) s4 k; E; J
ngrok -config=ngrok.cfg -subdomain upal 8080  3 m6 W0 y5 K+ T
' T# s. r$ ~7 {! w: T& ~
upal是你自定义地址。1 K3 x; W5 ^# S9 [" i
看到这样一个界面就说明成功了 , L! C8 z7 i# O$ U

5 e. y7 \% @  J. B) h( c+ u* ]如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 ) V2 v7 E7 ]1 t! `

  _) D' y% E- E4 W3 x- N. K" e5 q* f, m2 q0 z

8 I/ P! y" Z( z% \- ^& c原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral& g! m" F" @, F# r

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-4-4 18:42 , Processed in 0.076085 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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