介绍
與 Django 應用程式以及一般的 Python 應用程式合作是一個複雜的問題,使用了許多工具,有幾種方法可以達到同一個目標,而且往往沒有任何方法可以做到這一點。
在一个专用服务器上部署 Django 应用程序的最流行的方法之一是使用 Nginx 与 Gunicorn 配对。 这是在 本文中已经详细描述的一种很好的方法。 然而,在使用 Apache 服务的现有网站旁边托管 Django 应用程序是一个非常流行的场景。 我们将试图涵盖快速路径来实现这一特定目标。 请注意,然而,这不是 Django 和 Apache 配对的最终指南,并且这里没有涵盖的配置方面。
本文将提出几个假设:
- 您已经在 Debian 7.0 或更高版本中设置了您的Dropplet。在不同的Linux发行版之间存在许多差异;因此,为了清晰度,我们将专注于 Debian 服务器
- 您至少对常见的 Python 工具(如 pip 包管理器和 virtualenv)有点熟悉,用于创建虚拟环境,这些工具在 本文中得到了很好的解释。
前提条件
在安装新包之前,始终是更新系统包和包索引的良好做法。
1apt-get update
2apt-get upgrade
安装Apache
由于本文专注于使用 Apache来服务应用程序,所以服务器本身是必要的。
1apt-get install apache2
安装后不久,Apache已经在运行,您可以通过打开您的Web浏览器并指向服务器IP地址来检查Apache Web服务器是否已正确设置,您应该在屏幕上看到一个简单的 **It works!**页面。
安装 pip 和 virtualenv
要开始在 Web 服务器上使用 Python 和 Django,必须先安装 pip 和 virtualenv。 Pip 是一个 Python 包管理器,可方便安装 Python 软件包,如 Django 本身,而 virtualenv 允许为 Python 应用程序创建独立的虚拟环境,以便分离不同应用程序所需的库,并避免它们之间的版本冲突。
要做到这一点,执行:
1apt-get install python-pip python-virtualenv
此命令将从 Debian 包库中安装 pip 和 virtualenv. 您可以通过使用 --version
交换机来验证两种工具的正确安装。
1root@django:~# virtualenv --version
21.7.1.2
3root@django:~# pip --version
4pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
5root@django:~#
使用 virtualenv 创建虚拟环境
在 Apache安装时,自动创建一个 /var/www
目录,其中设置了默认的 Web 服务器根。
让我们在该目录中创建一个名为sampleapp
的新目录,然后输入新的目录:
1cd /var/www
2mkdir sampleapp
3cd sampleapp
然后,让我们使用virtualenv
创建一个新的虚拟环境。Python虚拟环境基本上是一个目录,其中Python解释器和pip
的本地实例居住。Pip的本地实例在虚拟环境中安装所有包,因此没有安装的包会污染Python的全球安装,而且在运行Django或任何其他库的两个不同的应用程序的假设情况下,没有可能出现包版本冲突。
要创建新的虚拟环境,请输入:
1virtualenv env
其中「env」是虚拟环境的名称 - 它可能是任何其他单词. 该命令的输出应该是这样的:
1root@django:/var/www/sampleapp# virtualenv env
2New python executable in env/bin/python
3Installing distribute.............................................................................................................................................................................................done.
4Installing pip...............done.
5root@django:/var/www/sampleapp#
虚拟环境现在已经准备好了,可以用两种不同的方式使用。
一个方法是直接使用虚拟环境解释器执行命令. 使用这种方法,必须始终记住执行正确的解释器或pip
实例,因为有可能运行全系统的。
1root@django:/var/www/sampleapp# env/bin/pip --version
2pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
3root@django:/var/www/sampleapp# env/bin/python --version
4Python 2.7.3
5root@django:/var/www/sampleapp#
另一种方法是先 activate 环境,使用
1source env/bin/activate
环境名称将随后作为命令行提前。
1root@django:/var/www/sampleapp# source env/bin/activate
2(env)root@django:/var/www/sampleapp#
所有执行的命令都将使用本地虚拟环境版本。
1(env)root@django:/var/www/sampleapp# pip --version
2pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
3(env)root@django:/var/www/sampleapp# python --version
4Python 2.7.3
5(env)root@django:/var/www/sampleapp#
这样工作更容易;但是,在完成工作后,必须使用下面的命令 deactivate 环境。
1deactivate
它会使壳恢复正常。
1(env)root@django:/var/www/sampleapp# deactivate
2root@django:/var/www/sampleapp#
新创建的环境将用于存储所有必要的依赖,包括 Django和相关库。
在虚拟环境中安装 Django
下一个必要步骤是在虚拟环境中安装 Django。
1env/bin/pip install django
执行此命令后最后显示的消息应该是这样的
1Successfully installed django
2Cleaning up...
Django现在已安装在虚拟环境中,在整个系统的Python安装中不可用,您可以通过使用两个解释器导入‘django’模块来验证这种行为
1root@django:/var/www/sampleapp# python
2Python 2.7.3 (default, Mar 13 2014, 11:03:55)
3[GCC 4.7.2] on linux2
4Type "help", "copyright", "credits" or "license" for more information.
5>>> import django
6Traceback (most recent call last):
7 File "<stdin>", line 1, in <module>
8ImportError: No module named django
9>>> exit()
使用全系统口译器导入失败,而
1root@django:/var/www/sampleapp# env/bin/python
2Python 2.7.3 (default, Mar 13 2014, 11:03:55)
3[GCC 4.7.2] on linux2
4Type "help", "copyright", "credits" or "license" for more information.
5>>> import django
6>>>
一个在虚拟环境中执行的成功。
创建第一个Django项目
要创建一个简单的,基本的示例项目,我们可以使用‘django-admin.py’脚本如下:
1env/bin/django-admin.py startproject sampleapp .
请注意命令中的后续 .
- 没有它,项目将被创建在一个额外的子目录中。执行该命令后,一个新的 sampleapp
目录和 manage.py
脚本将在 /var/www/sampleapp
中创建。
请执行:
1env/bin/python manage.py runserver 0.0.0.0:8000
这将运行连接到端口8000上的所有接口的测试服务器,输出应该是这样的:
1Validating models...
2
30 errors found
4April 08, 2014 - 12:29:31
5Django version 1.6.2, using settings 'sampleapp.settings'
6Starting development server at http://0.0.0.0:8000/
7Quit the server with CONTROL-C.
如果您在浏览器中使用端口 8000 打开您的服务器 IP 地址(该地址应该看起来像 http://<ip address>:8000/
),您应该看到 It worked! 示例 Django 页面。
由于 **Django ** 应用程序正常工作,我们可以继续将应用程序与 Apache 配对。
如何为 Apache 安装 mod_wsgi
使用 Apache服务Python应用程序的最简单和推荐的方式是使用 mod_wsgi模块. 它既不安装Python也不安装Apache**,所以我们必须安装一个额外的包。
1apt-get install libapache2-mod-wsgi
下一步将是配置默认 Apache虚拟主机,在文章开始时服务于 **It works!**页面,以服务于我们的 Django应用程序。
在默认虚拟主机中配置 mod_wsgi
在Apache中为任何其他虚拟主机配置 mod_wsgi的想法与这里提出的相同,我们将使用默认的虚拟主机来简化,因为它是已经通过清洁的Apache安装提供的。
在nano
编辑器中打开默认虚拟主机配置文件
1nano /etc/apache2/sites-enabled/000-default
并在<VirtualHost *:80>
下面添加以下三行
1WSGIDaemonProcess sampleapp python-path=/var/www/sampleapp:/var/www/sampleapp/env/lib/python2.7/site-packages
2WSGIProcessGroup sampleapp
3WSGIScriptAlias / /var/www/sampleapp/sampleapp/wsgi.py
第一行引发了一种名为sampleapp
的WSGI DAEMON 流程,它将负责服务我们的 Django应用程序。
如果我们使用全球Python安装和全球Django**实例,则不需要python-path
指令,但是,使用虚拟环境,就必须指定替代的Python路径,以便 mod_wsgi知道在哪里寻找Python包。
路径必须包含两个目录: Django项目本身的目录 - /var/www/sampleapp
- 以及我们虚拟环境中的Python包目录 - /var/www/sampleapp/env/lib/python2.7/site-packages
.路径定义中的目录是通过结尾符划分的。
第二行告诉特定的虚拟主机使用先前创建的WSGI大卫,因此,大卫的名称必须匹配这两种。
第三行是最重要的,因为它告诉 Apache和 mod_wsgi在哪里找到WSGI配置.由 Django提供的 wsgi.py
包含用于服务 Django应用程序的WSGI的边缘默认配置,而在这个文件中改变配置并不适用于本文。
这些更改后,需要重新启动 Apache。
1service apache2 restart
之后,当您在服务器 IP 地址上打开 Web 浏览器时,没有任何额外的端口,您应该看到相同的 Django页面,而不是我们之前所看到的初始的 **It works!**页面。
这使我们的配置完整。
请注意:使用默认虚拟主机无需额外照顾不是配置生产服务器的建议方式。
进一步阅读
配置 mod_wsgi和 Django的主题本身是广阔的. 许多配置方面是应用程序特定的,难以解释或演示,而不使用真实世界的 Django应用程序。
周围最好的资源之一是官方 Django 文档。在DigitalOcean上也有很棒的文章,可以通过使用 Django作为搜索关键字来找到。