赞
踩
本篇文章主要关于Django在Windows上利用Apache部署,如果你想通过IIS部署,推荐这篇文章在IIS服务器上部署django_django iis-CSDN博客,我之前尝试部署在IIS上,发现Django的定时任务失效了,上网查找了一番,普遍说法是被服务器回收了,经过了一番操作,还是不行,便放弃转向了Apache,话不多说,正文在下方。
目录
地址:Apache VS17 binaries and modules download
apache对Visual C++的版本是有要求的,如何看自己需要什么版本呢?如果你电脑里已经安装了Visual C++可以在设置-应用和功能里找到,看总体的大版本就可以了。
win+r打开输入cmd运行命令窗口,输入python
大家根据表格对应下载版本的VC++即可,例如我的是1912,对应15.5版本。
点击这里下载其他版本,
选择与自己对应的版本
选择64位版本,将这个压缩包下载完后,解压到你常用的位置,这个文件夹就是Apache服务器,这张图是从服务器截图下来的是vc14,问题不大。
去官网下载http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
根据自己的python版本下载即可
下载完成后,复制文件的名称,打开文件所在位置,在文件位置cmd 进入命令窗口,pip install 文件名
验证安装是否成功,获取mod_wsgi的配置信息(后续有用)
mod_wsgi-express module-config
如果你害怕把配置文件改坏掉的话,建议复制一个副本文件。打开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检查自己的配置文件有没有语法错误,这里警告我两个示例的文件目录不存在,问题不大。
网上有的网友不配置能启动,有的不能启动,我建议还是配置一下,如果安装了conda请不要配置。
打开命令行
python
import sys
print(sys.path)
如果安装了conda,配置环境变量后打开anaconda prompt会报错,不知道为什么,后续有机会更新
在bin目录下打开cmd输入httpd -k install -n "apache2.4" ,当然你也可以取自己想要的名字
此时电脑右下脚应该会有Apache的监控服务,如果没有,也可以手动打开上图中的ApacheMonitor.exe
这样就可以启动Apache服务了,请不要着急启动,看第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()
-
- # 如果你的项目在启动时需要运行一些语句,请写在本条注释以下
至此,所有的配置全部完成。
我在使用Apache部署项目的时候,因为我需要做一些后台任务,需要系统启动的时候就启动定时任务,而貌似Apache通过wsgi启动项目的时候会运行多个线程,导致定时任务被多次执行,我第一次使用的时候貌似执行了四次。可以参考这篇文章,通过分布式锁来解决定时任务的重复执行问题,主要看最后即可。Django+nginx+uwsgi +apscheduler任务重复执行问题_django apscheduler动态添加任务-CSDN博客
另外貌似Apache是通过监听端口来启动服务的,如果没有请求,定时任务并不会启动,所以我每次启动服务的时候都需要手动访问一次项目,定时任务才会启动,目前也没有找到好的方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。