在 IIS 上安裝 Django:分步教程

已發表: 2022-03-11

儘管許多 Django 開發人員可能認為它是褻瀆神明的,但有時實際上有必要在 Windows/IIS 上部署 Django 應用程序,尤其是在使用基於 Windows 生態系統基礎設施的客戶端時。 “褻瀆”部分來自 Django 真正針對 Unix 環境,嚴重依賴於 WSGI、FastCGI 和命令行工具等功能,所有這些對 Windows 來說都是陌生的。 幸運的是,由於在等式的 Windows 和 Python+Django 方面都增加了功能(否則這將是一個雜項),Django/IIS 的兼容性正在提高,從而有助於解決這兩個不同技術世界之間的兼容性問題。

這個簡短、重點突出的教程將引導您完成 Windows 上 Django 項目的基本設置。 它涵蓋了 Python、Django 和相關工具的安裝,包括獨立運行和作為 FastCGI 服務器運行 Django 項目。 順便說一句,後者變得越來越重要,因為 IIS 現在正式支持 FastCGI(在 IIS 7+ 上,只需安裝 CGI 功能)。

注意:本教程適用於對 Windows 有所了解並熟悉 IIS 管理控制台的人員。 本教程中使用的 IIS 版本為 8.5,但描述和技術與早期版本類似。 本教程基於 Python 2.7 和 Django 1.7,因為這些是我用於項目的版本。 你可以在這裡找到另一個 Django 教程。

專業提示:如果您要部署多個 Django(甚至是純 Python)項目,或者如果您是開發人員,您應該查看 virtualenv,這是一個用於創建隔離 Python 環境的工具。

在 Windows 上安裝 Python

首先,下載 Python。 提供了 32 位和 64 位 MSI 安裝程序,您應該選擇適合您正在安裝的機器的安裝程序。

畫中畫的基礎

PIP 是安裝和維護 Python 庫的工具(其中 Django 只是一個示例)。 它是通過在命令提示符下運行pip命令來調用的。 它實現了幾個子命令,其中兩個最有用的是installfreeze 。 如果項目有任何依賴項,PIP 還將安裝項目依賴項(附加庫)。

運行pip install <package_name>將下載並安裝包及其所有依賴項(可能是嵌套的並且相當複雜)。 運行pip install --upgrade <package_name>同樣會將現有軟件包升級到其最新版本。 PIP 支持一種特殊的語法來安裝包的精確版本,而不僅僅是“最新版本”。 它是通過在包名後面附加一個操作符和一個版本號來完成的; 例如“Jinja2==2.7.3”(安裝精確版本)或“six>=1.8”(安裝等於或大於指定版本號的任何版本)。

運行pip freeze只是以pip install可以直接使用的格式顯示當前安裝的軟件包列表。

請注意,一些 Python / PIP 包附帶用 C 編寫的庫,必須對其進行編譯才能使包工作。 除非您將系統設置為具有與 Python 可執行文件兼容的工作 C 編譯器,否則您將無法安裝此類包。 Django 是一個純 Python 庫,因此不需要安裝 C 編譯器。

安裝 Python 2.7.9 或更高版本很重要,因為從 2.7.9 開始的 Python 版本包括 PIP,即 Python 庫/包/軟件管理器,用於安裝本教程中的所有其他內容。

安裝過程非常簡單明了。 它將提供在C:\Python27目錄中安裝 Python,您應該接受它,因為它使以後的生活更輕鬆。 盡量不要屈服於 Windows 將東西安裝在名稱中帶有空格的目錄中的習慣。

安裝後的基本目錄將包含大約 8 個子目錄、一些雜項文件和兩個名為Python.exePythonW.exe的可執行文件。 前者是默認的命令行解釋器和 Python shell,而後者只是解釋器,調用時不會使用(或生成)控制台窗口,因此適合運行 GUI Python 應用程序。

接下來,應將 Python 添加到系統的 PATH 環境變量中。 這是在Advanced選項卡中的Advanced System Settings (或System Properties )中完成的,方法是單擊Environment Variables按鈕。 有兩個目錄要添加: C:\Python27C:\Python27\Scripts 。 這些應附加到 PATH 列表中,用分號 ( ; ) 分隔。 PATH 變量的結尾應類似於;C:\Python27;C:\Python27\Scripts

專業提示:您可能還想安裝 GOW,這是一個輕量級的 Unix 命令行實用程序集合,類似於 Cygwin。 它將為您提供諸如ls之類的工具,以及諸如makewgetcurlsshscpgziptar之類的更有趣的工具。

在 Windows 上安裝 Django

可以使用 PIP 和諸如pip install django之類的命令來安裝 Django。 如果您的系統上尚不存在這些依賴項,則該過程可能會引入一些額外的依賴項。 否則,它將僅安裝 Django,輸出類似於以下內容:

 Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...

您可以通過啟動新的 Windows 命令提示符、運行python命令並在 Python 提示符下輸入import django命令來檢查 Python 和 Django for Windows 是否都在工作。 如果運行正常, import django命令後應該沒有輸出或消息; IE:

 Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>

在 Windows 上安裝 Django 項目

一個 Django“項目”由一個或多個“應用程序”組成。 項目的頂級目錄通常包含一個特殊的項目子目錄,其中包含設置和一些通用項目級信息,每個應用程序一個子目錄,以及一個名為manage.py的命令行腳本。 例如:

 C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free

Django 項目可以通過歸檔整個項目目錄並在另一台機器上解壓縮來簡單地分發。 在上面的示例中,項目包含project子目錄、名為djangoapp的應用程序目錄和輔助templates子目錄。

manage.py腳本是 Django 應用程序的“瑞士軍刀”。 它可以完成從創建新應用程序到數據庫遷移,再到運行測試(嵌入式)HTTP 服務器甚至是 FastCGI 服務器的所有工作。

運行測試 HTTP 服務器

如果項目及其應用程序正常運行,您應該能夠通過運行命令manage.py runserver來啟動默認的 Django 僅開發 HTTP 服務器,這應該會產生類似於以下內容的輸出:

 C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

正如您從消息中看到的,這會在 localhost 端口 8000 上啟動一個服務器。您可以使用 Web 瀏覽器立即訪問它。

配置和運行 FastCGI 服務器

一個更有趣的選項是啟用 FastCGI 服務器。 使用 FastCGI,您可以使用 IIS、Apache 或任何其他 Web 服務器在生產環境中為應用程序提供服務。 為此,您需要下載 fcgi.py(通過 FastCGI 使用 IIS 在 Windows 上運行 Django 的 Django 管理命令)並將其放入 Django 應用程序(不是項目!)子目錄的management/commands子目錄中。 managementcommands子目錄都必須有一個名為__init__.py的空文件(它將這些目錄轉換為 Python 模塊)。

fcgi.py是一個非常簡單和簡約的 WSGI 到 FastCGI 適配器,它支持偵聽 TCP 套接字或管道,並且通過使用stdin和 stdout` 完成所有處理。 因此,它不適用於 nginx 等現代 Web 服務器,但可以用於 IIS。

配置 IIS 以運行 FastCGI 應用程序

如果在 IIS 中加載了 FastCGI 模塊(或者只是 IIS 7+ 中的 CGI 模塊),則 IIS 管理控制台將顯示“FastCGI 設置”圖標。 Django 是一個具有自己的 URL 路由的框架,因此必須將 Django 應用程序作為特定路徑的“處理程序”安裝在 IIS 中。 要在 IIS 的默認網站上安裝 Django 應用程序,請在管理控制台中選擇它,然後打開處理程序映射配置功能。 在其中,單擊Add Module Mapping...操作,然後輸入以下信息:

  • 請求路徑:將其設置為\*以處理具有內部 Django 路由的所有請求
  • Module : 將其設置為FastCgiModule以使用 IIS 的 FastCGI 模塊
  • Executable :在這裡, python.exe路徑及其命令行參數都需要設置,使用管道字符 ( | ) 作為分隔符。 此設置的示例值為: C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings 。 注意,需要為manage.py腳本指定fcgi命令,並手動設置項目的 Python 解釋器的搜索路徑,以及項目設置模塊的 Python 模塊名稱。
  • 名稱:您可以將其設置為您喜歡的任何內容。

您的配置對話框應如下所示:

iis 配置對話框

接下來,單擊請求限制按鈕並編輯映射選項卡。 取消選中“僅當請求映​​射到…時才調用處理程序”複選框(否則,IIS 將在映射它認為是 URL 請求中的子目錄時出現問題):

請求限制

在處理程序信息對話框上單擊確定。 然後 IIS 將要求您確認創建匹配的 FastCGI 應用程序條目,您需要確認該條目。 此條目將在FastCGI 設置功能中可見,可在 IIS 管理控制台的根屏幕上訪問。 IIS 本身創建的默認條目就足夠了,但是您可能希望利用一些可選設置:

  • 最大實例數:我們用於運行 FastCGI 應用程序的方法是單進程、單線程,這意味著將為每個同時請求啟動一個單獨的 Python 解釋器進程。 此設置限制同時 Django 應用程序實例的數量。
  • 監控文件更改:默認情況下,一旦啟動,應用程序進程將處於活動狀態,直到手動關閉,或者直到它們處理Instance MaxRequest請求。 通過使用此設置,IIS 將監視任意文件的時間戳,如果它發生更改,它將停止並重新加載應用程序實例。 這對開發人員和生產環境都很方便,因為它允許在更改時重新加載應用程序。 “監視文件的時間戳以重新加載指示器”在 Windows 上是一個相當奇怪的概念,但在類 Unix 環境中是正常的,因此這裡使用 FastCGI 進行了繼承。

添加 FastCGI 應用程序

配置靜態資源和媒體目錄

現代 Web 應用程序使用多種資源文件,例如 CSS、JavaScript 等,Django 應用程序也不例外。 Django 提供了一個非常方便的功能,它允許開發人員將所需的資源集成到應用程序目錄樹中,但可以由 Django 提取並複製到適當的靜態目錄中。 這基本上是開發人員控制的功能,Django 存儲靜態文件的位置在項目的settings.py中控制。 表現良好的項目將為此使用合理的合理路徑,但它不是標準化的。

處理上傳文件的應用程序將它們存儲在一個類似管理的目錄中,在 Django 中,該目錄傳統上被命名為mediastaticmedia目錄需要作為虛擬目錄添加到 IIS 配置中:

配置靜態資源和媒體目錄

這裡重要的一步是為每個目錄重新配置Handler Mappings功能並刪除 Django App 處理程序,將StaticFile處理程序作為最重要的處理程序。

請注意, static目錄必須是 IIS 可讀的(以及 Django 項目中的所有其他文件和目錄),但media目錄也必須是 IIS 可寫的。 最終的站點配置應類似於以下內容:

iis 站點配置示例

關於數據庫的說明

SQLite 默認在 Windows 上工作,就像在類 Unix 系統上一樣。 大多數其他開源數據庫現在都可以在 Windows 上運行,甚至是我推薦的 PostgreSQL。 但是,在現有的 Windows 安裝中,可能需要使用 MS SQL Server 部署 Django。 這可以通過使用 ODBC 橋驅動程序或使用本機 MS SQL 驅動程序來實現。 理論上,兩者都有效,但我沒有測試過它們。 至少需要更改數據庫連接參數(在項目的settings.py文件中)才能切換到新數據庫。 數據遷移需要手動完成。

注意,如果使用 SQLite 數據庫,數據庫文件和它所在的目錄都需要 IIS 可寫。

故障排除

所描述的配置已經過測試並證明可以正常工作,但如果出現問題,這裡有一些基本步驟可用於對 Django for Windows 安裝進行故障排除:

  1. 嘗試自己啟動 FastCGI 命令行。 這是在FastCGI 設置中配置的命令,它必須與在站點的處理程序映射中配置的命令相匹配。
  2. 安裝 IIS 的跟踪功能,然後在失敗的請求跟踪規則中為 Django 站點配置它以跟踪所有內容 ( )、狀態代碼“500”和事件嚴重性“錯誤”。 跟踪將在 IIS 的C:\inetpub\logs\FailedReqLogFiles目錄(或類似目錄,取決於您的配置)中以 XML 文件(附帶 XSLT)的形式提供。 然後,您需要在 *Configure->Failed request tracking... 操作中啟用對特定網站(或虛擬目錄)的跟踪

結論

可以肯定的是,Django 是為類 Unix 環境量身定制的,運行 Django 最廣泛和受支持的方式是在 Linux 系統上(例如,使用 uwsgi 和 nginx)。

然而,讓 Django 在 Windows 上運行並不需要太多工作,如本教程所示。 從純粹的 Windows 角度來看,所描述的某些步驟可能看起來違反直覺,但它們是必要的,幸運的是,在配置中花費的精力只是一次性的。 配置完成後,Django 應用程序的行為方式應該與它在 Linux 平台上的行為方式大致相同。