真的很不想寫博客,但是沒辦法,把 Django 項目部署到 Apache 實在是太坑了,無腦看教程跟着做根本成功不了,最後扣錯誤日誌扣出來答案了,所以時隔多年,再寫一篇博客,希望能幫助到其他人。
1. 下載 Apache
確定電腦上的 Python 是 64 位還是 32 位,還有 Python 的版本,記一下。
然後去 https://www.apachehaus.com/cgi-bin/download.plx 下載對應位數的 Apache
解壓
2. 修改 Apache 配置
配置文件在 \Apache24\conf\httpd.conf
在大約 Line 63,有一行 Define SRVROOT "D:\Apache_x86\Apache24" 把冒號裏的路徑改成你的 Apache 路徑
在大約 Line 67,有一行 Listen 80 把端口號改成你想要的端口號
在大約 Line 233,有一行 ServerName localhost:80 把端口號改成你想要的端口號
3. 測試 Apache
啓動 \Apache24\bin\httpd.exe
瀏覽器查看 localhost:端口號 有 Apache 的測試頁面出現說明 Apache 安裝成功了
4. 下載 mod_wsgi
在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 裏找和 Python 版本以及位數對應的 mod_wsgi.whl
例如 mod_wsgi‑4.7.1‑cp37‑cp37m‑win32.whl 裏的 cp37 指的是 Python 3.7,win32 指的是 32 位
5. 配置 mod_wsgi
把下載好的 .whl 放到 Python 安裝目錄的 \Scripts 裏,然後在這個目錄下打開 cmd, 輸入 pip install ".whl包名",注意一定要用雙引號,我也不知道爲什麼用單引號就錯了,奇葩。
提示成功之後能看到 \Scripts 裏出現了 mod_wsgi-express.exe ,再輸入 mod_wsgi-express module-config
會輸出三行信息,類似這樣的
LoadFile "d:/python/python37-32/python37.dll"
LoadModule wsgi_module "d:/python/python37-32/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win32.pyd"
WSGIPythonHome "d:/python/python37-32"
把這三行信息粘貼到 Apache 的配置文件裏 \Apache24\conf\httpd.conf
6. 配置 Django 項目的 settings.py
把 ALLOWED_HOSTS = ['*'] 添加上自己的 IP,localhost,127.0.0.1,或者直接配成 *
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['E:/DataAssetManage/dataassetFront/DataAsset/dist'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
確認一下
'DIRS': ['E:/DataAssetManage/dataassetFront/DataAsset/dist']
部分是不是絕對路徑,如果不是的話,改成絕對路徑
7. 配置 Django 項目的 wsgi.py
在與項目同名的文件夾下有一個 wsgi.py
如果它裏面的內容類似這樣,就不用改
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dataasset.settings')
application = get_wsgi_application()
8. 繼續配置 Apache 配置文檔 \Apache24\conf\httpd.conf
在文檔後部添加
#指定myweb項目的wsgi.py配置文件路徑
WSGIScriptAlias / E:/DataAssetManage/dataasset/dataasset/wsgi.py
#指定項目路徑
WSGIPythonPath E:/DataAssetManage/dataasset
<Directory E:/DataAssetManage/dataasset>
Options FollowSymlinks
AllowOverride none
Require all granted
</Directory>
#指定前端靜態文件
Alias /static/ E:/DataAssetManage/DataAssetFront/DataAsset/dist/static/
<Directory E:/DataAssetManage/DataAssetFront/DataAsset/dist/static/>
AllowOverride None
Options None
Require all granted
</Directory>
目錄部分換成自己的 Django 項目目錄
切記靜態文件的目錄,後面一定要加 / ,否則會出錯。
9. 測試
啓動 \Apache24\bin\httpd.exe
瀏覽器查看 localhost:端口號 有你熟悉的頁面出現就說明成功了
如果沒有,去 Apache 的錯誤日誌 \Apache24\logs\error.log 看發生了什麼,再針對問題解決。
--------------------------------------------------------------------------------------------------------------
真麻煩。