Django從零搭建我的博客 | 經過IIS部署騰訊雲Winsows服務器

原文章地址: EOSONES博客

現在比較流行的是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:騰訊雲安裝配置 IIS,配置完成後瀏覽器訪問雲服務器的公網IP查看 IIS 服務是否正常運行。shell

IIS運行成功

二、安裝Python

如何安裝Python:[安裝Python教程](https://www.runoob.com/python3/python3-install.html " Windows下安裝Python"),注意勾選添加到環境變量,最後在命令提示符中輸入python並按Enter鍵,檢驗是否安裝成功。django

三、配置虛擬環境

使用虛擬環境便於包管理,並且避免版本衝突,方便遷移項目。python3.3版中加入了venv模塊支持原生建立虛擬環境,並在3.4版本後加入了pip包,創立並激活虛擬環境後可直接使用,官方文檔ubuntu

  1. 建立虛擬環境
    以管理員身份運行cmd或power shell,在當前目錄建立虛擬環境(Blog_ven爲自定義的虛擬環境的名稱):
>python -m venv Blog_ven

或提早創建虛擬環境的文件夾C:\virtualenv\Blog_ven,指定文件夾建立虛擬環境windows

> cd C:\virtualenv\Blog_ven
> python -m venv .
  1. 激活虛擬環境
    在上面的命令提示符中,進入虛擬環境Scripts文件夾下
> cd C:\virtualenv\Blog_ven\Scripts
#激活
> activate.bat
#退出
> deactivate.bat

在激活虛擬環境以後,會在命令提示符前出現(Blog_ven),以後便可以進行pip包的安裝,不然安裝到的是全局環境下
爲確保咱們不會遇到pip安裝或安全問題,讓咱們升級更新Python的包安裝程序,在上面的命令提示符與虛擬環境激活下,運行如下命令:centos

python -m pip install –upgrade pip
  1. 遷移項目環境
    當須要將本地測試虛擬環境env轉移到另外一臺電腦好比服務器時,直接可將env1裏的文件所有複製到env2裏,雖簡單但涉及修改文件路徑。推薦使用requirements.txt方法遷移。
    進入本地原虛擬環境env1:
> 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

四、安裝wfastcgi模塊

爲了將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

五、配置IIS和django網站

咱們在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>

這裏對照着本身的網站,修改三處地方替換便可

  1. scriptProcessor用剛纔獲得的路徑代替
  2. <add key="PYTHONPATH" value="">這裏的value要定位到當前的項目根目錄(跟manage.py同目錄)
  3. <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 進程意外退出

  1. 注意路徑中是否含有中文路徑
  2. 測試中使用python虛擬環境包virtualenv時報錯,切換到python自帶的env後解決
  3. 在IIS管理器的應用池中,將默認標識ApplicationPoolIdentity改成最高權限的LocalSystem

HTTP 404錯誤

  1. 在IIS網站中添加處理程序映射的模塊映射設置將請求限值的映射選項卡的複選框取消勾選

配置錯誤:不能在此路徑中使用此配置節。若是在父級別上鎖定了該節,便會出現這種狀況。鎖定是默認設置的

  1. 由於 IIS 7 採用了更安全的 web.config 管理機制,默認狀況下會鎖住配置項不容許更改。管理員運行命令行 %windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
相關文章
相關標籤/搜索