Django项目windows部署教程,详细踩坑总结

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是通过监听端口来启动服务的,如果没有请求,定时任务并不会启动,所以我每次启动服务的时候都需要手动访问一次项目,定时任务才会启动,目前也没有找到好的方法。

posted @   冀未然  阅读(356)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示