Windows下django項目部署 通過Apache2.4+mod_wsgi
- 2020 年 12 月 4 日
- 筆記
- python&django
經過幾天踩坑,記錄在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的通則正常
訪問成功!祝賀自己,耶!