真的很不想写博客,但是没办法,把 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 看发生了什么,再针对问题解决。
--------------------------------------------------------------------------------------------------------------
真麻烦。