Windows下Django部署,使用Apache+mod_wsgi
部署环境
Python 3.7
Django 2.1.7
window10 64位
Apache下载与配置
官网下载
Apache官网下载页面
找到对应版本下载
解压与修改
对下载后的httpd-2.4.41-win64-VS16.zip文件解压
进入Apache24\conf目录下,对文件httpd.conf进行修改(此处推荐使用Notepad++编译器)。
修改的具体内容
将第37行的 Define SRVROOT 修改为目录路径,作者的路径为:“C:\Apache\httpd-2.4.41-win64-VS16\Apache24”。(可参考)保存并退出
返回bin目录
打开文件httpd.exe
运行apache
当弹出的黑窗口出现AH00558: httpd.exe: Could not reliably determine the server’s fully qualified domain name, using fe80::bcbf:15f3:42ea:db3b. Set the ‘ServerName’ directive globally to suppress this message的字样时,表示启动成功。
如果出现闪退的情况
出现闪退,在当前位置启动cmd,在cmd中启动httpd.exe,看报错信息。
当遇到(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次 443的问题
作者这里遇到上述的问题,说明端口443被占用,此时进入C:\Apache\httpd-2.4.41-win64-VS16\Apache24\conf\extra文件夹,选择httpd-ssl.conf文件。
将端口号由443改为442(或其他端口),然后再次访问。
网页测试
打开网页,输入127.0.0.1,或localhost,或ipv4的地址,当网页出现It’s Work!时表示启动成功。(我这里是对默认的网页做了修改所以有下面的连接,可忽略)
配置Django
安装mod_wsgi
进入mod_wsgi下载界面,下载相应的版本。(由于页面过长,可以直接在页面ctrl+f,快速查找)ap24cv24指apache版本,比如apache24, cp37指python3.7,win_adm64指操作系统为64位。
下载之后,将下载的whl文件移动到Python的Script文件夹下
在窗口地址栏直接输入cmd,回车
运行下一行命令
pip3 install "mod_wsgi-4.5.24+ap24vc14-cp37-cp37m-win_amd64.whl"
然后在输入
mod_wsgi-express module-config
至此安装成功,将红框中的三行内容保存下来。
配置django项目
再次打开httpd.conf文件
在最末尾添加如下代码,实际情况根据自己的项目更改。
# 1.安装完成mod_wsgi后出现的三行代码,直接复制过来
LoadFile "c:/python/python37.dll"
LoadModule wsgi_module "c:/python/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/python"
# 2.设置工程项目的wsgi路径(后面会具体讲解django项目中的wsgi. py文件的位置)
WSGIScriptAlias / C:\代码\website\untitled5\until_wsgi\wsgi.py
# 3.设置工程项目的路径(即Django项目的路径)
WSGIPythonPath C:\代码\website\untitled5
# 4.设置wsgi路径(同第2条)
<Directory C:\代码\website\untitled5\until_wsgi>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# 设置静态文件路径
Alias /static C:\代码\website\untitled5\static
<Directory C:\代码\website\untitled5\static>
AllowOverride None
Options None
Require all granted
</Directory>
Django项目中的更改
在Django文件目录中创建until_wsgi(Python文件夹,名字无所谓),将主程序的settings.py文件复制一份到until_wsgi文件夹中,并创建一个新的py文件,起名wsgi.py,
此时获取wsgi.py的路径,即为上面的工程项目的wsgi路径。
wsgi.py文件中的更改
将下列代码复制到wsgi文件下,其中’until_wsgi.settings’,即为复制到until_wsgi文件下的settings
# 修改blog01/wsgi.py文件
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'until_wsgi.settings') # 修改为复制新的settings文件名
application = get_wsgi_application()
静态文件的设置
在Django项目中的settings.py文件最后加入如下代码:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Django收集静态文件命令:
python manage.py collectstatic
合并Apache与Django的端口
1.输入主机IP地址不能访问,请修改C:\Apache\httpd-2.4.41-win64-VS16\Apache24\confhttpd.conf文件
Listen 127.0.0.0:80为Listen 192.168.31.155:80。还是不行就将端口改为同Django一直的端口,作者这里为8000。
2.出现“Invalid HTTP_HOST header: ‘192.168.1.111:8000’. You may need to add ‘192.168.1.111’ to ALLOWED_HOSTS”错误请修改Django的setting文件中ALLOWED_HOSTS = [’*’]
3.写好后保存文件,关闭httpd.exe,再重新打开或回到服务器管理器,找到apache2.4重启服务(记住要重启服务)。
测试
最后当出现我们熟悉的Django界面是,说明配置成功