Windows下django項目部署 通過Apache2.4+mod_wsgi

經過幾天踩坑,記錄在Windows10下通過Apache2.4部署Django項目的過程
運行環境:

     先說下環境,怎麼安裝倒是其次的,版本很重要,我是根據mod_wsgi的版本要求下載的各個版本(python,Apache2.4)

    mod_wsgi 下載地址://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

    下面這張圖說明python與Apache的版本:

    版本資訊:
    Apache2.4VC14 64bit
    Python 3.5.2-amd64
    Django 2.2 
    MySQL 8.0.19  

   Apache2.4安裝:
     在Apache官網上找到對應的安裝包
        下載Apache2.4 VC14 地址://www.apachelounge.com/download/vc14/
    打開httpd.conf文件(在Apache24/conf目錄下)
       Define SRVROOT "C:\web\Apache24"
       Listen 80
       ServerName www.example.com:80
       DocumentRoot "C:\web\Apache24\htdocs"
       <Directory "C:\web\Apache24\htdocs">
    具體如何安裝Apache不多說了,下面這幾條常用命令還是說明一下:
        httpd -k install -n   #安裝Apache服務
        net start/stop Apache2.4   #啟動停止Apache服務
        sc delete Apache2.4   #刪除Apache服務
        httpd -k uninstall   #卸載Apache

    python-3.5安裝:
        本文略
    Mysql-8.0.19安裝:
        本文略;但運行時mysql庫需配置好。

    下面具體講述mod_wsgi相關配置:

        在上述完成之後,Apache啟動訪問IP地址訪問出現 It WORKS! ,開始部署。
     在Django項目文件夾下建一個虛擬環境:

        pip install virtualenv   #下載virtualenv包
        virtualenv 1_env    #新建環境1_env
        activate         #須cd到\1_env\Scripts目錄下運行activate

      先將下載好的mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl複製到Scripts目錄
        pip install "c:\djangomode\1_env\mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl"  #通過pip安裝mod_wsgi

      如果安裝失敗檢測自己所下載對應的版本是否有問題,成功的話繼續往下走;

        mod_wsgi-express module-config   #在剛才的環境裡面運行命令,會得到兩條配置資訊,將資訊拷貝下來,後面有用
        兩條像這樣的配置資訊:
        LoadModule wsgi_module "c:/djangomode/1_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
        WSGIPythonHome "c:/djangomode/1_env"

      註:可能你們看過其他部落客輸出的是三條配置,不過不要緊,我們無需設置LoadFile "c:/python35/python35.dll

      Django項目setting.py修改:
        這裡先說一下原因,setting配置相對路徑資訊在移到Apache與mod_wsgi運行時,相對路徑會訪問不了,需要修改為絕對路徑。
      在我修改為絕對路徑時,運行Apache報了一個錯

      OSError: [Errno 22] Invalid argument: 'C:\\\\Djangomode\\templates\\\\500.html'\r 

       需要在文件路徑前加上 r"filepath"
       r"filepath":意思是指為了避免\xx是一個轉義字元而導致的錯誤,也就是說加上r之後,""里的就不再出現轉義字元,編程純的文件地址。

        TEMPLATES = [{
    'DIRS': [r'C:\Djangomode\templates']
   ]
    註:這裡只描述一處,其餘相對路徑也需改成絕對路徑並加上 r 。

    在項目正式上線時必須將DEBUG設為False:

        DEBUG = False

    可指定主機,若元素為'*',表示所有同一區域網內的網路均可被訪問:

        ALLOWED_HOSTS = ['*']
    配置Apache2.4的httpd.con文件:

        DocumentRoot "C:\Djangomode"   #Djangomode為項目根目錄
        <Directory "C:\Djangomode">


        在文件底部加上下面程式碼(需根據實際環境更改參數)

        ##--------------- Django項目部署配置 ---------------##

        LoadModule wsgi_module "c:/djangomode/1_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
        WSGIPythonHome "c:/djangomode/1_env"


        #指定項目的"wsgi.py"配置文件路徑
        WSGIScriptAlias / "C:\Djangomode\Djangomode\wsgi.py"

        #指定Django項目根目錄
        WSGIPythonPath "C:\Djangomode"
        <Directory "C:\Djangomode\Djangomode">
        <Files wsgi.py>
        Require all granted
        </Files>
        </Directory>

        #項目靜態文件地址
        Alias /static "C:\Djangomode\static"
        <Directory "C:\Djangomode\static">
        AllowOverride None
        Options None
        Require all granted
        </Directory>

        #項目上傳文件根目錄
        Alias /uploads "C:\Djangomode\uploads"
        <Directory "C:\Djangomode\uploads">
        AllowOverride None
        Options None
        Require all granted
        </Directory>
        
        修改完之後重啟Apache服務,Apache服務屬性會被修改,如下圖:

        在瀏覽器上輸入IP地址埠或主機域名訪問Django項目,在httpd.conf中配置的主機域名ServerName 
        etc/hosts需加入域名如:

        127.0.0.1 Djangomode   

        檢查ip地址或域名是否正常,在cmd窗口輸入ping如:
         ping www.baidu.com   #ping的通則正常

        訪問成功!祝賀自己,耶!