2024/05/20 想起了這個也蠻方便的 tunel 的用法 " TryCloudflare "
或許跟我熟一點的都會知道去年參加了科技抗疫專案,然後透過 TWCC ( Taiwan Computing Cloud, 台灣AI雲 ) 提供的 V100 讓很給力的小夥伴們把聲紋識別的效果做得蠻不錯的 !
話說一直很意外 " 痛痛的人生-我在國家高速網路與計算中心的日子 " 被Google排在第一頁,但希望這篇用ngnix來做到ngrok且有SSL功能,比較正經點的文可以繼 Google " ASR NLP " 後也有機會SEO在第一頁出現,當然點閱 " https://www.twman.org/AI " 進一步瞭解更好 !
而這邊要分享的是 ngrok 的 SSL 功能 ... 因為很多時候在開發系統時,想測試卻沒有對外的網路,這時就需要 ngrok,使用方法其實頗簡單,註冊個帳號設定一下就可以,https://ngrok.com/docs 裡面說明的很清楚 ! 如果因為 -host-header 可以參考底下這文章
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
| sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update && sudo apt install ngrok
官網也有蠻簡單的 apt-get 的安裝操作過程,照著這裡的指令直接輸入就可以了
ngrok config add-authtoken "這裡會是一串你註冊帳號後的 key"
然後就可以直接下這樣的指令,然後它就會跑出你被指定的網址
ngrok http http://localhost:8080
接著本來是記錄怎樣用nginx再去搭上zeroSSL來弄出個網頁 (現在比較多人使用 gradio 囉),這比較算是後期開發好後需要的,不過其實開發過程更需要的是因為需要 sudo 然後跑 docker 後,然後開個 jupyter (lab);特別是有時候因為無法接公司網路,所以讓 ubuntu 去吃手機的USB共用網路,然後會因為 port fowarding 的問題,無法直接把 jupyter 開起來供遠端操作開發使用
jupyter notebook --generate-config (首先就是先生成 config 檔)
vi ~/.jupyter/jupyter_notebook_config.py (接著去編輯相關設定參數)
# Default: False
c.NotebookApp.allow_remote_access = True (這是遠端連線用)
# Default: 'localhost'
c.NotebookApp.ip = '127.0.0.1' (這個可以直接預設就好,沒影響?)
c.NotebookApp.local_hostnames = ['localhost'] (這個可以直接預設就好,沒影響?)
jupyter notebook password (這就是遠端連線的登入密碼/token)
Enter password: ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to ~/.jupyter/jupyter_notebook_config.json
# password.
# Default: ''
c.NotebookApp.password = '你生成的遠端連線密碼'
c.NotebookApp.port = xxxx (這個就是 port 號)
接著就是回到遠本文章。為了 https 一度去買了 SSL,但其實你用 Google Site 或者 Google Blogger 這些都是直接能幫你轉 SSL,除非你用了一些市面上的建站工具等,或者你是自己跑 flask 這樣;這邊意外找到一個 SSL 申請:https://zerossl.com,申請一次可以使用 3 個月;然後蠻好理解跟設定
付費版本很好理解,基本免費版本就很夠了,驗證方式也是很簡單,不然就是真的文件盡量翻一下 !
https://help.zerossl.com/hc/en-us/articles/360058295894-Installing-SSL-Certificate-on-NGINX
app.run(host='0.0.0.0', port=args.port, ssl_context=('/PATH/XXX.crt', '/PATH/XXX.key'))
再來就是因為 ngrok 免費版是每次生出一個亂數網址,如果你的環境是可以像 twcc 的 VCS 一樣可以自己開 port 而 flask 只能開在 1024 以上,但若想給人試用網址時還是略嫌麻煩 ... 所以就是自己裝個 nginx 然後把它導到 flask 了 !
apt-get install nginx
server {server_name 你的網址; # Virtual Host 的名稱listen 443 ssl;location / { # 將 / 導引到建立好的 SSH tunnelproxy_pass https://0.0.0.0:PORT;}ssl_certificate /PATH/certificate.crt;ssl_certificate_key /PATH/private.key;}