現在比較流行的是Nginx + Gunicorn 的方式部署 Django 項目,但本文采用的是小衆的Windows Server和IIS方式,其中須要一個Python包wfastcgi來將進入IIS的請求移交到Python應用程序進行處理。html
在 linux 上部署時,通常有兩種選擇。centos系統使用較多,新人能夠選擇有桌面環境的ubuntu系統。學生優惠9.9 元/月購買地址:阿里雲服務器學生專區、騰訊雲服務器學生專區。本文介紹的是Windows Server 2012 R2的部署。前端
阿里雲域名註冊地址:[ 域名註冊系統](https://wanwang.aliyun.com/domain/ " 阿里雲域名註冊系統"),根據需求購買便可python
域名解析前須要先將綁定到服務器:[綁定域名 ](https://help.aliyun.com/knowledge_detail/39881.html " "),隨後解析域名:[解析域名](https://help.aliyun.com/knowledge_detail/39903.html?spm=5176.2000002.0.0.43df132dmnCiMy " ")linux
如何登陸到Windows Server:騰訊雲登陸服實例web
如何安裝IIS:騰訊雲安裝配置 IIS,配置完成後瀏覽器訪問雲服務器的公網IP查看 IIS 服務是否正常運行。shell
如何安裝Python:[安裝Python教程](https://www.runoob.com/python3/python3-install.html " Windows下安裝Python"),注意勾選添加到環境變量,最後在命令提示符中輸入python並按Enter鍵,檢驗是否安裝成功。django
使用虛擬環境便於包管理,並且避免版本衝突,方便遷移項目。python3.3版中加入了venv模塊支持原生建立虛擬環境,並在3.4版本後加入了pip包,創立並激活虛擬環境後可直接使用,官方文檔。ubuntu
>python -m venv Blog_ven
或提早創建虛擬環境的文件夾C:\virtualenv\Blog_ven,指定文件夾建立虛擬環境windows
> cd C:\virtualenv\Blog_ven > python -m venv .
> cd C:\virtualenv\Blog_ven\Scripts #激活 > activate.bat #退出 > deactivate.bat
在激活虛擬環境以後,會在命令提示符前出現(Blog_ven),以後便可以進行pip包的安裝,不然安裝到的是全局環境下
爲確保咱們不會遇到pip安裝或安全問題,讓咱們升級更新Python的包安裝程序,在上面的命令提示符與虛擬環境激活下,運行如下命令:centos
python -m pip install –upgrade pip
> cd C:\virtualenv\Blog_ven1\ > pip freeze > requirements.txt
此時包依賴信息將保存在C:\virtualenv\Blog_ven1\requirements.txt文件中,注意在有些包安裝前須要依賴其餘包的須要手動調整一下順序。複製requirements.txt到C:\virtualenv\Blog_ven2中
進入目的服務器虛擬環境env:
>cd C:\virtualenv\Blog_ven2\ >pip install -r requirements.txt
pip就會自動從網上下載並安裝全部包,此時虛擬環境以及徹底複製到服務器,在虛擬環境激活狀態下,確保在服務器本地可運行django項目:
>cd C:\demo.eosones.com\Mybolg >python manage.py runserver 127.0.0.1:8000
爲了將django項目可以部署到IIS上須要安裝額外的一個Python包,激活虛擬環境狀態下:
>pip install wfastcgi
安裝完成後須要啓動wfastcgi
>wfastcgi-enable
這裏說明安裝成功,而且獲得虛擬環境python路徑及虛擬環境下wfastcgi的安裝路徑,以後要用到這兩個路徑。(如需配置多個django項目,多個項目的wfastcgi的安裝路徑需不用,即單獨項目單獨虛擬環境便可)
#已經在配置提交路徑「MACHINE/WEBROOT/APPHOST」向「MACHINE/WEBROOT/APPHOST」的「system.webServer/fastCgi」節應用了配置更改 " C:\virtualenv\Blog_ven\Scripts\python.exe|C:\virtualenv\Blog_ven\lib\site-packages\wfastcgi.py" can now be used as a FastCGI script processor
咱們在Django項目的根目錄下建立一個web.config的文件,裏面內容以下:(如需手動配置:手動配置教程,英語配置教程)
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor=" C:\virtualenv\Blog_ven\Scripts\python.exe|C:\virtualenv\Blog_ven\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="C:\demo.eosones.com\Mybolg" /> <add key="DJANGO_SETTINGS_MODULE" value="Mybolg.settings" /> </appSettings> </configuration>
這裏對照着本身的網站,修改三處地方替換便可
<add key="PYTHONPATH" value="">
這裏的value要定位到當前的項目根目錄(跟manage.py同目錄)<add key="DJANGO_SETTINGS_MODULE" value="" />
這裏寫入app的名字而後打開IIS管理器:打開「控制面板」在「管理工具」中打開「Internet Information Services(IIS)管理器」。選中左邊欄網站右鍵添加網站,物理地址選中項目地址
此時網站已經能夠訪問,但CSS等靜態文件沒有訪問到,首先對咱們的django項目進行靜態文件資源遷移,在項目的settings.py文件中添加:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
在項目根目錄下輸入以下命令
>python manage.py collectstatic
執行命令後會把所有用到的靜態文件複製到STATIC_ROOT這個目錄下,生產環境中還需設置 DEBUG = False,此時App中的 'django.contrib.staticfiles' 將會失效,出錯時前端再也不代碼等報錯信息。
而後咱們在static文件夾中添加一個web.config文件,remove name中的值必須與以前的web.config中的一致,文件內容以下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <remove name="Python FastCGI" /> </handlers> </system.webServer> </configuration>
此時已經配置完成,爲了可以經過域名訪問站點,項目的settings.py文件中添加ALLOWED_HOSTS = ['*'] 或者ALLOWED_HOSTS = [ '.example.com', # Allow domain and subdomains]
HTTP 錯誤 500.0 - Internal Server Error,c:\sites\myproject_env\scripts\python.exe - FastCGI 進程意外退出
ApplicationPoolIdentity
改成最高權限的LocalSystem
HTTP 404錯誤
配置錯誤:不能在此路徑中使用此配置節。若是在父級別上鎖定了該節,便會出現這種狀況。鎖定是默認設置的
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers