VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • Windows下django项目部署 通过Apache2.4+mod_wsgi

简述

(请阅读下面的资料,也许能帮到你)

  在这几天的部署过程中,遇到蛮多的问题,想记录当时部署的情况,帮助有需要的朋友。
  这里说一下其他的问题:

    我在之前测试过使用mod_wsgi-cp38 版本与Apache配合,发现django可以正常使用,但是使用中会出现不太稳定数据连接问题。

  使用Apache配置两个django项目在同一个服务里面(配置虚拟域名),使用相同的虚拟环境(mod_wsgi配置信息指向的环境位置),会造成数据连接问题,

  比如:在启动Apache服务时,两个项目的数据库连接,会出现随机连接其中一个项目的数据库,另一个项目就会使用一样的数据,在登陆网站的时候,数据就会串在一起。

  如果有朋友解决了这个问题,还请联系一下我。

django官网有做解释:
注:django官网地址   https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/

  由于环境变量是进程范围的,因此当您在同一进程中运行多个Django站点时,这将不起作用。这与mod_wsgi一起发生。

  为避免此问题,请对每个站点在自己的守护进程中使用mod_wsgi的守护程序模式,或通过在中强制执行来覆盖环境中的值。

  os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"wsgi.py
回到顶部

运行环境:

先说下我使用的环境,版本很重要,我是根据mod_wsgi的版本要求下载的各个版本(python,Apache2.4)

下载地址:mod_wsgi

下面这张图说明python与Apache的版本:

回到顶部

版本信息:

  Apache2.4VC14 64bit  

  Python 3.5.2-amd64  

  Django 2.2  #python3.5不支持django3.0以上版本  

  MySQL 8.0.19
回到顶部

Apache2.4安装:

在Apache官网上找到对应的安装包

下载地址:Apache2.4-VC14

打开httpd.conf文件(在Apache24/conf目录下)

  Define SRVROOT "C:\web\Apache24"
  Listen 80
  ServerName www.example.com:80
  DocumentRoot "C:\web\Apache24\htdocs"
  <Directory "C:\web\Apache24\htdocs"> 

具体如何安装Apache不多说了,下面这几条常用命令还是说明一下:

        httpd -k install -n   #安装Apache服务
        net start/stop Apache2.4   #启动停止Apache服务
        sc delete Apache2.4   #删除Apache服务
        httpd -k uninstall   #卸载Apache

python-3.5安装:
本文略
Mysql-8.0.19安装:
本文略;但运行时mysql库需配置好。

回到顶部

具体mod_wsgi相关配置:

在上述完成之后,Apache启动访问IP地址访问出现 It WORKS! ,开始部署。
在Django项目文件夹下建一个虚拟环境:

  pip install virtualenv   #下载virtualenv包
  virtualenv 1_env    #新建环境1_env
  activate         #须cd到\1_env\Scripts目录下运行activate

先将下载好的mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl复制到Scripts目录

  pip install "c:\djangomode\1_env\mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl"  #通过pip安装mod_wsgi

如果安装失败检测自己所下载对应的版本是否有问题,成功的话继续往下走;

  mod_wsgi-express module-config   #查看mod_wsgi模块的配置信息
回到顶部

查看mod-wsgi的配置信息:

  #后面Apache24的httpd.conf配置需要用到这两条信息
  #将这两条配置信息保存下来
  LoadModule wsgi_module "c:/djangomode/1_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
  WSGIPythonHome "c:/djangomode/1_env"

注:可能你们看过其他博主输出的是三条配置,不过不要紧,我们无需设置LoadFile "c:/python35/python35.dll

在运行Apache服务时遇到启动不了,查看Apache24/logs/error.log文档发现错误如下:

  Fatal Python error: Py_Initialize: unable to load the file system codec
  LookupError: no codec search functions registered: can't find encoding

注;Python找不到它的modules目录,所以它当然也可以不加载encodings
解决方法修改windows环境变量配置:

  PYTHONPATH="C:\python35\DLLs;C:\python35\Lib;C:\python35\Lib\site-packages"  #路径之间用逗号;分开
  PYTHONHOME=C:\python35

注意,如果开发环境需要,您可能需要希望将任何其他库路径附加到PYTHONPATH中,但正确设置DLLs、Lib和site-packages是最重要的,也就是之前配置的python环境变量。

回到顶部

Django项目setting.py修改:

这里先说一下原因,setting配置相对路径信息在移到Apache与mod_wsgi运行时,相对路径会访问不了,需要修改为绝对路径。
在我修改为绝对路径时,运行Apache报了一个错

  OSError: [Errno 22] Invalid argument: 'C:\\\\Djangomode\\templates\\\\500.html'\r 

需要在文件路径前加上 r"filepath"

  r"filepath":意思是指为了避免\xx是一个转义字符而导致的错误,也就是说加上r之后,""里的就不再出现转义字符,编程纯的文件地址。
  #这里只描述一处,其余相对路径也需改成绝对路径并加上 r
  TEMPLATES = [{
    'DIRS': [r'C:\Djangomode\templates']
   ]
回到顶部

在项目正式上线时设置:

  DEBUG = False

可指定主机,若元素为'*',表示所有同一局域网内的网络均可被访问:

  ALLOWED_HOSTS = ['*']
回到顶部

配置Apache的httpd.conf文件:

  DocumentRoot "C:\Djangomode"   #Djangomode为项目根目录
  <Directory "C:\Djangomode">

在文件底部加上下面代码(需根据实际环境更改参数)

  ##--------------- Django项目部署配置 ---------------##

  LoadModule wsgi_module "c:/djangomode/1_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
  WSGIPythonHome "c:/djangomode/1_env"


  #指定项目的"wsgi.py"配置文件路径
  WSGIScriptAlias / "C:\Djangomode\Djangomode\wsgi.py"

  #指定Django项目根目录
  WSGIPythonPath "C:\Djangomode"
  <Directory "C:\Djangomode\Djangomode">
  <Files wsgi.py>
  Require all granted
  </Files>
  </Directory>

  #项目静态文件地址
  Alias /static "C:\Djangomode\static"
  <Directory "C:\Djangomode\static">
  AllowOverride None
  Options None
  Require all granted
  </Directory>

  #项目上传文件根目录
  Alias /uploads "C:\Djangomode\uploads"
  <Directory "C:\Djangomode\uploads">
  AllowOverride None
  Options None
  Require all granted
  </Directory>

修改完之后重启Apache服务,Apache服务属性会被修改,如下图:

在浏览器上输入IP地址端口或主机域名访问Django项目,在httpd.conf中配置的主机域名ServerName
C:\Windows\System32\drivers\etc需加入域名如:

  127.0.0.1 Djangomode   

检查ip地址或域名是否正常,在cmd窗口输入ping如:

  ping www.baidu.com   #ping的通则正常

访问成功!祝贺自己,耶!
后续会写一篇关于django使用channels实现websocket连接的文章。
欢迎大家留言

出处:https://www.cnblogs.com/mqlwyz/p/14086966.html


相关教程