嘗試了兩種方式:
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鏡像
拉取鏡像
啟動一個容器生成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----------------------------------------