天天看點

docker搭建ngrok伺服器

嘗試了兩種方式:

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不同)

然後等待建構完畢,有點久,耐心等待

docker搭建ngrok伺服器

最後看到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伺服器配置域名解析

我使用的是騰訊雲

docker搭建ngrok伺服器

添加兩個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鏡像

拉取鏡像

啟動一個容器生成ngrok用戶端,伺服器端和CA憑證

[[email protected] 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 !
[[email protected] ngrok]#
           

當看到build ok !的時候就成功了

[[email protected] 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到容器即可啟動服務

[[email protected] 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

[[email protected] 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----------------------------------------

繼續閱讀