【Django2.0学习笔记】38.用Apache+mod_wsgi部署

38、用Apache+mod_wsgi部署

1、web服务器怎么提供服务

  • 浏览器 请求 web服务器,web服务器 响应 浏览器——http协议

  • web服务器 从 web服务器软件 接收请求,web服务器软件 响应 web服务器

  • web服务器软件 和 Django程序 之间怎么交互?——WSGI(Web Server Gateway Interface)规范

  • Linux常用的web服务器软件:Apache、Nginx

  • Apache:

    • 模块多,功能强大
    • 内置了对PHP,Python,Perl和其他语言的支持
  • Nginx(Engine-x):

    • 轻量级,抗高并发,速度快
      在这里插入图片描述
      在这里插入图片描述

我们这节课主要是讲Apache

2、使用Apache+mod_wsgi部署

  • 1)安装Apache
  • 2)编译mod_wsgi
  • 3)配置
    在这里插入图片描述

打开git,连接得后台ssh root@47.113.107.189
输入apt-get install apache2,安装Apache,
输入apt-get install libapache2-mod-wsgi-py3,安装mod_wsgi,
输入cd /etc/apache2/,进入Apache这个目录,这里面有两个文件夹mods-enabledmods-available,这两个是一组的,mods-available代表可用的模块。mods-enabled是已启用的模块
启用和不启用模块有相应的命令:a2enmod是启用模块,a2dismod是不启用模块(输入a2,按Tab键可以查找以a2开头的命令)
在这里插入图片描述
我们可以看一下mods-available文件夹下面有哪些文件,输入ls mods-available/,可以看到这里面有很多的模块,像代理模块、wsgi模块等等。
在这里插入图片描述
这里面的 wsgi.confwsgi.load 就是我们使用到的mod_wsgi,不过用这个去安装部署的话,就会有一个问题,它的有些配置和解析不是特别正确,经常会解析不了,而且是按照官网上面去写配置的话也不行。这里主要的原因是,它里面有个文件版本比较旧,它安装完成之后,会在后面多了个mod.wsgi.so这个文件,在这个目录下ls /usr/lib/apache2/modules
在这里插入图片描述
这里我们要安装一个比较新的版本,就要采用一个编译安装,在django官网也有提到https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/modwsgi/
https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们先安装一下Apache对应的软件包apt-get install apache2-dev(这里的python相应的dev软件包我们前面已经安装过了)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
复制链接之后,在git里下载wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.7.1.tar.gz,然后按照上面的命令解压缩tar xvfz 4.7.1.tar.gz
在这里插入图片描述
我们可以查看下
在这里插入图片描述
接着配置源代码和构建代码源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样,这个mod_wsgi.so文件就替换了刚刚讲到的那个旧版本的 mod_wsgi.so,我们可以根据这个目录查看一下ls /usr/lib/apache2/modules
在这里插入图片描述

那现在我们就回到Apache相关配置目录下cd /etc/apache2/,我们先查看下有没有启用wsgi(输入ls mods-enabled/查看mod-enabled这个文件目录,如果有wsgi,说明已经启用了),或者输入a2enmod wsgi,wsgi没有启用的话,就会直接启用
在这里插入图片描述

那现在,我们需要的文件都安装好了,我们就要开始来配置apache,让我们django这个网站可以使用

这里我们再确认一些东西。
我们网站是放在home目录下的,而我们虚拟环境也是放在home文件夹下的。

那现在我们要进入到sites-available这个文件夹里面,这个文件夹和sites-enabled文件夹是一组的,这两个是站点的配置。现在我们需要配置一个站点,让可用的站点到这列表里面。
输入cd sites-available进入这个文件夹,查看可知,有两个文件。
我们输入vim mysite.conf(这个名称可以自己取),插入一个节点,虚拟的host,任何的*:端口80。这里要配置一些东西,django官方文档里面也有说明

其中WSGIScriptAlias / /home/mysite/mysite/wsgi.py
第一个参数可以理解为我们访问网站时是以哪个目录为开始的,这里我们一般打开网站就是的django的网站,就是从 / 根目录开始的;
第二个参数就是wsgi所在的路径(就是/home/mysite/mysite项目目录下的wsgi.py所在的路径,这个文件就是可以给wsgi官方使用的文件)
在这里插入图片描述
如果没有虚拟环境,我们这个配置到这里就写好了。但是现在我们使用虚拟环境,就需要配置一些其他的东西。官方文档也有说明
在这里插入图片描述
其中

WSGIDaemonProcess mysite python-home=/home/mysite_env python-path=/home/mysite
WSGIProcessGroup mysite

需要三个参数。第一个参数是名称,我们可以随意取一个;第二个参数python-home即虚拟环境所在的目录,第三个参数python-path是我们项目所在的目录
在这里插入图片描述
在这里插入图片描述
配置mysite.conf文件如下:
在这里插入图片描述

<VirtualHost *:80>
    WSGIDaemonProcess mysite python-home=/home/mysite_env python-path=/home/mysite
    WSGIProcessGroup mysite
    WSGIScriptAlias / /home/mysite/mysite/wsgi.py
    <Directory /home/mysite/mysite>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

</VirtualHost>

至此,这个站点配置就写完了,我们保存退出。

接着我们启用一下这个站点,输入a2ensite mysite.conf(a2指的是apache2,a2ensite是启用站点,a2dissite是关闭站点),出现提示“Enabling site mysite.To activate the new configuration, you need to run:systemctl reload apache2”,需要重启apache这个服务。在重启之前,我们先查看一下是否没有关掉,输入cd site-enabled,然后ls查看,可以看到它启动了这两个服务,那么我们要把它自身的站点关闭掉,输入a2dissite 000-default.conf
在这里插入图片描述
那现在我们再重启Apache服务,restart之前,我们可以输入apache2ctl configtest,查看一下配置是否有问题,显示OK,没问题的话,我们就可以输入apache2ctl restart,重启apache服务
在这里插入图片描述
启动之后我们可以访问一下47.113.107.189(我们服务器的公网ip地址),可以看到能打开这个博客网站
在这里插入图片描述

但可以看到样式都是比较简单的,因为我们没有开放静态文件夹让它可以访问。现在我们开放一下静态目录和开放上传文件夹
在这里插入图片描述
输入vim mysite.conf,编辑mysite.conf这个文件
Alias 设置一个别称,即:访问/static/,会指向/home/mysite/static/这个目录;
在这里插入图片描述

<VirtualHost *:80>
    WSGIDaemonProcess mysite python-home=/home/mysite_env python-path=/home/mysite
    WSGIProcessGroup mysite
    WSGIScriptAlias / /home/mysite/mysite/wsgi.py
    <Directory /home/mysite/mysite>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    # 开放静态目录
    Alias /static/ /home/mysite/static/
    <Directory /home/mysite/static>
        Require all granted
    </Directory>

    # 开放上传文件夹
    Alias /media/ /home/mysite/media/
    <Directory /home/mysite/media>
        Require all granted
    </Directory>

</VirtualHost>

保存退出。
这里如果我们直接刷新网站页面是看不见更新的,这里我们改了Apache的配置,改配置后,我们需要重启这个服务,输入apache2ctl restart,然后再刷新页面,成功。
在这里插入图片描述

(这里如果我们发现看不到任何改变,如果发现不了哪里出了错误,这里我们还可以查看一个错误日志文件/var/log/apache2/error.log,这个文件是专门存放Apache如果有什么问题及错误的一个地方,我们输入cat /var/log/apache2/error.log

但我们发现还有一些问题,比如页码没有居中显示、访问admin后台也有问题
在这里插入图片描述
在这里插入图片描述

因为这些静态文件没有收集到一个文件夹,都分散到其他地方,我们只是指定到一个公共的目录,而其他那些文件没有被访问得到,那这里我们要先把这些文件收集起来。
输入cd /home/mysite 进入到项目里面, 输入vim mysite/settings.py 编辑settings.py文件,新增一行代码STATIC_ROOT = os.path.join(BASE_DIR, 'static_collected')
由于这个settings.py文件没有在github上所包含的文件里,所以这里直接编辑是没有问题的,但一般我们最好是不要在这个服务器上面改东西,而是在本地改好之后 上传给服务器
在这里插入图片描述

修改完成后,保存退出,
然后再输入source /home/mysite_env/bin/activate启动虚拟环境,
再输入python3.8 manage.py collectstatic收集静态文件,ls查看可以看到多了一个static_collected文件夹
在这里插入图片描述
在这里插入图片描述

然后我们要对应的重新改一下apache的配置文件vim /etc/apache/sites-available/mysite.conf,修改mysite.conf如下:
在这里插入图片描述
然后apache2ctl restart重启下服务,刷新页面,成功

在这里插入图片描述
在这里插入图片描述
【日期归档为0解决方法:home目录下输入命令:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql,再刷新网页内即可,(未测验)】

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值