找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11478|回复: 0

搭建自己的ngrok服务

[复制链接]
发表于 2017-4-5 09:54:34 | 显示全部楼层 |阅读模式
下面是我在阿里云centOS7上面的搭建过程。
$ v+ q7 y1 i4 _1 n. c3 \( ]/ F' Z
/ _# F% s& ~" N5 D6 G: c1.go环境搭建! }5 l9 b8 X* f" v
go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 & M7 x1 K) e4 [
源码安装go的详细过程如下:
- _7 `! o2 X6 U7 Z* e; s) H- L/ V
5 X% H$ g2 d3 s. e6 X$ y0 B( {1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.4.2.linux-amd64.tar.gz。
9 L3 j: H8 F$ O$ m- n, M3 a  w8 ]6 [: U; G; C4 c
2).将其解压到/usr/local目录下:  H  v5 \( e: E* X' i
tar -C /usr/local  -xzf   go1.4.2.linux-amd64.tar.gz  
7 t/ g" Z8 w6 r/ T- P8 u, ?1 ~
. k2 v5 D. O. b  y* y; G注:如果是64位的系统下载了32位的安装包,后面的构建会出现 /lib/ld-linux.so.2: bad ELF interpreter 类似这样的错误 解决方法:yum install glibc.i686。安装一个32bit的glibc就可以了。& p7 ]3 x3 p" d/ D0 ~
% N: h6 |4 r' \& }
3). 在root环境下执行如下命令:) Y. i% j' f  O
mkdir $HOME/go  
1 |1 u  P8 N- F9 A- Z& g8 _0 oecho 'export GOROOT=/usr/local/go'>> ~/.bashrc  % Z1 a, X+ v# T* f+ f/ b$ |/ A" J
echo 'export GOPATH=$HOME/go'>> ~/.bashrc  ' P( O( d) M2 V3 a% b, L/ I' W7 Q1 v
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
! g% Q7 O( b1 j& J7 H' xsource  $HOME/.bashrc  

6 j) A- q, E; X+ A) \6 o0 s" H# B6 R
4). 安装go get工具
0 h4 A1 K  ]4 X, R# Nyum install mercurial git bzr subversion  2 k2 U& T5 }, m+ g6 K

+ c: R$ K$ r# D6 l' s0 t$ C, }2. 获取源码4 F: g; t0 N" E& ^
git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 5 q1 y( J5 l( \* G- p
获取源码:+ S! E8 n1 L! X# |
git clone https://github.com/inconshreveable/ngrok.git  
* L9 Q6 V8 U! ?& i. n3 f6 e
( S* x5 X, R: {, r3. 编译8 z- n: ~* ^# ]

8 p' v$ I7 [5 e4 W+ h+ E) L1). 配置环境变量. f5 h3 t( e: t1 P) F/ s2 J% E+ [
1 C0 o) m* e2 \8 O% ^) o
export NGROK_DOMAIN="tunnel.bbear.me"  
6 @% v2 C  C- I/ m# N2 Wtunnel.bbear.me替换成你自己的域名。
( u# K/ @! T3 ~$ N5 M! Q5 I7 s+ n* {5 X9 \! s* ~0 r6 f
2). 生成自签名ssl证书
' g  \+ A. H: U5 W7 N
; x* g- {. H: i# ?0 n: Kcd ngrok
, b  ?2 ~3 ?5 p# copenssl genrsa -out rootCA.key 2048& `2 h% Z5 U/ H) J- A1 d
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
8 Q! S6 n  A  W/ o# [* Iopenssl genrsa -out device.key 2048
. a  K1 A6 [; D- ?( jopenssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
, ?' J0 s8 {( B- n! nopenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
+ n+ d3 F9 T8 {cp rootCA.pem assets/client/tls/ngrokroot.crt
, z  k: j8 ^  a* l8 Ucp device.crt assets/server/tls/snakeoil.crt
$ R" ~1 i1 @5 A+ a. t1 j8 ]cp device.key assets/server/tls/snakeoil.key  
; o9 B) }3 L- p! ?

: b' X  J0 a2 b/ _$ L设置变量:* X) v/ r" A: v+ ?  T# X8 ?
& ?) |- N- q- q. [7 V9 }4 ]2 L
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386  
/ J9 d8 T! q, x  @' @: {2 U# e生成服务端与客户端5 R# o: ~+ h6 w: s# t( _! r, a

5 X! c* ~! `$ Z& y/ i+ P( ^make release-server release-client  0 a0 P" b+ f1 M; g6 F

! s7 z& c# q8 ^, T* C注:上述编译的过程会需要去github、google code下载其余依赖项目的源码,因此需要挂VPN。当然,如果VPS不能挂vpn可以在本地进行上面介绍的操作过程,然后将编译后的源码复制到vps上重新编译即可。 还有一种最简单的解决办法就是,修改源码,将需要连接google code的地址改为连接github上的地址:, E3 i) \$ `# |# X
9 @* s" \, D, p2 p3 s3 o
找到 /root/ngrok/src/ngrok/log/logger.go ,看到里面有一个import中引用了google code,将其改为:"github.com/keepeye/log4go" 。6 t" ]9 G# D" ]4 U
7 y; z1 x5 K3 ^& M9 a# r
编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。
5 {  e: y0 a+ R; E' T, x( J& @( t6 A! J6 B6 k  D5 ~: L
4. 交叉编译生成windows客户端6 A# R+ |2 V" q4 F5 A
上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 交叉编译过程如下:. M( ?( ^+ c2 c" c% V% [
2 |# [5 M& t% `# \& ~9 @
进入go目录,进行环境配置
" S) {: |# H. Y3 a( x! ?cd  /usr/local/go/src/- T. D# T7 O- H7 x

0 \0 G1 m0 m5 F* [- sGOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash  
" C! b+ g: Q& Q& k. N进入ngrok目录重新编译
2 R: n0 F5 |2 |" o3 ]  H9 M4 w7 \cd  /usr/local/src/ngrok/
( \2 `" T% |+ K2 B9 V4 t
" C7 W, p- h- F+ [- jGOOS=windows GOARCH=amd64 make release-server release-client  6 _/ ?/ e! E$ a* F2 K
编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。
* H! l: J# u; c! F( }- }4 h5 W5 S. ^( X" }  V  R3 ?
5. ngrokd服务启动与使用
$ {( i. s. U  S, ~6 J7 c! F1、启动ngrokd服务端
: C  h4 Z0 U0 z$ @+ J
* _8 g! v# h( j  Gbin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"  
) H6 b# L0 l- N  S$ m注意,让程序一直在后台运行可以执行
  x1 y; k9 r8 y' g& L
5 C7 w7 W' i' K2 n8 \1 ^nohup bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" & : g, \. I" {8 m, |0 l
想要结束后台进程可以
! A4 d. Y) Y9 |* n; g  r
3 u9 A' _8 M4 o! Ops -A   #找到PID  
. Z, a" K/ t' e8 ^* Kkill xxxid  
: y1 T7 {4 k# q2 C. z$ G2、启动ngrok客户端
9 [; |$ |. t, {) s9 Q% J  p. p
# E: B; a: x% Q0 d4 J" c' F客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置: n6 K9 `/ x! X( D0 x( T

4 y. K4 K* D+ G+ {  m# Q1 aserver_addr: "tunnel.bbear.me:4443"  ) X" o; |1 R( V) k6 J+ W) i
trust_host_root_certs: false  

' b0 W- z4 _  L8 B$ [( q; ]2 F) h$ T" z/ D- ~" ^% {' u8 _
再在windows控制台执行3 Z9 c/ ?5 B* G0 f, J
) Q9 d1 [/ ?8 i( S$ M
ngrok -config=ngrok.cfg -subdomain upal 8080  3 N7 Z. Y: {, U5 j- q, l' l
0 k2 I& ]7 @5 d/ q
upal是你自定义地址。3 h9 q1 g: P# m& ~
看到这样一个界面就说明成功了
; B9 G5 P+ f* I
6 U7 q. j) H! d如果是这种界面应该是启动服务端的时候环境变量有问题,客户端与服务端的域名配置不一样导致的。客户端ngrok.cfg中serveraddr后的值必须严格与-domain 以及证书中的NGROK_DOMAIN相同 9 v4 R- k' C. m! `$ \
7 Y! S8 p! ]& L" v0 [

6 F' Y" m) v: J8 T
' y* B2 k+ ?" j, }# F5 e原文链接:http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/?utm_source=tuicool&utm_medium=referral0 Y3 Y! y- A9 S' V/ ~

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-26 10:34 , Processed in 0.082322 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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