iT邦幫忙

2

如何將 Django 架設在 IIS 上

前言:

在公司攥寫Web,因為自己想要使用Python,決定挑Django這套來去開發,
一開始一直當魯小小去說服最資深的前輩,最後終於成功了(他受不了),
但是開發一半就遇到最經典的問題,
怎麼在IIS上Run Python和架設Django的App呢?(本公司都是用Windows體系)
那時候我和兩位資深前輩一起找網路資源去測試是否可行,
當時文章很少要找很久,然後加上測試花了兩三天才成功,
一位資深前輩施大哥就先把文件上紀錄,現在我才有時間在把他的文章拿來參考再重新攥寫,
先感謝他當時能馬上做出文件,現在我才能簡單重新複習。

環境架構:

windos10
IIS10
Python 3.6.2
Django 1.11.3

安裝流程:

1.安裝IIS

開啟控制台=>程式集
https://ithelp.ithome.com.tw/upload/images/20181122/201135427nTYfCytLW.png
程式集=>開啟或關閉Windows功能
https://ithelp.ithome.com.tw/upload/images/20181122/20113542sTwIebuEuB.png
開啟或關閉Windows功能 => 點選Internet Information Services (IIS)
、點選裡面的CGI
然後按確認即可安裝
https://ithelp.ithome.com.tw/upload/images/20181122/201135424X5aAmbTo0.png

2.確認python狀況

如何安裝Python可以觀看我的文章
在Windows底下最適當安裝Python環境的方法

3.確認wfastcgi狀況

如果有安裝Python環境通常會安裝wfastcgi
在Cmd line下指令

      pip install wfastcgi

安裝後讓wfastcgi enable

      wfastcgi wfastcgi-enable

4.安裝Django

      pip install Django

5.確認FastCgi狀況

先開啟IIS=>Internet Information Services (IIS)
https://ithelp.ithome.com.tw/upload/images/20181122/20113542Kv2lWiMDo8.png
在Windows系統管理工具=>
如果剛剛有安裝Cgi,理論上也會幫你裝FastCgi
先檢查在你的機器首頁上是否有FastCgi
https://ithelp.ithome.com.tw/upload/images/20181122/20113542XtgVho711Z.png

6.新增網站

在IIS首頁上,左有邊看到**[站台]**案右鍵=>新增網站
https://ithelp.ithome.com.tw/upload/images/20181122/20113542Y9nsY9wabx.png
新增網站設定
1.你的站台名稱:(隨便設定)
2.實體路徑:(你放Django檔案的地方)
3.繫結:(設定你的Url,通常設定)
https://ithelp.ithome.com.tw/upload/images/20181122/20113542wdAeQnnZ57.png

7.設定處理常式對應

點選你剛剛設定站台,然後再點選[處理常式對應]

https://ithelp.ithome.com.tw/upload/images/20181122/20113542B9vomU7rMJ.png

設定新增模組應對
1.要求路徑:*
2.模組:FastCgiModule
3.執行檔:(Python.exe的路徑)|(wfastcgi.py的路徑 通常會複製檔案複製到你放Django檔案的地方)
4.名稱:處理應用名稱(隨便設定)
https://ithelp.ithome.com.tw/upload/images/20181122/20113542OWWbTxpvKV.png!
設定要求限制
預設會勾選[只要當要求對應到下列項目時才啟動處理常式(I)] 取消掉
https://ithelp.ithome.com.tw/upload/images/20181122/20113542kuXYPKm2rd.png

8.設定FastCGI 設定

回到本機首頁裡面的[FastCGI 設定]
https://ithelp.ithome.com.tw/upload/images/20181122/20113542vjw2GkIelk.png
點選剛剛設定檔案然後按右鍵編輯
https://ithelp.ithome.com.tw/upload/images/20181122/20113542XCUIdF4qsx.png
編輯 FastCGI應用程式
https://ithelp.ithome.com.tw/upload/images/20181122/20113542nHQOFKOL04.png
新增環境變數

Name Value
WSGI_HANDLER django.core.wsgi.get_wsgi_application()
PYTHONPATH 你放Django的路徑
DJANGO_SETTINGS_MODULE (Django App Name).settings

Web.Setting檔案大致上如下即可

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <handlers>
                <add name="DjangoApp" 
                     path="*" 
                     verb="*" 
                     modules="FastCgiModule" 
                     scriptProcessor="<python安裝路徑>python.exe|<python安裝路徑>\Lib\site-packages\wfastcgi.py" 
                     resourceType="Unspecified" />
            </handlers>
        </system.webServer>
        <appSettings>
            <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
            <add key="PYTHONPATH" value="(網站資料夾路徑)" />
            <add key="DJANGO_SETTINGS_MODULE" value="(Django App Name).settings" />
        </appSettings>
    </configuration>

9.設定StatciFile

因為在Django底下有一些Server裡面有StaticFile直接撈取,
但是你的模組StaticFile優先權太低,所以會把其他事情做掉
所以必須把[處理常式對應]StaticFile權限往上調整
1.選取你的StaticFile的位置,點選[處理常式對應]
https://ithelp.ithome.com.tw/upload/images/20181122/20113542i3STEt9ESo.png
2.然後按檢視已排序的清單
https://ithelp.ithome.com.tw/upload/images/20181122/20113542cbFnpVkRl4.png
3.把StaticFile優先權拉上來
https://ithelp.ithome.com.tw/upload/images/20181122/20113542MRGpGPgGBJ.png

結論

有看到我資深前輩的文章,就有寫到的心得

不要IIS上跑這些東西才是最佳解

老實說 讓Python已經算在Windows比較Friendly 如果比較其他在Linux環境下比較友善的語言來說
但是Python在Winodws上跑還是有很多雷,如果有心要在Windows下跑Python確實需要多一些技術處理

參考來源

Installing Django on IIS: A Step-by-Step Tutorial
在 IIS 上架設 django


1 則留言

0
Ho.Chun
iT邦新手 5 級 ‧ 2021-03-26 14:20:32

您好!
我看了官方的文件後發現有一段是設定 HTTP 平台處理常式
想請問,為什麼我們這邊只要設定 FastCGI 處理常式即可呢 ?

https://ithelp.ithome.com.tw/upload/images/20210326/20106955ZUj3hvbgb9.png

url: https://docs.microsoft.com/zh-tw/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2019

LarryLin iT邦新手 5 級 ‧ 2021-03-30 16:27:17 檢舉

基本上官方文件是提供兩個模組 擇一
給你去設定Python Web的方法
1.httpPlatform
2.FastCgi
至於兩個模組的差異大概就是
HttpPlatform Http相關運作先由IIS處理之後再由IIS幫你啟動你的程式(由微軟創作)
FastCgi CGI的升級版,經由Socket觸發之後啟動你的程式,然後把你的程式,可以支援比較多,最早因為要處理PHP(NCSA開發)

兩個模組在IIS上其實都在做差不多是事情,都是為了間接第三方程式

保哥的HttpPlatform文章 介紹 IIS 8 全新的 HttpPlatformHandler
FastCGI 協議規範中文版

Ho.Chun iT邦新手 5 級 ‧ 2021-04-02 22:55:54 檢舉

感謝!! 原來是二擇一,懂意思了 /images/emoticon/emoticon41.gif

我要留言

立即登入留言