如何使用 Django 和 mod_wsgi 与 Apache 设置虚拟服务器?
How do I set up a virtual server using Django and mod_wsgi with Apache?
我一直在尝试从我自己的机器上 运行 服务器,以便其他人可以看到我的网站。
我在 linux 上安装了 apache,并更改了我的 WSGI 配置,以便它指向我的 django 项目。
我的问题是,我如何知道 WSGI 正在引用我的项目,以及如何启动服务器并从我的机器 运行ning?
<VirtualHost *:80 *:443>
ServerAdmin myemail@gmail.com
ServerName www.mysite.com
ServerAlias www.mysite.com
Alias /media/ /var/www/mysite/media/
Alias /static/ /var/www/mysite/static/
DocumentRoot /var/www/mysite/media/
<Directory /var/www/mysite>
Require all granted
</Directory>
WSGIDaemonProcess mysite python-path=/var/www/mysiteenv/lib/python2.7/site-packages:/var/www/mysite
WSGIProcessGroup mysite
WSGIScriptAlias / /var/www/mysite/wsgi.py/
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
试试这个 link,这是来自 DigitalOcean 的教程。
复制到这里以确保它与答案一起维护:
先决条件
在安装新包之前,更新系统包和包索引始终是一个好习惯。为此执行:
apt-get update
apt-get upgrade
正在安装 Apache
由于本文的重点是使用 Apache 为应用程序提供服务,因此服务器本身是必需的。要安装必要的包执行:
apt-get install apache2
安装 Apache 后直接 运行ning。您可以通过打开网络浏览器并将其指向服务器 IP 地址来检查 Apache 网络服务器是否已正确设置。您应该看到一个简单的 It works!屏幕上的页面。
正在安装 pip 和 virtualenv
要开始在 Web 服务器上使用 Python 和 Django,必须先安装 pip 和 virtualenv。 Pip 是一个 Python 包管理器,可以方便地安装 Python 软件包,例如 Django 本身,而 virtualenv 可以为 Python 应用程序创建单独的虚拟环境,以便分离不同应用程序所需的库应用程序并避免它们之间的版本冲突。
执行:
apt-get install python-pip python-virtualenv
此命令将从 Debian 软件包存储库安装 pip 和 virtualenv。您可以通过 运行 使用 --version 开关来验证这两个工具是否已正确安装。
root@django:~# virtualenv --version
1.7.1.2
root@django:~# pip --version
来自 /usr/lib/python2.7/dist-packages 的 pip 1.1 (python 2.7)
根@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
它将returnshell恢复正常
(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/site-packages.路径定义中的目录使用冒号分隔。
第二行告诉特定虚拟主机使用预先创建的 WSGI 守护进程,因此,守护进程名称必须在这两者之间匹配。我们在这两行中都使用了 sampleapp。
第三行是最重要的,因为它告诉 Apache 和 mod_wsgi 在哪里可以找到 WSGI 配置。 Django 提供的 wsgi.py 包含用于服务 Django 应用程序的 WSGI 准系统默认配置,它工作得很好,更改此文件中的配置超出了本文范围。
进行这些更改后,需要重新启动 Apache
service apache2 restart
之后,在您的服务器 IP 地址上打开 Web 浏览器,无需任何其他端口,您应该会看到与之前相同的 Django 页面,而不是最初的页面。它可以工作!我们之前看到的页面。
这样我们的配置就完成了。
请注意:不加注意地使用默认虚拟主机不是配置生产服务器的推荐方式。它用于演示目的。
我一直在尝试从我自己的机器上 运行 服务器,以便其他人可以看到我的网站。
我在 linux 上安装了 apache,并更改了我的 WSGI 配置,以便它指向我的 django 项目。
我的问题是,我如何知道 WSGI 正在引用我的项目,以及如何启动服务器并从我的机器 运行ning?
<VirtualHost *:80 *:443>
ServerAdmin myemail@gmail.com
ServerName www.mysite.com
ServerAlias www.mysite.com
Alias /media/ /var/www/mysite/media/
Alias /static/ /var/www/mysite/static/
DocumentRoot /var/www/mysite/media/
<Directory /var/www/mysite>
Require all granted
</Directory>
WSGIDaemonProcess mysite python-path=/var/www/mysiteenv/lib/python2.7/site-packages:/var/www/mysite
WSGIProcessGroup mysite
WSGIScriptAlias / /var/www/mysite/wsgi.py/
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
试试这个 link,这是来自 DigitalOcean 的教程。
复制到这里以确保它与答案一起维护:
先决条件
在安装新包之前,更新系统包和包索引始终是一个好习惯。为此执行:
apt-get update
apt-get upgrade
正在安装 Apache
由于本文的重点是使用 Apache 为应用程序提供服务,因此服务器本身是必需的。要安装必要的包执行:
apt-get install apache2
安装 Apache 后直接 运行ning。您可以通过打开网络浏览器并将其指向服务器 IP 地址来检查 Apache 网络服务器是否已正确设置。您应该看到一个简单的 It works!屏幕上的页面。
正在安装 pip 和 virtualenv 要开始在 Web 服务器上使用 Python 和 Django,必须先安装 pip 和 virtualenv。 Pip 是一个 Python 包管理器,可以方便地安装 Python 软件包,例如 Django 本身,而 virtualenv 可以为 Python 应用程序创建单独的虚拟环境,以便分离不同应用程序所需的库应用程序并避免它们之间的版本冲突。
执行:
apt-get install python-pip python-virtualenv
此命令将从 Debian 软件包存储库安装 pip 和 virtualenv。您可以通过 运行 使用 --version 开关来验证这两个工具是否已正确安装。
root@django:~# virtualenv --version 1.7.1.2 root@django:~# pip --version 来自 /usr/lib/python2.7/dist-packages 的 pip 1.1 (python 2.7) 根@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
它将returnshell恢复正常
(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/site-packages.路径定义中的目录使用冒号分隔。
第二行告诉特定虚拟主机使用预先创建的 WSGI 守护进程,因此,守护进程名称必须在这两者之间匹配。我们在这两行中都使用了 sampleapp。
第三行是最重要的,因为它告诉 Apache 和 mod_wsgi 在哪里可以找到 WSGI 配置。 Django 提供的 wsgi.py 包含用于服务 Django 应用程序的 WSGI 准系统默认配置,它工作得很好,更改此文件中的配置超出了本文范围。
进行这些更改后,需要重新启动 Apache
service apache2 restart
之后,在您的服务器 IP 地址上打开 Web 浏览器,无需任何其他端口,您应该会看到与之前相同的 Django 页面,而不是最初的页面。它可以工作!我们之前看到的页面。
这样我们的配置就完成了。
请注意:不加注意地使用默认虚拟主机不是配置生产服务器的推荐方式。它用于演示目的。