項目需求
項目中使用python作爲後端並且習慣使用IIS,所以順理成章的需要將項目發佈到IIS上。查看網上的許多部署指南,還是會有一些問題,功夫不負有心人,集百家之長還是解決了困難,所以記錄在此。
項目實現
- IIS安裝
既然部署到IIS上,那就必須要安裝好IIS。
控制面板–>程序–>啓用或關閉windows功能(將圖中圈住的內容全部勾選)
- 項目組成
運行項目驗證:python manage.py runserver 驗證沒有問題進入下一步 - 安裝wfastcgi模塊
pip install wfastcgi
將安裝好的wfastcgi.py文件拷貝到工程項目根目錄下。
如圖所示
- 網站配置
打開IIS,新建網站。
- 添加程序映射
選中你發佈的網站–>處理程序映射–>添加模塊映射
可執行文件是python.exe路徑|wfastcgi.py路徑
填寫完參數後選擇請求限制將對勾取消
- 進入FastCGI設置
點擊主頁
點擊添加應用程序
添加環境變量–>增加兩個鍵值對
Name: WSGI_HANDLER Value: django.core.wsgi.get_wsgi_application()
Name: DJANGO_SETTINGS_MODULE
Value:WaterEnvironentRiskManagement_PythonDB.settings(WaterEnvironentRiskManagement_PythonDB是自己的項目名稱)
項目根目錄下會自動生成web.config的文件。
其中文件內容如下,如果沒有可複製粘貼,但相應路徑內容要替換稱自己的
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
<add key="PYTHONPATH" value="%ROOTDIR%" />
<add key="DJANGO_SETTINGS_MODULE" value="WaterEnvironentRiskManagement_PythonDB.settings" />
</appSettings>
<system.webServer>
<handlers>
<add name="DjangoFastCgiModule" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\haizhengzheng\AppData\Local\Programs\Python\Python37\python.exe|C:\inetpub\wwwroot\WaterEnvironentRiskManagement_PythonDB\wfastcgi.py" resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
DJANGO_SETTINGS_MODULE 的 value 裏面 WaterEnvironentRiskManagement_PythonDB是項目的名字
DjangoFastCgiModule是在 IIS 配置時添加模塊映射的名字
C:\Users\haizhengzheng\AppData\Local\Programs\Python\Python37\python.exe|C:\inetpub\wwwroot\WaterEnvironentRiskManagement_PythonDB\wfastcgi.py
前面一截是python的路徑,後面一截是項目中wfastcgi.py的路徑,中間用豎線隔開
到此,沒有靜態文件的項目就已經部署好了。
真的部署好了嗎?
至少在我的項目中是運行不起來的,他還會報錯,比如是這樣的
解決方法來了!!!
將標識中的ApplicationPoolidentity改爲LocalSystem
到此,沒有靜態文件的項目才部署好。
- 修改setting.py文件中的ALLOWED_HOSTS
會出現報錯情況
將ALLOWED_HOSTS = []改爲ALLOWED_HOSTS = [’*’] - 配置靜態文件
1、在項目settings.py中添加三行代碼
STATIC_URL = ‘/static/’
STATICFILES_DIRS=[os.path.join(BASE_DIR,“dist/static”)] STATIC_ROOT =
os.path.join(BASE_DIR, ‘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/>
<!-- the configuration document write by Kahn.xiao -->
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>
3、收集靜態文件
命令行進入到項目中!!!是進入到項目中。
python manage.py collectstatic
發現又會報錯。。。尷尬。
一些靜態文件被拒絕訪問
所以這裏通過以管理員的方式打開cmd再執行代碼即可
這時項目中會生成static文件夾,此時的項目結構如下
此時通過IIS訪問網站即可了
效果展示