如何使用mod_wsgi的和Apache与Debian的VPS一个的virtualenv Python环境运行的Django

介绍

使用Django应用程序和Python应用程序通常是一个复杂的问题,许多工具正在使用。有多种方式实现相同的目标,通常没有单一的方式来做事情。 在专用服务器上将Django应用程序部署到Web的最流行的方法之一是使用与Gunicorn配对的Nginx。一个伟大的方式做到这一点已经得到了深入描述 这篇文章 。然而,这是一个相当普遍的情况下,托管Django应用程序与使用Apache服务的现有网站。我们将尽力覆盖实现这一特定目标的快速路线。但请注意,这不是Django和Apache配对的确切指南,并且有配置方面没有在这里涵盖。 本文将做出几个假设:
  • 您已经使用Debian 7.0或更高版本设置了您的Droplet。不同的Linux发行版之间有许多区别;因此为了清楚起见,我们将重点放在Debian服务器上。
  • 您至少有点熟悉常用的Python的工具,如PIP封装经理的virtualenv制作虚拟环境。 这些工具在奇妙的解释这篇文章
  • 您至少对Django项目结构有些熟悉,因为本文不打算通过使用和配置Django本身。
  • 您熟悉基本的Apache管理,因为本教程将仅介绍服务器本身的简单安装以及将Django与Apache配对所需的配置更改。

先决条件

在安装新软件包之前,最好更新系统软件包和软件包索引。要做到这一点:
apt-get update
apt-get upgrade

安装Apache

由于本文的重点是使用 Apache服务的应用程序,服务器本身是必要的。要安装必需的包执行:
apt-get install apache2
安装完后Apache将已经运行。您可以通过打开Web浏览器并将其指向服务器IP地址来检查Apache Web服务器是否已正确设置。你应该可以看到一个简单的 它可以在屏幕上 页。

安装pip和virtualenv

要开始使用Python和 Django的一个网络服务器 ,PIPvirtualenv中工作,必须首先安装。 Pip是便于安装Python软件包,如 Django的Python包管理器,而 的virtualenv使得可以创建在Python应用程序独立的虚拟环境顺序分离不同应用程序所需的库,避免它们之间的版本冲突。 要做到这一点:
apt-get install python-pip python-virtualenv
此命令将安装 PIP的virtualenv从Debian软件包库。 您可以验证这两种工具都通过运行这些安装正确 --version开关。
root@django:~# virtualenv --version
1.7.1.2
root@django:~# pip --version
pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
root@django:~#

使用virtualenv创建虚拟环境

Apache的安装 /var/www自动创建的目录中,默认的Web服务器根目录设置。 我们将会把我们的新 Django应用程序有其所有的依赖关系。 让我们创建一个新的目录名为 sampleapp该目录内,并输入新的目录:
cd /var/www
mkdir sampleapp
cd sampleapp
那么,让我们用创建新的虚拟环境 virtualenv 。 一个Python的虚拟环境基本上是在Python解释器和本地实例目录 pip所在。 本地实例 pip安装虚拟环境中的所有软件包。 这样,没有安装的软件包污染全球Python安装,也没有在运行 的Django的两个不同版本或任何其他库两个应用程序一个假设的情况不包版本冲突的可能性。 要创建新的虚拟环境,请输入:
virtualenv env
其中, env是虚拟环境中的名字-它可以是任何其他文字。此命令的输出应如下所示:
root@django:/var/www/sampleapp# virtualenv env
New python executable in env/bin/python
Installing distribute.............................................................................................................................................................................................done.
Installing pip...............done.
root@django:/var/www/sampleapp#
虚拟环境现在已准备就绪,可以以两种不同的方式使用。 一种方法是直接使用虚拟环境解释器运行命令。用这种方法,有必要总是记住以执行正确的解释或 pip实例,因为是运行在全系统之一的可能性。
root@django:/var/www/sampleapp# env/bin/pip --version
pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
root@django:/var/www/sampleapp# env/bin/python --version
Python 2.7.3
root@django:/var/www/sampleapp#
另一种方法是,首先 激活环境下,用
source env/bin/activate
环境名称将被添加到命令行
root@django:/var/www/sampleapp# source env/bin/activate
(env)root@django:/var/www/sampleapp#
并且所有执行的命令将使用本地虚拟环境版本
(env)root@django:/var/www/sampleapp# pip --version
pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
(env)root@django:/var/www/sampleapp# python --version
Python 2.7.3
(env)root@django:/var/www/sampleapp#
这样更容易工作;然而,有必要 解除对环境的工作是使用以下命令做后
deactivate
它会返回shell正常
(env)root@django:/var/www/sampleapp# deactivate
root@django:/var/www/sampleapp#
刚创建的环境将被用来存储所有必要的依赖关系,包括 Django和相关的库。 它也将 Apachemod_wsgi的稍后用于投放使用正确的依赖应用。

在虚拟环境中安装Django

接下来必须的步骤是安装 Django的虚拟环境中。让我们在没有事先激活环境的情况下这样做:
env/bin/pip install django
执行此命令后显示的最后一条消息应如下所示
Successfully installed django
Cleaning up...
Django是现在安装的虚拟环境中,而不是从全系统的Python安装中。 您可以通过导入验证行为 django同时使用口译模块
root@django:/var/www/sampleapp# python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named django
>>> exit()
使用系统范围的解释器导入失败,而
root@django:/var/www/sampleapp# env/bin/python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>
在虚拟环境中执行的操作成功。

创建第一个Django项目

要创建一个简单的,基本的示例项目,我们可以使用 django-admin.py如下脚本
 env/bin/django-admin.py startproject sampleapp .
请注意结尾 .在命令-没有它该项目将在另外的子目录创建。 执行该命令后一个新的 sampleapp目录和 manage.py脚本会被创建 /var/www/sampleapp 。 该 manage.py脚本用于执行对于该特定项目 的Django命令。 其中一个可能的用途 manage.py是运行测试服务器实例,以验证一切工作按预期。 请执行:
env/bin/python manage.py runserver 0.0.0.0:8000
这将运行绑定到端口8000上的所有接口的测试服务器。输出应如下所示:
Validating models...

0 errors found
April 08, 2014 - 12:29:31
Django version 1.6.2, using settings 'sampleapp.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
如果您在您的浏览器的8000端口打开你的服务器的IP地址(该地址应该像 http://<ip address>:8000/ ),你应该看到 它的工作例如 Django的页面 这就是我们将努力使用,而不是内置的 Django开发服务器Apache Web服务器工作的结果。 由于 Django应用程序工作正常,我们可以进行配对与Apache的应用程序。

为Apache安装mod_wsgi

最简单的,也是推荐的方法使用 Apache是使用 mod_wsgi的模块服务于Python应用程序。 它不是默认既不的Python也不 Apache的安装,所以我们要安装一个额外的软件包。
apt-get install libapache2-mod-wsgi
下一步将是配置,在文章的开头担任 它的工作原理!页来服务我们的 Django应用程序默认的 Apache虚拟主机。

在默认虚拟主机中配置mod_wsgi

对于后面的Apache中的任何其他虚拟主机配置 mod_wsgi的想法是一样的这里介绍的之一。为了简单起见,我们将使用默认的虚拟主机,因为它是由干净的Apache安装提供的。 打开默认的虚拟主机配置文件 nano编辑器
nano /etc/apache2/sites-enabled/000-default 
仅低于添加以下三个行 <VirtualHost *:80>
WSGIDaemonProcess sampleapp python-path=/var/www/sampleapp:/var/www/sampleapp/env/lib/python2.7/site-packages
WSGIProcessGroup sampleapp
WSGIScriptAlias / /var/www/sampleapp/sampleapp/wsgi.py
第一行生成一个名为WSGI守护进程 sampleapp ,将负责为我们的 Django应用程序。守护程序名称基本上可以是任何东西,但是在这里使用描述性名称(如应用程序名称)是一个好习惯。 如果我们使用全球Python安装和全球 Django的情况下, python-path指令就没有必要。 但是,使用虚拟环境使得它强制指定备用Python的路径,以便将 的mod_wsgi知道到哪里寻找Python包。 该路径必须包含两个目录 :Django项目本身的目录- /var/www/sampleapp - Python包和目录我们为该项目虚拟环境中- /var/www/sampleapp/env/lib/python2.7/site-packages 。路径定义中的目录使用冒号分隔。 第二行告诉特定的虚拟主机使用事先创建的WSGI守护进程,因此守护进程名称必须在这两者之间匹配。我们使用 sampleapp在两行。 第三行是最重要的,因为它告诉 Apachemod_wsgi的在哪里可以找到WSGI配置。 该 wsgi.py Django在提供包含WSGI在职 Django的应用程序,它工作得很好,并改变在这个文件中的配置准系统默认配置已经超出了本文范围。 这些变化之后,它重新启动 Apache是必要的
service apache2 restart
在此之后,在您的服务器的IP地址打开网页浏览器,无需任何额外的端口,你应该看到相同的 Django的页面,而不是之前的最初 它的工作原理是前面我们已经看到 页。 这使我们的配置完成。 请注意:使用默认虚拟主机而无需额外注意不是推荐的配置生产服务器的方法。 它用于演示目的。

深入阅读

配置 mod_wsgi的Django的的主题是巨大的。 许多配置方面是针对特定应用和难以解释或论证不与现实世界的 Django应用程序的工作。 本指南是不是为使用Apache Django应用程序部署的完整HOWTO,但对如何开始一个快速入门指南。 其中最好的资源,周围是官方 的Django 文档 。 也有可以使用 Django作为搜索关键字来发现DigitalOcean伟大的文章。
文章提交者: Mateusz Papiernik
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏