当前位置:   article > 正文

Django项目windows部署教程,详细踩坑总结_windows系统部署django项目

windows系统部署django项目

本篇文章主要关于Django在Windows上利用Apache部署,如果你想通过IIS部署,推荐这篇文章在IIS服务器上部署django_django iis-CSDN博客,我之前尝试部署在IIS上,发现Django的定时任务失效了,上网查找了一番,普遍说法是被服务器回收了,经过了一番操作,还是不行,便放弃转向了Apache,话不多说,正文在下方。 

目录

1.Apache安装

1.1 VC++版本

1.2 安装Apache

1.3 安装mod_wsgi

1.4 配置Apache(多端口,启动多个服务)

2.启动Apache

2.1配置python环境变量

2.2 启动Apache服务

3.注意事项(重要)

4.杂谈


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得到的

  1. LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python38/python38.dll"
  2. LoadModule wsgi_module "C:/Users/Administrator/AppData/Local/Programs/Python/Python38/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd"
  3. WSGIPythonHome "C:/Users/Administrator/AppData/Local/Programs/Python/Python38"

再在末尾加上这几句话,Listen 后面跟你想启动的服务的端口,自己定义即可,我想启动两个就监听两个端口,不想启动服务注释掉即可。

  1. LoadModule wsgi_module modules/mod_wsgi.so
  2. SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
  3. #Listen 8001
  4. Listen 8002

ok,我们再配置虚拟端口的配置文件,打开extra文件夹下的虚拟端口配置文件

直接拉到底,复制一个虚拟配置,自己改写。

  1. <VirtualHost *:8002>
  2. # 服务名称填自己的IP
  3. ServerName 127.0.0.1:8002
  4. # 如果django中使用了pandas、numpy等科学包,需要加上这个,不然django是无法访问的
  5. # 因为这些科学包在Python子解释器中无法工作。该指令将强制使用主解释器上下文
  6. WSGIApplicationGroup %{GLOBAL}
  7. #wsgi的路径,一般在django主项目文件夹下
  8. WSGIScriptAlias / C:\www\project\project\wsgi.py
  9. #项目的路径
  10. <Directory C:\www\project\project>
  11. <Files wsgi.py>
  12. Require all granted
  13. </Files>
  14. </Directory>
  15. #静态文件的路径,有可以配置,没有可以不用
  16. Alias /static C:\www\project\static
  17. <Directory C:\www\project\static>
  18. Require all granted
  19. </Directory>
  20. #根目录
  21. DocumentRoot "C:\www\project"
  22. <Directory "C:\www\project">
  23. Options Indexes FollowSymLinks
  24. AllowOverride None
  25. Require all granted
  26. </Directory>
  27. # 错误日志
  28. ErrorLog "logs/project-error.log"
  29. CustomLog "logs/project-access.log" common
  30. </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 

  1. DEBUG = False
  2. ALLOWED_HOSTS = ['*']

2.确保你的服务器或电脑开放了对应的端口,保证正常访问

3.配置你项目的wsgi.py文件

不同项目的环境通常不同,所以我们通常使用虚拟环境,使用虚拟环境请写虚拟环境的python包文件夹,不是虚拟环境同样写下自己python包的位置即可。再设置项目的配置文件。

  1. import os, sys
  2. from django.core.wsgi import get_wsgi_application
  3. virtualenv_dir = r'C:\www\project\venv\Lib\site-packages' # 虚拟环境python包文件夹
  4. sys.path.insert(0, virtualenv_dir) # 加入导包路径
  5. # 项目所在文件夹,python解释器才知道在哪里运行项目
  6. PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  7. sys.path.insert(0, PROJECT_DIR) # 项目加入导包路径
  8. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') # 将project.settings改成自己的配置名称
  9. application = get_wsgi_application()
  10. # 如果你的项目在启动时需要运行一些语句,请写在本条注释以下

至此,所有的配置全部完成。

4.杂谈

我在使用Apache部署项目的时候,因为我需要做一些后台任务,需要系统启动的时候就启动定时任务,而貌似Apache通过wsgi启动项目的时候会运行多个线程,导致定时任务被多次执行,我第一次使用的时候貌似执行了四次。可以参考这篇文章,通过分布式锁来解决定时任务的重复执行问题,主要看最后即可。Django+nginx+uwsgi +apscheduler任务重复执行问题_django apscheduler动态添加任务-CSDN博客

 另外貌似Apache是通过监听端口来启动服务的,如果没有请求,定时任务并不会启动,所以我每次启动服务的时候都需要手动访问一次项目,定时任务才会启动,目前也没有找到好的方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/508318
推荐阅读
相关标签
  

闽ICP备14008679号