如何使用Django和mod_wsgi与Apache建立虚拟服务器?

时间:2016-06-22 06:14:31

标签: python django apache apache2 mod-wsgi

我一直在尝试从自己的机器上运行服务器,以便其他人可以看到我的网站。

我在linux上安装了apache,并修改了我的WSGI配置,因此它指向我的django项目。

我的问题是,我如何知道WSGI正在引用我的项目,以及如何从我的机器启动并运行服务器?

tf.Variable

1 个答案:

答案 0 :(得分:-1)

试试这个link,这是DigitalOcean的教程。

在此复制以确保其得到答案:

<强>先决条件

在安装新软件包之前,最好更新系统软件包和软件包索引。为此,执行:

apt-get update
apt-get upgrade

安装Apache

由于本文侧重于使用Apache来为应用程序提供服务,因此服务器本身是必需的。要安装必要的包,请执行:

apt-get install apache2

安装后直接Apache已经运行。您可以通过打开Web浏览器并将其指向服务器IP地址来检查Apache Web服务器是否已正确设置。你应该看到一个简单的工作!屏幕上的页面。

安装pip和virtualenv 要在Web服务器上开始使用Python和Django,必须首先安装pip和virtualenv。 Pip是一个Python包管理器,有助于安装Python软件包,如Django本身,而virtualenv可以为Python应用程序创建单独的虚拟环境,以便分离不同应用程序所需的库,并避免它们之间的版本冲突。

要执行此操作:

apt-get install python-pip python-virtualenv

此命令将从Debian软件包存储库安装pip和virtualenv。您可以通过使用--version switch运行它们来验证是否已正确安装这两个工具。

root @ django:〜#virtualenv --version 1.7.1.2 root @ django:〜#pip --version 来自/usr/lib/python2.7/dist-packages(python 2.7)的pip 1.1 根@ 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和相关库。 Apache和mod_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()
Import using system-wide interpreter failed, whereas

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 .

请注意尾随。在命令中 - 没有它,项目将在另一个子目录中创建。执行该命令后,将在/ var / www / sampleapp中创建一个新的sampleapp目录和manage.py脚本。 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://:8000 /),您应该看到它工作正常!示例Django页面。这是我们将使用Apache Web服务器而不是内置Django开发服务器的结果。

由于Django应用程序正常运行,我们可以继续将应用程序与Apache配对。

为Apache安装mod_wsgi 使用Apache提供Python应用程序的最简单也是推荐的方法是使用mod_wsgi模块。默认情况下,它既不安装Python也不安装Apache,因此我们必须安装一个额外的软件包。

apt-get install libapache2-mod-wsgi

下一步将配置默认的Apache虚拟主机,在文章开头提供它可行!页面为我们的Django应用程序提供服务。

在默认虚拟主机中配置mod_wsgi 为Apache中的任何其他虚拟主机配置mod_wsgi背后的想法与此处介绍的相同。为简单起见,我们将使用默认的虚拟主机,因为它是由干净的Apache安装提供的。

在nano编辑器中打开默认的虚拟主机配置文件

nano /etc/apache2/sites-enabled/000-default 

并在

下方添加以下三行
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

第一行产生一个名为sampleapp的WSGI守护进程,它将负责为我们的Django应用程序提供服务。守护程序名称基本上可以是任何名称,但最好*在此处使用描述性名称(如应用程序名称)。

如果我们使用全局Python安装和全局Django实例,则不需要python-path指令。但是,使用虚拟环境必须指定备用Python路径,以便mod_wsgi知道在哪里查找Python包。

路径必须包含两个目录:Django项目本身的目录 - / var / www / sampleapp - 以及我们在该项目的虚拟环境中的Python包目录 - / var / www / sampleapp / env / lib / python2。 7 /站点包。路径定义中的目录使用冒号分隔。

第二行告诉特定虚拟主机使用事先创建的WSGI守护程序,因此,守护程序名称必须在这两者之间匹配。我们在两个行中都使用了sampleapp。

第三行是最重要的,因为它告诉Apache和mod_wsgi在哪里找到WSGI配置。 Django提供的wsgi.py包含用于服务Django应用程序的WSGI的准系统默认配置,该应用程序运行正常并且更改此文件中的配置超出了本文的范围。

完成这些更改后,需要重新启动Apache

service apache2 restart

之后,在您的服务器IP地址上打开Web浏览器,没有任何其他端口,您应该看到与以前相同的Django页面而不是初始它工作!我们之前见过的页面。

这使我们的配置完成。

请注意:使用默认虚拟主机时不需要额外注意,这不是配置生产服务器的推荐方法。它用于演示目的。