快轉到主要內容
  1. Posts/

在 Ubuntu 上設定高效能 uWSGI 伺服器

Python Web Server Ubuntu UWSGI WSGI Python Ubuntu Web Server Nginx Deployment
目錄

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 使用,這樣可以提供更強大的併發處理能力和高效的請求分發機制。
Ernie
作者
Ernie

相關文章

Python 虛擬環境設定:使用 virtualenv 與 VSCode
Python 開發環境 Python Virtualenv VSCode 虛擬環境 開發環境 套件管理 Pip
使用 virtualenv 與 VSCode 建立 Python 虛擬環境,提升開發效率。
使用 Supervisor 管理 Linux 服務
Linux Python Supervisor Flask Gunicorn Linux Python
學習如何在Linux環境下使用Supervisor管理Flask+Gunicorn應用程式。
有效清理Ubuntu系統的安裝套件
Ubuntu Linux Ubuntu 套件管理 系統清理 磁碟空間
學習如何使用apt-get clean, apt-get autoclean, apt-get remove, 和 apt-get autoremove 命令清理和移除Ubuntu系統中不需要的套件,釋放磁碟空間。