本文章轉載於https://www.django.cn/article/show-21.html,詳查看此文
教程基於Windows server2012+Python3.6+IIS之上部署django的,同樣適用於server2012之上的版本服務器和windows7以上的windows操作系統。
提示:Python不要安裝在windows用戶目錄下,項目也不要放在windows用戶目錄下,這樣就能避免出很多問題。
如果覺得看文字沒意思,想看視頻教程的,請點擊這裏:Django項目部署視頻教程
1、安裝IIS和CGI
打開服務器管理器,選擇添加角色和功能,選擇要添加的服務器角色(WEB服務器IIS),然後安裝
IIS安裝成功之後,然後安裝CGI,再次選擇添加角色和功能,找到之前安裝的WEB服務器IIS,點擊它。
在展開的選項裏找到WEB服務器,點擊它,找到應用程序開發點擊在展開的列表裏找到CGI,勾選,然後下一步,安裝它。
安裝好CGI之後,我們在瀏覽器裏輸入http://127.0.0.1 訪問IIS,如果出現如下頁面,說明IIS安裝成功。
2、安裝Python3
在C盤建立python目錄,然後從Python官網下載Windows版本的64位的Python安裝包,並安裝它。具體可以參考文章:python3安裝詳細步驟
3、安裝wfastcgi
在Windows下,我們沒法使用uwsgi,但我們可以使用wfastcgi替代它,打開CMD窗口,輸入命令安裝wfastcgi:
pip install wfastcgi
安裝成功之後,通過下面命令啓動它:
wfastcgi-enable
如上圖,啓動成功之後,它會把Python路徑和wfastcgi的路徑顯示出來,我們需要把這個路徑複製出來,保存好,後邊用得着。
c:\python\python.exe|c:\python\lib\site-packages\wfastcgi.py
注意:上面的路徑,是由Python解釋器的路徑和“|”以及“wfastcgi.py”文件路徑組成。
4、在IIS裏添加項目網站
把我們本地項目源碼上傳到服務器相應的目錄裏。
留意:搬遷項目的時候我們先在本地換到項目路徑下,用下面的命令把當前項目環境的軟件包信息和依賴軟件導出到requirements.txt文件裏。
pip freeze > requirements.txt
然後把項目源碼打包,上傳到服務器的網站路徑裏,解壓。
之後打開CMD切換到項目文件夾路徑,輸入下面命令,安裝項目所需要依賴和軟件包:
pip install -r requirements.txt
如果使用的是Mysql數據庫,請自行安裝Mysql和導入數據,這裏就不詳細介紹。
注意:項目所需要的庫和依賴軟件都安裝完成之後,請先使用下面命令運行一下項目,確保源碼能正常運行,之後再進行下一步。
python manage.py runserver
5、在項目根目錄裏新建一個web.config配置文件,放入以下內容:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="Python FastCGI"
path="*"
verb="*"
modules="FastCgiModule"
scriptProcessor="<Path to Python>\python.exe|<Path to Python>\lib\site-packages\wfastcgi.py"
resourceType="Unspecified"
requireAccess="Script"/>
</handlers>
</system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
<add key="PYTHONPATH" value="<Path to Django App>" />
<add key="DJANGO_SETTINGS_MODULE" value="<Django App>.settings" />
</appSettings>
</configuration>
留意:這裏面我標記的三個地方,我們需要修改。
1、替換爲我們之前我們啓動wfastcgi時複製的python和wfastcgi的路徑。
2、填寫我們的項目路徑。
3、填寫settings.py的位置。<django App>修改成我們的settings.py所在目錄的目錄名即可。
修改完畢,啓動IIS,在瀏覽器裏輸入http://127.0.0.1 就能訪問網站。
6、如果訪問IIS出現如下錯誤:
HTTP 錯誤 500.19 Internal Server Error
出現這樣的情況是因爲IIS7之後的版本都採用了更安全的 web.config 管理機制,默認情況下會鎖住配置項不允許更改。我們把它解鎖了就OK。
打開CMD,在裏面依次輸入下面兩個命令:
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules
#提示:如果使用上面的命令提示%windir%載入出錯,請把%windir% 修改爲 C:\windows
C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules
解除了鎖定之後,再訪問網站就能正常顯示了。
還有種情況:有時候訪問頁面,或者單獨訪問網站後臺出現400錯誤,這個時候可能是因爲沒有給網站權限的原因。我們打開IIS,找到網站,右鍵,編輯權限,給IIS用戶添加修改和寫入權限。就能正常訪問。
7、給靜態資源添加虛擬目錄
網站能訪問了,但我們的前端樣式顯示有問題。那是因爲我們沒有在IIS裏指定我們的靜態資源目錄,我們給它添加上虛擬目錄就能解決。
步驟:
1、添加虛擬目錄,在IIS找選中網站項目名,右鍵--添加虛擬路徑
添加虛擬目錄時,別名放與你settings裏設置的一致,比如'static',物理路徑就是靜態資源的實際目錄。
2、在static目錄裏新建一個web.config文件,然後寫入下面的內容:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<!-- this configuration overrides the FastCGI handler to let IIS serve the static files -->
<handlers>
<clear/>
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>
重啓IIS,訪問網站,前端就能正常顯示。
8、管理後臺樣式丟失解決
正常情況下,部署的時候管理後臺樣式是不能正常顯示的,我們需要收集這些樣式到項目裏去,才能正常顯示。
步驟:
1、在settings.py裏添加STATIC_ROOT配置指定收集路徑如:
#指定樣式收集目錄,路徑一般爲項目裏的static文件夾
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
#或
STATIC_ROOT = 'C:\python\mysite\static'
然後CMD下運行如下面命令,進行樣式採集:
python manage.py collectstatic
採集完成之後,刷新頁面。後臺樣式成功顯示。至此,部署結束。
錯誤收集:
-
出現如下截圖的錯誤大多是源碼不能正常運行的原因,先在服務器項目目錄裏運行下面的命令,能運行再進行下一步,不能運行,請先檢查源碼。
python manage.py runserver
如果能正常運行項目,請檢查一下Python安裝路徑,Python不要安裝在某個用戶的目錄下,這樣容易導致權限方面的問題。