200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > ngrok服务端搭建并使用docker解放80端口

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

时间:2020-11-26 09:20:52

相关推荐

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

【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自己安装,安装gosudo mkdir /ngrokcd /ngroksudo wget /go/go1.11.2.linux-amd64.tar.gzsudo tar -C /ngrok -xzf go1.11.2.linux-amd64.tar.gz#下面三条一起粘贴执行echo 'export GOPATH=/ngrokexport NGROK_DOMAIN="ngrok.zhangqi.art"' | sudo tee -a /etc/profilesource /etc/profile## 安装ngrok,在 /ngrok 目录下操作git clone /inconshreveable/ngrok.git(生成秘钥、证书之类的)openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pemopenssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csropenssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000cp rootCA.pem /ngrok/assets/client/tls/ngrokroot.crtcp server.crt /ngrok/assets/server/tls/snakeoil.crtcp 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和配置GOPATHpackage 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' failedmake: *** [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: falsetunnels: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./public/ubuntu:16.04MAINTAINER itzhangqi itzhangqi@RUN mkdir /opt/ngrokENV NGROK /opt/ngrokENV DOMAIN ngrok.zhangqi.art //替换你自己的域名EXPOSE 80 443 4443 59900COPY ngrok/ngrokd $NGROK/COPY ngrok/server.crt $NGROK/ssl.crtCOPY ngrok/server.key $NGROK/ssl.keyCOPY ngrok/server.csr $NGROK/ssl.csrCOPY run.sh $NGROK/RUN chmod +x $NGROK/run.shCMD .$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 你的镜像 tagdocker 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_passhttp://127.0.0.1:8080;proxy_redirectoff;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 ipv4server_name ;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: falsetunnels:my:subdomain: "my"proto:http: 127.0.0.1:8090

启动客户端:

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

ok,成功了

访问项目,打了个断点 1

参考链接:

/p/bac99dd98c4a

/p/6f72a7bfb6ec

【end】

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。