uWSGI 是一個高效能的 Web 伺服器,它實現了 WSGI(Web Server Gateway Interface)協議,該協議是 Python Web 應用程序與 Web 伺服器之間的橋樑。uWSGI 不僅僅是一個協議的實作,它本身也是一個強大的 Web 伺服器,並且支援多種協議(如 HTTP、FastCGI、uwsgi 協議等),使得它在各種部署場景中都能發揮重要作用。
使用 uWSGI 作為 Web 伺服器有許多好處:
- 高效能:uWSGI 通常被認為是 Python Web 應用的最佳部署選擇,能夠處理大量的並發請求。
- 可擴展性:支援多種配置選項,可以輕鬆擴展以適應需求增長。
- 與 Nginx 配合:uWSGI 配合 Nginx 可實現高效能的反向代理,這也是許多企業級應用的首選架構。
- 穩定性:作為一個成熟的伺服器,它擁有穩定的運行性能並且被廣泛應用於生產環境。
接下來,讓我們一起來看如何在 Ubuntu 上設置並運行一個獨立的 uWSGI 伺服器。
STEP1. 安裝 Pip 和 Python Essentials#
首先,你需要安裝 Python 開發所需的一些基本工具和 pip(Python 的套件管理工具):
sudo apt-get install build-essential python-dev
sudo apt-get install python-pip
STEP2. 安裝 libxml2-dev 和 libxslt1-dev#
這些是一些依賴套件,安裝它們可以避免在安裝 uWSGI 時遇到問題:
sudo apt-get install libxml2-dev
sudo apt-get install libxslt1-dev
STEP3. 使用 pip 安裝 uWSGI#
Ubuntu 上透過 apt-get 安裝的 uWSGI 版本較舊,因此我們推薦使用 pip 安裝最新版本的 uWSGI:
sudo pip install uwsgi
STEP4. 建立測試檔案 app.py#
為了測試我們的 uWSGI 配置,首先建立一個簡單的 WSGI 應用:
mkdir myproject
cd myproject
nano app.py
在 app.py 中輸入以下內容:
def test(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
STEP5. 使用 uWSGI 啟動 app.py#
現在,我們可以使用 uWSGI 來啟動這個簡單的應用:
這會將 app.py 應用啟動並監聽在 8000 埠上,並透過 HTTP 協議提供服務。
sudo uwsgi --socket 0.0.0.0:8000 --protocol=http --wsgi-file app.py
STEP6. 使用瀏覽器確認結果#
在瀏覽器中輸入伺服器的 IP 和端口,確認應用是否成功運行:
http://伺服器IP:8000/
如果一切正常,你應該會看到以下結果:
Hello World
使用 uWSGI 與不使用的差異#
使用 uWSGI 和不使用(例如直接使用 Flask 內建伺服器)運行 Python Web 應用,主要在效能、穩定性和可擴展性上有顯著差異。
1. 性能差異#
- uWSGI:能處理大量並發請求,支持多進程、多執行緒,適合高流量生產環境。
- Flask 內建伺服器:僅適用開發環境,無法高效處理大量並發。
2. 穩定性差異#
- uWSGI:經過測試且穩定,支援進程管理和自動重啟,適合長期運行。
- Flask 內建伺服器:不穩定,無法應對高負載,容易崩潰。
3. 生產環境支持#
- uWSGI:適合生產環境,支持與 Nginx 配合,提供多種協議選擇。
- Flask 內建伺服器:僅適用開發,無法高效運行於生產環境。
結論#
- 在開發過程中,使用 Flask 內建的開發伺服器就足夠了,它簡單且方便。
- 在生產環境中,為了提升效能和穩定性,應該使用 uWSGI 作為 Web 伺服器,並且通常會搭配 Nginx 使用,這樣可以提供更強大的併發處理能力和高效的請求分發機制。
