ngrok服务端搭建并使用docker解放80端口

2023-11-19

【start】

前言:为什么要搭建ngrok服务端,为什么使用docker

        1、开发环境下调试微信公众号使用(要求80端口);

        2、ngrok配置中要指定 http的端口,如果指定80端口的话,会和nginx抢端口,nginx肯定比ngrok重要,不能给他让出80端                口,所以就需要docker创建一个容器将服务器的某个端口映射到容器的80端口,然后将服务器生成的ngrok服务端和证                  书都放到docker中,在docker中启用ngrok服务端;

一、搭建ngrok所需东西

          服务器(有公网ip),域名

        【示例中我的IP为39.105.210.177,域名是 zhangqi.art,ngrok使用的二级域名是 ngrok.zhangqi.art ,操作系统:ubuntu16.04】

二、搭建ngrok服务端步骤

          1、做域名【泛解析】,开放ngrok软件所需端口;

          2、在服务器上把 ngrok 软件安装好,编译好服务端和客户端;配置ngrokd (服务端)的证书、密钥;

          3、启动服务端;

          4、配置客户端文件,客户端启动(主要是检测服务端配置的有没有问题,没有问题的话才能将ngrok服务端放到docker中);

          5、新建Dockerfile文件,创建docker镜像,运行docker容器,在容器中启动ngrok服务端;

          6、服务器中:nginx配置反向代理,将 ngrok的请求都代理到服务器给docker开放的端口上(也就是docker的80端口上)

          7、客户端配置好后启动,就可以使用了.

 三、具体操作

        1、域名泛解析以及开放ngrok所需端口;

      (1)【域名泛解析】我的域名是在阿里云下的,所以在域名管理里面做域名解析,添加记录;【域名为 zhangqi.art , 域名泛解析为                                  *.ngrok.zhangqi.art】

     (2)【ngrok开放端口】-修改安全组

               开放 4443,443,8080,59900(这个端口是随便的,前面的4443、443端口是ngrok需要,8080是nginx反向代理用的)

       2、安装ngrok软件,编译 服务端和客户端

          (1) 安装ngrok必须安装 git、golang软件;【go version 检测是否存在go程序;git version 检测是否存在git】;

     

## git自己安装,安装go
sudo mkdir /ngrok
cd /ngrok
sudo wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
sudo tar -C /ngrok -xzf go1.11.2.linux-amd64.tar.gz

#下面三条一起粘贴执行
echo 'export GOPATH=/ngrok
export NGROK_DOMAIN="ngrok.zhangqi.art"' | sudo tee -a /etc/profile
source /etc/profile
 

## 安装ngrok,在 /ngrok 目录下操作
git clone https://github.com/inconshreveable/ngrok.git

(生成秘钥、证书之类的)
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 server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

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

    (2)编译服务端和客户端

#linux是64位应该执行的 <getconf LONG_BIT 查看Linux是64位还是32位 linux版本>
GOOS=linux  GOARCH=amd64 make release-server #编译服务端
GOOS=linux  GOARCH=amd64 make release-client  #编译客户端

#编译报以下错,安装最新的go和配置GOPATH
package context: unrecognized import path "context" (import path does not begin with hostname)
package net/http/httptrace: unrecognized import path "net/http/httptrace" (import path does not begin with hostname)
Makefile:8: recipe for target 'deps' failed
make: *** [deps] Error 1

   3、启动服务端命令(这个命令在 /ngrok 目录下执行)

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="ngrok.zhangqi.art" -httpAddr=":8080" -httpsAddr=":8082" -tunnelAddr=":4443"

   4、配置客户端文件 ngrok.cfg

     首先要有生成的客户端 ngrok,ngrok.cfg(配置文件),start.sh(启动文件)

     

#ngrok.cfg文件

server_addr: "ngrok.zhangqi.art:4443"
trust_host_root_certs: false
tunnels:
  my:
   subdomain: "my"
   proto:
    http: 127.0.0.1:8090



#start.sh文件
/ngrok/bin/ngrok -config=./ngrok.cfg start my




#命令启动
./start.sh

 如果Tunnel Status onlie,就证明ngrok服务端没有问题,继续下一步(这个时候映射出来的地址并不能正常访问,只是映射成功了)

5、创建Dockerfile文件(确保自己安装了docker)

     ngrok和 nginx都在抢 80端口该怎么办??显然 nginx更重要,所以我打算用 Docker欺骗 ngrok,让它误以为自己绑定到了机       器的 80端口。
    目录结构如下:(下面所需的东西,都从上面生成的文件中复制过来)

.├── Dockerfile
 ├── ngrok
 |        ────ngrokd  (服务端)
 |        ────server.crt
 |        ────server.key
 |        ────server.csr
 └── run.sh

Dockerfile 如下:

FROM hub.c.163.com/public/ubuntu:16.04
MAINTAINER itzhangqi itzhangqi@sina.com
RUN mkdir /opt/ngrok
ENV NGROK /opt/ngrok
ENV DOMAIN ngrok.zhangqi.art //替换你自己的域名
EXPOSE 80 443 4443 59900
COPY ngrok/ngrokd $NGROK/
COPY ngrok/server.crt $NGROK/ssl.crt
COPY ngrok/server.key $NGROK/ssl.key
COPY ngrok/server.csr $NGROK/ssl.csr
COPY run.sh $NGROK/
RUN chmod +x $NGROK/run.sh
CMD .$NGROK/run.sh

其中 run.sh 内容如下:

#!/bin/sh
/opt/ngrok/ngrokd -tlsCrt /opt/ngrok/ssl.crt -tlsKey /opt/ngrok/ssl.key -domain "ngrok.zhangqi.art"

然后在工程目录下执行:

//$REPO_NAME 你的 repo名称
//$TAG 你的镜像 tag
docker build -t $REPO_NAME:$TAG .

不出意外地,镜像 build成功,然后运行镜像:

docker run -d -p 127.0.0.1:8080:80 -p 127.0.0.1:8081:443 -p 4443:4443 -p 59900:59900 $REPO_NAME:$TAG

6、nginx设置反向代理:(*.ngrok.zhangqi.art的请求都代理到 8080端口,而8080端口绑定到了docker容器的80端口上)

server {
        server_name *.ngrok.zhangqi.art;
        listen 80;
        location / {
                proxy_pass          http://127.0.0.1:8080;
                proxy_redirect      off;
                proxy_set_header        Host $host;
                proxy_set_header    X-Real-IP       $remote_addr;
                proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        }

}

7、配置好要启动的域名,启动客户端

#nginx中监听 8090端口
server {
    charset utf-8;
    client_max_body_size 128M;
    listen 8090; ## listen for ipv4

    server_name dev.passport.com;
    root        /data/wwwroot/Passport/public;
    index       index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # uncomment to avoid processing of calls to non-existing static files by Yii
    #location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    #    try_files $uri =404;
    #}
    #error_page 404 /404.html;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~* /\. {
        deny all;
    }
}
#ngrok.cfg中 proto 设置8090端口

server_addr: "ngrok.zhangqi.art:4443"
trust_host_root_certs: false
tunnels:
  my:
   subdomain: "my"
   proto:
    http: 127.0.0.1:8090

启动客户端:

/ngrok/bin/ngrok -config=./ngrok.cfg start my

ok,成功了

访问项目,打了个断点 1

参考链接:

https://www.jianshu.com/p/bac99dd98c4a
https://www.jianshu.com/p/6f72a7bfb6ec

【end】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ngrok服务端搭建并使用docker解放80端口 的相关文章

  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • 使用查询参数值进行 NGINX 301 重定向

    我想重定向example com lang en to example com en 我正在使用 Python Django 我的服务器运行 Plesk Nginx 我尝试像这样在我的网页上重定向 但这是行不通的 rewrite lang
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 如何避免 nginx“上游发送太大的标头”错误?

    我正在运行 nginx Phusion Passenger 和 Rails 我遇到了以下错误 upstream sent too big header while reading response header from upstream
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad

随机推荐

  • VUE之Echarts地图引入及配置项详解

    步骤 建立dom用于渲染地图组件 div style width 100 height 100 class map charts div 引入所需js文件 import echarts from echarts require echart
  • Unity中在场景中添加水资源效果的方法

    首先 导入系统自带的水资源包 鼠标右击Project视图中的Assets文件夹 在弹出来的列表中选择 Import Package gt Water Basic 然后 弹出一个 Importing package 窗口 自由选择其中的包 全
  • Python操作数据库

    pymysql模块简单实用 1 安装pymysql模块 pip3 install PyMySQL 2 建立连接 与MySQL服务端建立连接 conn pymysql connect host 127 0 0 1 ip port 3306 端
  • 因果模型五:用因果的思想优化风控模型——因果正则化评分卡模型

    因果模型五 用因果的思想优化风控模型 因果正则化评分卡模型 一 模型中的因果和相关 二 不可知样本选择偏差 三 因果推断 四 因果与评分卡的融合 五 模型效果评估 5 1 人工合成数据效果测试 5 2 YFCC100M图像数据测试 5 3
  • 高德地图打点获取点的坐标和名称

    一 首先引入地图 代码在最后 二 然后是打点获取坐标和名称的方法 代码在最后 重点 如果不加上密钥的话可能会得不到数据名称 你想要的代码来了 密钥 window AMapSecurityConfig securityJsCode 你申请ke
  • GraphPad Prism 9.2 Mac 2021最新安装使用教程

    GraphPad Prism集生物统计 化学统计 以及科技绘图于一身 其中医学所能用到的绘图需要它几乎都能满足 Prism 现在被各种生物学家以及社会和物理科学家广泛使用 超过110个国家的超过20万名科学家依靠 Prism 来分析 绘制和
  • SpringBoot学习遇到的问题(1) - 配置文件有日志的debug模式等配置项,为什么不起作用...

    这个问题困扰我近乎两天 通过查找N多资料后终于解决 写下来共享给大家 logging level root DEBUG 一系列的日志配置项 都不起作用的原因是springboot启动加载不到src main resources下的配置文件a
  • 那些踩过的declared implicitly的坑

    缺少头文件 我的本意是想做串口打印进行调试 于是我在usart c中重写了这两个函数 这里顺便记录下如何串口打印 usart c中 int fputc int ch FILE f HAL UART Transmit huart1 uint8
  • 2023计算机四非保研(复试:东北大学,成电,西电,浙软,中海洋,天大)

    文章目录 个人情况 夏令营情况 预推免情况 进入复试 中国海洋大学 学硕 浙大软院 专硕 天津大学智算 专硕 中科院网络中心 专硕 西电网安院 学硕 东北大学计算机 学硕 成电计算机 专硕 最终offer 感想 个人情况 本科学校 西北某四
  • firmware-mod-kit工具安装和使用说明

    一 firmware mod kit工具的安装 firmware mod kit工具的功能和binwalk工具的类似 其实firmware mod kit工具在功能上有调用binwalk工具提供的功能以及其他的固件解包工具的整合 下载fir
  • pp-human在rk3588上部署

    https github com leeguandong Yolov5 rknnlite2https github com leeguandong Yolov5 rknnlite2 这是我在paddledetection和rknn官方基础上
  • Jmeter使用JDBC对数据库压测

    背景说明 压测除了全链路压测外 有时候也需要对指定服务进行性能测试 这里以jmeter工具对数据库进行压测说明 压测不同数据库需要安装不同的数据库驱动 这里以mysql为例进行压测 步骤一 数据库驱动安装 1 进入mysql官网 根据不同m
  • 课程设计心得_关于switch输入字母进入死循环问题

    做C语言课程设计时 采用了大量的switch 在后期找bug时 当输入字符类型时 如a 之类的 程序进入了死循环 但又不想换成其他的 主要是懒 不想大量改动 void menu windows int n system cls fflush
  • Python3 字典

    字典是另一种可变容器模型 且可存储任意类型对象 字典的每个键值 key gt value 对用冒号 分割 每个对之间用逗号 分割 整个字典包括在花括号 中 格式如下所示 注意 dict 作为 Python 的关键字和内置函数 变量名不建议命
  • 安全运维之Resin应用服务器中间件安装使用与安全配置

    本章目录 0x00 快速入门 0x01 Resin安装 0x02 Resin配置文件 0x03 Resin应用 0x04 Security 0x05 Help 附录补充 1 Resin 日志记录之format配置详解 原文地址 https
  • 登入服务器bmc_如何使用 BMCTool 远程管理 PowerEdge C 系列服务器

    文章内容 症状 本文介绍了如何使用 BMCTool 管理 PowerEdge C 系列服务器 BMC 工具旨在压缩和改进 IPMITool 的功能 可从poweredgec dell com下载 需要安装 OpenIPMI 和 IPMITo
  • redis学习笔记(七):redis常见问题和解决方案

    目录 一 缓存穿透 1 基本介绍 2 解决方案 1 布隆过滤器 2 缓存空对象 3 参数校验 4 对比 二 缓存击穿 1 基本介绍 2 解决方案 1 互斥锁 2 永不过期 3 两种方案对比 三 缓存雪崩 1 基本介绍 2 解决方案 1 过期
  • ODBC连接ORACLE数据库的设置

    一 建立服务名1 选择 Net8 Configuration Assistant 选择 本地网络服务名配置 2 选择 添加 3 选择 Oracle 8i数据库或服务 4 输入服务名 此为远程数据库已经定制好的数据库服务名字 比如 ORCL
  • python map和lambda

    map和lambda 前言 一 map 二 lambda 三 map和lambda的使用 前言 一 map map是python的内置函数 根据提供的函数对指定序列做映射 map function literation function 函
  • ngrok服务端搭建并使用docker解放80端口

    start 前言 为什么要搭建ngrok服务端 为什么使用docker 1 开发环境下调试微信公众号使用 要求80端口 2 ngrok配置中要指定 http的端口 如果指定80端口的话 会和nginx抢端口 nginx肯定比ngrok重要