Django项目windows部署教程,详细踩坑总结
本篇文章主要关于Django在Windows上利用Apache部署,如果你想通过IIS部署,推荐这篇文章在IIS服务器上部署django_django iis-CSDN博客,我之前尝试部署在IIS上,发现Django的定时任务失效了,上网查找了一番,普遍说法是被服务器回收了,经过了一番操作,还是不行,便放弃转向了Apache,话不多说,正文在下方。
原文链接:https://blog.csdn.net/weixin_48749340/article/details/134993384
1.Apache安装
地址:Apache VS17 binaries and modules download
apache对Visual C++的版本是有要求的,如何看自己需要什么版本呢?如果你电脑里已经安装了Visual C++可以在设置-应用和功能里找到,看总体的大版本就可以了。
1.1 VC++版本
win+r打开输入cmd运行命令窗口,输入python
大家根据表格对应下载版本的VC++即可,例如我的是1912,对应15.5版本。
1.2 安装Apache
点击这里下载其他版本,
选择与自己对应的版本
选择64位版本,将这个压缩包下载完后,解压到你常用的位置,这个文件夹就是Apache服务器,这张图是从服务器截图下来的是vc14,问题不大。
1.3 安装mod_wsgi
去官网下载 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
根据自己的python版本下载即可
下载完成后,复制文件的名称,打开文件所在位置,在文件位置cmd 进入命令窗口,pip install 文件名
验证安装是否成功,获取mod_wsgi的配置信息(后续有用)
mod_wsgi-express module-config
1.4 配置Apache(多端口,启动多个服务)
如果你害怕把配置文件改坏掉的话,建议复制一个副本文件。打开httpd.conf,编辑它。在网上看到的基本都是启动单个服务,如果是要启动多个服务的话需要用到虚拟端口配置文件,所以我们直接用启动多个端口的方式一劳永逸。
在配置文件最后加入mod_wsgi的配置信息,即上文通过mod_wsgi-express module-config得到的
LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python38/python38.dll"
LoadModule wsgi_module "C:/Users/Administrator/AppData/Local/Programs/Python/Python38/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd"
WSGIPythonHome "C:/Users/Administrator/AppData/Local/Programs/Python/Python38"
再在末尾加上这几句话,Listen 后面跟你想启动的服务的端口,自己定义即可,我想启动两个就监听两个端口,不想启动服务注释掉即可。
LoadModule wsgi_module modules/mod_wsgi.so
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
#Listen 8001
Listen 8002
ok,我们再配置虚拟端口的配置文件,打开extra文件夹下的虚拟端口配置文件
直接拉到底,复制一个虚拟配置,自己改写。
<VirtualHost *:8002>
# 服务名称填自己的IP
ServerName 127.0.0.1:8002
# 如果django中使用了pandas、numpy等科学包,需要加上这个,不然django是无法访问的
# 因为这些科学包在Python子解释器中无法工作。该指令将强制使用主解释器上下文
WSGIApplicationGroup %{GLOBAL}
#wsgi的路径,一般在django主项目文件夹下
WSGIScriptAlias / C:\www\project\project\wsgi.py
#项目的路径
<Directory C:\www\project\project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
#静态文件的路径,有可以配置,没有可以不用
Alias /static C:\www\project\static
<Directory C:\www\project\static>
Require all granted
</Directory>
#根目录
DocumentRoot "C:\www\project"
<Directory "C:\www\project">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# 错误日志
ErrorLog "logs/project-error.log"
CustomLog "logs/project-access.log" common
</virtualHost>
到目前为止,apache的配置文件就写完了,可以在bin目录下打开cmd,输入httpd -t检查自己的配置文件有没有语法错误,这里警告我两个示例的文件目录不存在,问题不大。
2.启动Apache
2.1配置python环境变量
网上有的网友不配置能启动,有的不能启动,我建议还是配置一下,如果安装了conda请不要配置。
打开命令行
python
import sys
print(sys.path)
如果安装了conda,配置环境变量后打开anaconda prompt会报错,不知道为什么,后续有机会更新
2.2 启动Apache服务
在bin目录下打开cmd输入httpd -k install -n "apache2.4"
,当然你也可以取自己想要的名字
此时电脑右下脚应该会有Apache的监控服务,如果没有,也可以手动打开上图中的ApacheMonitor.exe
这样就可以启动Apache服务了,请不要着急启动,看第3点注意事项。
3.注意事项(重要)
1.确保你的django sttings.py
DEBUG = False
ALLOWED_HOSTS = ['*']
2.确保你的服务器或电脑开放了对应的端口,保证正常访问
3.配置你项目的wsgi.py文件
不同项目的环境通常不同,所以我们通常使用虚拟环境,使用虚拟环境请写虚拟环境的python包文件夹,不是虚拟环境同样写下自己python包的位置即可。再设置项目的配置文件。
import os, sys
from django.core.wsgi import get_wsgi_application
virtualenv_dir = r'C:\www\project\venv\Lib\site-packages' # 虚拟环境python包文件夹
sys.path.insert(0, virtualenv_dir) # 加入导包路径
# 项目所在文件夹,python解释器才知道在哪里运行项目
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, PROJECT_DIR) # 项目加入导包路径
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') # 将project.settings改成自己的配置名称
application = get_wsgi_application()
# 如果你的项目在启动时需要运行一些语句,请写在本条注释以下
至此,所有的配置全部完成。
4.杂谈
我在使用Apache部署项目的时候,因为我需要做一些后台任务,需要系统启动的时候就启动定时任务,而貌似Apache通过wsgi启动项目的时候会运行多个线程,导致定时任务被多次执行,我第一次使用的时候貌似执行了四次。可以参考这篇文章,通过分布式锁来解决定时任务的重复执行问题,主要看最后即可。Django+nginx+uwsgi +apscheduler任务重复执行问题_django apscheduler动态添加任务-CSDN博客
另外貌似Apache是通过监听端口来启动服务的,如果没有请求,定时任务并不会启动,所以我每次启动服务的时候都需要手动访问一次项目,定时任务才会启动,目前也没有找到好的方法。
标签:教程,启动,windows,wsgi,Django,project,Apache,django,mod From: https://www.cnblogs.com/HeroZhang/p/18108385