在 TWS.TWCC.AI 的 VCS (虛擬機或者docker裡)用 ngrok 穿透到本機 flask 的 nginx 跑 SSL WEB 或者 jupyter

或許跟我熟一點的都會知道去年參加了科技抗疫專案,然後透過 TWCC ( Taiwan Computing Cloud, 台灣AI雲 ) 提供的 V100 讓很給力的小夥伴們把聲紋識別的效果做得蠻不錯的 !

 話說一直很意外 " 痛痛的人生-我在國家高速網路與計算中心的日子 " 被Google排在第一頁,但希望這篇用ngnix來做到ngrok且有SSL功能,比較正經點的文可以繼 Google " ASR NLP " 後也有機會SEO在第一頁出現,當然點閱 " https://www.twman.org/AI " 進一步瞭解更好 !

 

TWCC基於AI超級電腦《台灣杉二號》,配備 NVIDIA Tesla V100 GPU 和 Intel Xeon Gold 61系列CPU,以實惠價格提供強大算力與國家級資安機制。設施均位於台灣境內,無資料傳輸國外之疑慮。

科技抗疫專案: 提高聲紋辨識正確率,更添防疫新利器
然後還因此擠出了以下這兩篇文章 !
那些語音處理 (Speech Processing) 踩的坑
那些自然語言處理 (Natural Language Processing, NLP) 踩的坑

而這邊要分享的是 ngrok 的 SSL 功能 ... 因為很多時候在開發系統時,想測試卻沒有對外的網路,這時就需要 ngrok,使用方法其實頗簡單,註冊個帳號設定一下就可以,https://ngrok.com/docs 裡面說明的很清楚 ! 如果因為 -host-header 可以參考底下這文章

https://blog.alantsai.net/posts/2018/04/devtooltips-5-ngrok-allow-public-to-access-localhost-website-and-sql-server

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 檔)

Writing default config to: ~/.jupyter/jupyter_notebook_config.py

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 號)

基本上上面指令做完後,你應該就可以直接使用 jupyter 或者 jupyterlab 了 !



這邊可以再補強一個應用,像圖中我在 terminal 其實是有用 conda 的,但是在 jupyter 裡的 ipynb 就沒看到,這時就是下這行指令

ipython kernel install --name "deepspeed" --user (如上圖可以看到我有個 conda env 叫 deepspeed)

接著就是回到遠本文章。為了 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 

生出 crt 跟 key 檔後,直接加在 flask 的 ssl_context 就可以
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 tunnel
proxy_pass https://0.0.0.0:PORT;
}
ssl_certificate /PATH/certificate.crt;
ssl_certificate_key /PATH/private.key;
}
 nginx 要設定的則是新增修改 /etc/nginx/sites-available/ 這個檔案,並且把剛剛稍早生成的 crt 跟 key 檔加上


最後工商一下負責 TWCC 民營化商轉,提供容器運算(CCS)、高速運算(HPC)、虛擬運算(VCS)、高速檔案系統(HFS)、虛擬磁碟(VDS)、雲端物件儲存(COS)等服務 的台灣智慧雲端服務股份有限公司,簡稱台智雲


https://tws.twcc.ai




考量資料完整安全的儲存在台灣,認真算一下跟目前像是 GCP、AWS 跟 Azure 的價格比較其實不會貴到那裡去


以 GCP 來說,n1-standard-4,vcpu * 2 + 8 GB RAM 跑起來一個月要價 USD 145.34,約等於4000多臺幣,但是刷卡是屬於境外,所以需要手續費,當然也可以找些代理商幫你處理,但畢竟也是筆費用


而 aws ( vcpu * 4 + 8 GB RAM 也要 US$ 74.67 約 $2200 多臺幣) 和 azure (以D2V3的 vcpu * 2 + 8 GB RAM 來說也是 US$ 85.46 約 $2500 多臺幣) 的計價可以自己依需求試算一下


最後來看一下這幾年來國網中心的超級電腦的進化跟台灣杉二號的規格吧