docker搭建ngrok服务器

20 篇文章 0 订阅
2 篇文章 0 订阅

尝试了两种方式:
1.第一种是利用已经构建好了的镜像,应该是hteen这位大神构建了,docker仓库里也有,搭建起来毕竟容易,从原作者的博客中稍微整理而来
2.另一种是用Dockfile在自己机子上构建,稍微麻烦些

准备

1.一台云服务器并配置好docker环境
2.申请好域名
3.SSL证书(没有也行)

1.利用已构建好的镜像:hteen/ngrok

1.1拉取镜像

docker pull hteen/ngrok

1.2启动一个容器生成ngrok客户端,服务器端和CA证书

docker run --rm -it -e DOMAIN="ngrok.yourdomain.cn" \
-v /data/ngrok:/myfiles hteen/ngrok /bin/bash /build.sh

如果出现下面这个报错,就把/bin/bash换成sh就可以了

alpine docker exec: "/bin/bash": stat /bin/bash: no such file or directory

如下:

docker run --rm -it -e DOMAIN="ngrok.yourdomain.cn" \
-v /data/ngrok:/myfiles hteen/ngrok sh /build.sh

挂载宿主机目录/data/ngrok到容器内/myfiles目录
DOMAIN可以自己设定,作为ngrok服务端的地址(注意,这个DOMAIN后面是要写在客户端的配置文件里的,不可随意更改,更改意味着客户端要重新构建,和服务端启动时配置的DOMAIN不同)

然后等待构建完毕,有点久,耐心等待
在这里插入图片描述
最后看到build ok !就代表成功了

1.3获取客户端、服务端文件

到挂载宿主机目录/data/ngrok/bin中获取生成的客户端和服务端,复制到客户端机子上来

bin/ngrokd                  服务端
bin/ngrok                   linux客户端
bin/darwin_amd64/ngrok      osx客户端
bin/windows_amd64/ngrok.exe windows客户端

1.4启动ngrok服务端

挂载刚刚的/data/ngrok到容器即可启动服务

docker run -idt --name ngrok-server \
-v /data/ngrok:/myfiles \
-p 80:80 \
-p 443:443 \
-p 4443:4443 \
-e DOMAIN='ngrok.yourdomain.cn' hteen/ngrok sh /server.sh

这里的DOMAIN是客户端访问的时候用的,如这里配了abc.def.cn,那么客户端连接成功后,访问的地址就是xxx.abc.def.cn,而配置文件中(见1.6)的内容则使用的是1.2中设置的DOMAIN的内容

1.5服务器配置域名解析

我使用的是腾讯云
在这里插入图片描述
添加两个A记录:* 和 *.ngrok

1.6客户端连接ngrok服务

注意,客户端创建配置文件ngrok.cfg,server_addr配置的是1.2的DOMAIN中的内容,而不是1.4的DOMAIN的内容!

server_addr: "ngrok.yourdomain.cn:4443"
trust_host_root_certs: false

然后linux下命令:

./ngrok -config ./ngrok.cfg -subdomain abc 8080

windows下命令:

ngrok -config=ngrok.cfg -subdomain abc 8080

然后用abc.ngrok.yourdomain.cn就可以访问客户端机子的8080端口

方便使用可以写个.bat(windows下)

@echo OFF
set /p clientid=   请输入前缀:
echo.
set /p port=   请输入端口:
echo.
ngrok -config=ngrok.cfg -subdomain %clientid% %port%
PAUSE

1.7配置证书

前面的配置会自动生成自建证书,有些浏览器,或者微信小程序开发会不认,所有需要用正式的证书,如果有这方面需要,到/data/ngrok替换掉原来的证书即可

cd /data/ngrok
mv xxxxx.key device.key
mv xxxxx.pem device.crt

2.通过Dockerfile自行构建

首先在任意一个文件夹创建两个文件

touch Dockerfile
touch build.sh

然后参考下面内容即可
https://www.jianshu.com/p/53c72ae1446c
https://www.lylinux.net/article/2018/9/18/51.html

附:hteen构建的镜像,原作者的博客的内容

防止原作者个人博客挂了或者换路径而无法访问,下面复制原作者的博客内容
----------------------------------------begin----------------------------------------

准备工作
  • 公网服务器一台并且安装docker,我用的阿里云Centos7.0
  • 域名一枚,本文使用 tunnel.hteen.cn 做Ngrok服务器域名
  • hteen/ngrok Docker镜像
拉取镜像
[root@iZ25f738hs2Z ngrok]# docker pull hteen/ngrok
启动一个容器生成ngrok客户端,服务器端和CA证书
[root@iZ25f738hs2Z ngrok]# docker run --rm -it -e DOMAIN="tunnel.hteen.cn" \
-v /data/ngrok:/myfiles hteen/ngrok /bin/bash /build.sh

挂载宿主机目录/data/ngrok到容器内/myfiles目录 ,之后会

Generating RSA private key, 2048 bit long modulus
...............+++
..........+++
.....
build ok !
[root@iZ25f738hs2Z ngrok]#

当看到build ok !的时候就成功了

[root@iZ25f738hs2Z ngrok]# ls -Al
-rw-r--r-- 1 root root 1679 6月  14 18:58 base.key
-rw-r--r-- 1 root root 1111 6月  14 18:58 base.pem
-rw-r--r-- 1 root root   17 6月  14 18:58 base.srl
drwxr-xr-x 4 root root 4096 6月  14 19:01 bin
-rw-r--r-- 1 root root  993 6月  14 18:58 device.crt
-rw-r--r-- 1 root root  899 6月  14 18:58 device.csr
-rw-r--r-- 1 root root 1675 6月  14 18:58 device.key

生成了我们要的客户端和服务端在/data/ngrok/bin目录下,包括

bin/ngrokd                  服务端
bin/ngrok                   linux客户端
bin/darwin_amd64/ngrok      osx客户端
bin/windows_amd64/ngrok.exe windows客户端
启动Ngrok server

直接挂载刚刚的/data/ngrok到容器即可启动服务

[root@iZ25f738hs2Z ngrok]# docker run -idt --name ngrok-server \
-v /data/ngrok:/myfiles \
-p 80:80 \
-p 443:443 \
-p 4443:4443 \
-e DOMAIN='tunnel.hteen.cn' hteen/ngrok /bin/bash /server.sh

这样我们就启动了一个ngrok服务端程序

域名解析

这里我们需要添加两条A记录到阿里云服务器
这样我们才能将 tunnel.hteen.cn 和 *.tunnel.hteen.cn DNS解析到我们的服务器

客户端连接

下载我们生成的客户端,我这里以osx为例,其他平台一样
首先创建一个ngrok.cfg配置文件

server_addr: "tunnel.hteen.cn:4443"
trust_host_root_certs: false

然后在命令行执行

./ngrok -config ./ngrok.cfg -subdomain wechat 192.168.99.100:80

我这里是将wechat.tunnel.hteen.cn绑定的本地192.168.99.100:80
如果不指定-subdomain参数,每次启动客户端的时候会随机分配一个域名,随意并不方便

Nginx + Docker + Ngrok

由于ngrok默认使用80和443端口,我服务器已经运行了Nginx服务 ,
所以我这里启动Ngrok Server的时候并不是绑定的80和443端口,而是绑定的8082和4432

[root@iZ25f738hs2Z ngrok]# docker run -idt --name ngrok-server \
-v /data/ngrok:/myfiles \
-p 8082:80 \
-p 4432:443 \
-p 4443:4443 \
-e DOMAIN='tunnel.hteen.cn' hteen/ngrok /bin/bash /server.sh

启动之后需要在nginx.conf 添加两条反向代理配置

server {
     listen       80;
     server_name  tunnel.hteen.cn *.tunnel.hteen.cn;
     location / {
             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;
             proxy_pass http://10.24.198.241:8082;
     }
 }
 server {
     listen       443;
     server_name  tunnel.hteen.cn *.tunnel.hteen.cn;
     location / {
             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;
             proxy_pass http://10.24.198.241:4432;
     }
 }

10.24.198.241 是我阿里云内网IP

----------------------------------------end----------------------------------------

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值