1 簡介
這是我的系列教程Python+Dash快速web應用開發的第二十期,在上一期中我介紹了利用內網穿透的方式,將任何可以聯網的電腦作為“伺服器”向外臨時釋出你的Dash
應用。
而內網穿透作為一種臨時展示的Dash
應用釋出方式,有著很多的侷限性,尤其是在效能方面。而對於較為正式的Dash
應用,自然是需要配合具有生產級別效能的web伺服器進行釋出,今天我就將介紹在windows
和linux
系統下,如何簡單快速地釋出你的Dash
應用,適用於雲伺服器與區域網環境。
2 利用waitress在windows中釋出Dash應用
首先我們來介紹windows
中快速釋出Dash
應用的方式,我們需要用到waitress
,它是一個可以在windows
和unix
系統中執行的具有生產級別效能的WSGI伺服器,因為Dash
是基於Flask
的,因此配合waitress
釋出非常之方便。
利用pip install waitress
完成安裝之後,我們主要有兩種方式釋出Dash
應用:
- 方式一
第一種方式非常簡單,是以命令列的方式進行釋出,我們以專案結構篇中搭建的七普資料看板專案為例,在app.py
的同級目錄啟動終端,執行下列命令:
waitress-serve --port=8888 app:app.server
我們就啟動了url為本地ipv4地址:8888
或公網ip地址:8888
的Dash
應用,其中本地ipv4
地址你可以通過在終端執行ipconfig
來檢視:
因此區域網內的任何裝置都可以通過訪問上述url來使用我們釋出的Dash
應用(譬如同一WIFI下的所有裝置,同一內網下的所有寬頻連線的裝置):
而如果你需要通過windows
雲伺服器向外網釋出Dash
應用,類似的訪問時把IP部分替換為公網IP即可。
- 方式二
waitress-server
命令列的方式雖然簡單,但是它只是一種簡單需求下的快捷方式,實際上waitress
設計了很多功能引數,以及配合PasteDeploy
和logging
等其他庫來列印和記錄日誌等增廣功能,這時候就需要使用到另一種方式。
推薦的方式是在app.py
同級目錄建立wsgi.py
檔案,然後在其中配置waitress
服務的相關引數,譬如上文中命令列的等價方式是:
from waitress import serve
from app import app
serve(
app.server,
port=8888
)
接著終端執行python wsgi.py
即可,而關於serve()
的更多引數,以及如何列印或記錄日誌資訊,可以參考官網文件https://docs.pylonsproject.org/projects/waitress/en/latest/arguments.html
、https://docs.pylonsproject.org/projects/waitress/en/latest/logging.html
。
3 利用gunicorn在linux中釋出Dash應用
而當你的伺服器為linux
系統時,我們有更好的web伺服器選擇——gunicorn
,它移植於Ruby
的Unicorn
專案,是一個兼具簡單易用、輕量高效特點的非常流行的WSGI伺服器,但只能執行於Unix
系統中,因此前面介紹windows
系統部署方法就沒有提到它。
用gunicorn
來發布Dash
應用也是非常簡單高效,比如dash-bootstrap-components
的官網文件就使用它進行釋出的。
類似的,利用pip install gunicorn
完成安裝之後,只需要一行命令我們就可以架起Dash
應用, 與上文waitress
略有不同的是,我們需要在app.py
中對server.py
中的server
物件進行匯入,接著再執行下列gunicorn
命令:
gunicorn -w 4 -b 0.0.0.0:8888 app:server
就成功地在linux
伺服器上釋出了Dash
應用,同樣可以通過公網和區域網IP進行訪問,其中-w
引數用於指定開啟指定數量的程式來提高應用的併發效能。
配合nohup
我們可以輕鬆地將gunicorn
命令置於後臺執行,不會阻塞終端,如:
nohup gunicorn -w 4 -b 0.0.0.0:8888 app:server &
而如果想要關閉後臺執行在某個埠號下的所有gunicorn
程式,執行kill $(lsof -i:埠號|awk '{if(NR==2)print $2}')
命令即可一步到位。
同樣地gunicorn
也擁有很多功能引數,常用的有--access-logfile
來指定向外書寫日誌檔案,-t
用於設定請求的超時秒數閾值,預設為30秒,當你的Dash
應用某個回撥執行的計算時間很長時,請務必記住手動設定提升該引數的數值。
更多有關gunicorn
的內容見官網https://docs.gunicorn.org/en/latest/index.html
。
以上就是本文的全部內容,歡迎在評論區發表你的意見和想法。