0、前置內容說明
首先要知道WSGI是什么,關于WSGI服務器的介紹看這篇:WSGI(Web Server Gateway Interface)服務器
由于從Python 3.11開始限制了在系統級 Python 環境中使用 pip 安裝第三方包,以避免與系統包管理器(如 apt)產生沖突。所以開發時選擇使用虛擬環境。
關于該限制及如何創建虛擬環境看這篇:使用pip3安裝軟件包報錯externally-managed-environment
的幾種解決方式
1、安裝uWSGI
pip3 install uwsgi
這里是使用python的包管理器
pip
安裝uWSGI
.
如果是想要使用apt
全局安裝,除了uWSGI
還要安裝對應的python插件。
如果遇到網絡不好,可以在安裝的時候使用 國內 PyPI 鏡像源:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ uwsgi
2、配置uWSGI
創建配置文件,比如uwsgi.ini
,參考示例如下。實際使用要調整自己項目的目錄、實例名、監聽地址、日志存放路徑等。
[uwsgi]
# Flask項目的目錄
chdir = /root/code/web_proj
# Flask應用的WSGI模塊,這里app是Flask應用實例的名稱
module = app:app
# 自動更新模板文件
touch-reload = /root/code/web_proj/templates/
# 監聽的socket地址
socket = 127.0.0.1:8001# 開啟主進程模式
master = true
# 工作進程數量
processes = 4
# 線程數量
threads = 2# 當uWSGI停止時清理臨時文件
vacuum = true
# 后臺運行,指定日志文件(需確保目錄存在且有寫入權限)
daemonize = /root/code/web_proj/log/myapp.log
uwsgi.ini
配置分以下幾個部分:
應用相關配置
chdir
:指定 Flask 項目的根目錄,即/root/code/web_proj
。當 uWSGI 啟動時,會將工作目錄切換到該目錄下,確保能正確找到項目中的文件和模塊。module
:指定 Flask 應用的 WSGI 模塊,格式為模塊名:應用實例名
。這里app:app
表示在app.py
文件中定義的 Flask 應用實例app
。
自動重載配置
touch - reload
:設置了一個目錄/root/code/web_proj/templates/
。當該目錄下的文件有修改時,uWSGI 會自動重新加載應用,這樣可以及時看到模板文件修改后的效果。
網絡監聽配置
socket
:指定 uWSGI 監聽的地址和端口,這里是127.0.0.1:8001
,表示監聽本地回環地址的 8001 端口,其他進程或應用可以通過這個地址和端口與 uWSGI 進行通信。
進程和線程配置
master
:設置為true
表示開啟主進程模式。
主進程負責管理和監控子進程,當子進程出現異常時,主進程可以進行相應的處理,提高應用的穩定性。processes
:設置工作進程的數量為 4。
多個工作進程可以同時處理不同的請求,提高應用的并發處理能力。threads
:每個工作進程中的線程數量設置為 2。
線程可以在進程內部并發執行,進一步提高處理請求的效率。
清理和日志配置
vacuum
:設置為true
表示當 uWSGI 停止時,會自動清理臨時文件,避免臨時文件占用磁盤空間。daemonize
:指定 uWSGI 以守護進程的方式在后臺運行,并將日志輸出到/root/code/web_proj/log/myapp.log
文件中。使用守護進程模式可以讓 uWSGI 在后臺持續運行,不影響終端的使用。同時,需要確保指定的日志目錄存在且 uWSGI 有寫入權限,否則可能會出現日志記錄失敗的問題。
3、啟動uWSGI
啟動uWSGI
,使用--ini
指明配置文件。
uwsgi --ini uwsgi.ini
如果一切配置正確,uWSGI 服務器將在后臺啟動,并監聽指定的地址和端口。
如果出問題了,需要知道uWSGI
的運行情況,可以查看配置文件中所述的日志文件。
還可以簡單地使用ps來查看下進程狀態,按照上面的配置,有1個主進程,4個子進程,每個子進程內部有多個線程,如圖: