如何將 Django 與 uWSGI 搭配使用

uWSGI 是一個以純 C 語言編寫的快速、自我修復且對開發人員/系統管理員友善的應用程式容器伺服器。

另請參閱

uWSGI 文件提供了一個教學,涵蓋 Django、nginx 和 uWSGI(一種可能的部署設定,但並非唯一)。以下文件著重於如何將 Django 與 uWSGI 整合。

先決條件:uWSGI

uWSGI 維基描述了幾種安裝程序。使用 pip(Python 套件管理工具),您可以使用單一命令安裝任何 uWSGI 版本。例如:

# Install current stable version.
$ python -m pip install uwsgi

# Or install LTS (long term support).
$ python -m pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

uWSGI 模型

uWSGI 以客戶端-伺服器模型運作。您的網頁伺服器(例如 nginx、Apache)與 django-uwsgi「工作」程序通訊以提供動態內容。

為 Django 設定並啟動 uWSGI 伺服器

uWSGI 支援多種方式來設定程序。請參閱 uWSGI 的設定文件

以下是一個啟動 uWSGI 伺服器的範例命令:

uwsgi --chdir=/path/to/your/project \
    --module=mysite.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    --master --pidfile=/tmp/project-master.pid \
    --socket=127.0.0.1:49152 \      # can also be a file
    --processes=5 \                 # number of worker processes
    --uid=1000 --gid=2000 \         # if root, uwsgi can drop privileges
    --harakiri=20 \                 # respawn processes taking more than 20 seconds
    --max-requests=5000 \           # respawn processes after serving 5000 requests
    --vacuum \                      # clear environment on exit
    --home=/path/to/virtual/env \   # optional path to a virtual environment
    --daemonize=/var/log/uwsgi/yourproject.log      # background the process

這假設您有一個名為 mysite 的頂層專案套件,並且在其中有一個模組 mysite/wsgi.py,其中包含一個 WSGI application 物件。如果您使用最新版本的 Django 執行 django-admin startproject mysite (使用您自己的專案名稱取代 mysite),您將會擁有此配置。如果此檔案不存在,您需要建立它。請參閱如何使用 WSGI 部署文件,了解您應該放入此檔案的預設內容以及您可以新增的其他內容。

此處特定於 Django 的選項是:

  • chdir:需要在 Python 的匯入路徑上的目錄路徑 - 即包含 mysite 套件的目錄。

  • module:要使用的 WSGI 模組 - 很可能是 startproject 建立的 mysite.wsgi 模組。

  • env:應該至少包含 DJANGO_SETTINGS_MODULE

  • home:您的專案虛擬環境的可選路徑。

ini 設定檔範例

[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log

ini 設定檔範例用法

uwsgi --ini uwsgi.ini

修正檔案上傳的 UnicodeEncodeError

如果您在上傳檔案名稱包含非 ASCII 字元的檔案時收到 UnicodeEncodeError,請確保 uWSGI 已設定為接受非 ASCII 檔案名稱,方法是將此內容新增至您的 uwsgi.ini

env = LANG=en_US.UTF-8

有關詳細資訊,請參閱 Unicode 參考指南的檔案部分。

請參閱 uWSGI 文件中關於管理 uWSGI 程序的資訊,以了解如何啟動、停止和重新載入 uWSGI 工作程序。

返回頂部