centos7.2 上搭建 Ngrok 服务

本贴最后更新于 2436 天前,其中的信息可能已经时移俗易

一、环境准备:

1.git
2.go语言环境

若已经安装可以直接看第二步

二、开始搭建 Ngrok 服务

1.下载 ngrok 源码,命令:

cd /usr/local/src
git clone https://github.com/inconshreveable/ngrok.git

2.生成证书

cd ngrok
 #先在这里把NGROK_DOMAIN改为自己的域名,如我的域名为“wushaohe.xin”
 export NGROK_DOMAIN="wushaohe.xin"

2.1、开始生成证书

openssl genrsa -out rootCA.key 2048
     openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
     openssl genrsa -out device.key 2048
     openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
     openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key  CAcreateserial -out device.crt -days 5000

2.2、将新生成的证书,替换掉 assets/client/tls 下的证书

cp rootCA.pem assets/client/tls/ngrokroot.crt
     cp device.crt assets/server/tls/snakeoil.crt
     cp device.key assets/server/tls/snakeoil.key

3.编译生成 ngrokd(服务端)

#这里是交叉编译,linux系统GOOS=linux,64位系统GOARCH=amd64,32位系统GOARCH=386
 #当前系统可用go env查看
 GOOS=linux GOARCH=amd64
 make release-server
 编译成功后在当前目录的bin目录下可找到ngrokd文件

注意: 在编译过程中有可能出现如下情况:

  问题1:
      GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata
      bin/go-bindata -nomemcopy -pkg=assets -tags=release \
  			  -debug=false \
  			  -o=src/ngrok/client/assets/assets_release.go \
  			  assets/client/...
  
  	  make: bin/go-bindata: Command not found
    make: *** [client-assets] Error 127
   解决方法:前往go安装目录的bin目录下找到go-bindata,将他移动到ngrok/bin下 (没有bin,可新建一个)   

问题 2:

 package code.google.com/p/log4go: Get https://code.google.com/p/log4go/source/checkout?repo=: dial tcp 216.58.197.110:443: i/o timeout

 因为google被墙,如果服务器不在墙外或者没有FQ则无法访问到code.google.com.

 解决方法:在 ngrok/src/ngrok/log 目录下找到 logger.go 文件,修改其中第45行的:

    log "code.google.com/p/log4go”为

    log "github.com/keepeye/log4go"  

问题 3:

 GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata
 # github.com/jteeuwen/go-bindata
    src/github.com/jteeuwen/go-bindata/toc.go:47: function ends without a return statement
    make: *** [bin/go-bindata] Error 2
 解决办法: https://github.com/inconshreveable/ngrok/issues/237 

进入到/usr/local/src/ngrok 目录下启动服务端:

./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="$NGROK_DOMAIN"  -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083"

4.编译生成 ngrok(客户端)-- 本次生成 windows 下的客户端

为go生成交叉编译环境,执行如下命令:
    cd /usr/local/go/src
    GOOS=windows GOARCH=amd64 ./make.bash

然后进入ngrok么了执行如下命令生成客户端: 
	cd /usr/local/src/ngrok
	GOOS=windows GOARCH=amd64 make release-client

成功后在bin目录下看到windows_amd64文件夹,复制到windows电脑上即可启动

在windows_amd64目录下新建一个ngrok.cfg文件,内容如下:

server_addr: "wushaohe.xin:8083"
	trust_host_root_certs: false
	tunnels:
	  http:
	    subdomain: "www"
	    proto:
	      http: "8080"

	  https:
	    subdomain: "www"
	    proto:
	      https: "8091"

	  ssh:
	    remote_port: 2222
	    proto:
	      tcp: "22"

然后启动客户端,我已经把windows_amd64文件夹下载到D盘下,打开window的CMD输入:
	cd D:\windows_amd64
	ngrok.exe -config ngrok.cfg start http https ssh

看到下面信息则启动成功:

Tunnel Status                 online
	Version                       1.7/1.7
	Forwarding                    http://www.wushaohe.xin:8081 -> 127.0.0.1:8080
	Forwarding                    https://www.wushaohe.xin:8082 -> 127.0.0.1:8091
	Forwarding                    tcp://wushaohe.xin:2222 -> 127.0.0.1:22
	Web Interface                 127.0.0.1:4040
	# Conn                        0
	Avg Conn Time                 0.00ms

此时,在浏览器访问 http://www.wushaohe.xin:8081,便能通过 ngrok 服务映射访问到本地的 8080 端口了,是不是很神奇!

  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 598 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 398 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 605 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 589 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 9 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 417 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 13 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖
  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    16 引用 • 53 回帖 • 123 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 23 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 495 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 609 关注
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 1 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 25 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 319 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 429 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    284 引用 • 4481 回帖 • 653 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 151 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖 • 1 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 268 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 7 关注