Django在CentOS上配置Apache+mod_wsgi

译者:anxin
日期:2018-01-07

Django在产品环境中不能使用Django自带的轻量级的Web服务器作为服务器,需要使用专门的Web服务器(Apache或者Nginx)来部署Django项目。本文介绍在CentOS下配置Apache和mod_wsgi环境。

在CentOS配置Django使用Apache作为服务器,首先要在CentOS上安装Apache服务器,然后安装Apache的mod_wsgi模块,mod_wsgi是Apache加载Python语言的扩展模块。

安装Apache的Python扩展模块mod_wsgi

1)如果你使用CentOS基本源安装的Apache,那么mod_wsgi模块的软件包名称为mod_wsgi

sudo yum install mod_wsgi

1)如果你使用IUS软件源安装的Apache,那么mod_wsgi模块的软件包名称为*u-mod_wsgi*可以是python35,python36等):

sudo yum install python36u-mod_wsgi

2)如果你使用SCL软件源安装的Apache,那么mod_wsgi模块的软件包名称为*-mod_wsgi*可以是python33,rh-python34,rh-python35等):

sudo yum install rh-python35-mod_wsgi

配置Apache运行Django项目

Django是由Python语言编写的,Apache使用mod_wsgi模块加载Django项目的方式有两种:

  • 作为Apache的模块,把Django加载进Apache服务器运行
  • 以单独的服务进程运行Django项目

本教程以/var/www/djangosite 项目为例,详细查看使用Django创建项目

作为Apache的模块,加载进Apache服务器运行

在安装完成mod_wsgi模块之后,为Django项目配置一个Apache虚拟机,在Apache虚拟机中添加如下代码:

<VirtualHost *:8080>
    WSGIScriptAlias / /var/www/djangosite/djangosite/wsgi.py
    WSGIPythonHome /path/to/venv
    WSGIPythonPath /var/www/djangosite

    <Directory /var/www/djangosite/djangosite>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

命令解释:

  • WSGIScriptAlias:指向项目的wsgi.py文件,此文件会引导项目执行
  • WSGIPythonHome:指向python虚拟环境的目录(如果使用Python虚拟环境),如使用命令python -m venv /usr/local/python创建Pyton虚拟环境,那么WSGIPythonHome设置为WSGIPythonHome /usr/local/python。更多信息查看:Python3 PYTHONHOME 环境变量
  • WSGIPythonPath:指向Django项目的外层目录,即外层的djangosite目录,同时如果没有使用Python虚拟环境,添加指向Django包所在的Python安装环境,如CentOS7的/usr/lib64/python2.7/site-packages文件夹,形式为:WSGIPythonPath /var/www/djangosite:/usr/lib64/python2.7/site-packages。更多信息查看:Python3 PYTHONPATH 环境变量

以单独的服务进程运行(daemon mode)

服务进程模式是Django推荐使用的模式。它首先创建服务进程,然后使用此进程处理Django请求。 Daemon模式需要使用指令WSGIDaemonProcessWSGIProcessGroup

Django项目使用Python虚拟环境的示例如下:

<VirtualHost *:8080>
    WSGIDaemonProcess djangosite.com processes=2 threads=10 python-home=/usr/local/python  python-path=/var/www/djangosite
    WSGIProcessGroup djangosite.com
    WSGIScriptAlias / /var/www/djangosite/djangosite/wsgi.py

    <Directory /var/www/djangosite/djangosite>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

指令解释:

  • WSGIDaemonProcess:设置Daemon的进程如上,第一个参数为进程名,第二个参数进程的个数,第三个参数每个进程的线程数,第四个参数指向Python虚拟环境(如果未使用虚拟环境此项不设置),第五个参数指向Django项目外层目录(如果未使用Python虚拟环境,添加上Django所在的Python安装目录路径如下:python-path=/var/www/djangosite:/usr/lib64/python2.7/site-packages)
  • WSGIProcessGroup:设置进程组的名字
  • WSGIScriptAlias:指向项目的wsgi.py文件,此文件会引导项目执行

配置服务器处理静态文件请求

Django默认不包含服务静态文件,当用户请求文件时,Django无法处理请求,需要Web服务器来处理文件请求。在Apache中使用Alias把URL映射到文件系统的条特定文件。

Django项目需要映射的文件包括:robots.txt,favicon.ico和其他你需要映射的文件。需要映射的文件夹有:静态文件夹/static,和媒体文件夹/media,具体为在Django虚拟机中添加如下配置:

Alias /robots.txt /var/www/djangosite/static/robots.txt
Alias /favicon.ico /var/www/djangosite/static/favicon.ico

Alias /media/ /var/www/djangosite/media/
Alias /static/ /var/www/djangosite/static/

<Directory /var/www/djangosite/static>
Require all granted
</Directory>

<Directory /var/www/djangosite/media>
Require all granted
</Directory>

注:如果你要往这些文件夹上传文件,需要对此文件夹具有写权限。

本文链接:/tutorial/django/django-peizhi-centos-apache-mod_wsgi

本文版权归知站所有,未经站长同意不得转载,谢谢尊重作者劳动成果!