如何將 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 工作程序。