【问题标题】:How do I set up a virtual server using Django and mod_wsgi with Apache?如何使用 Django 和带有 Apache 的 mod_wsgi 设置虚拟服务器?
【发布时间】:2016-10-23 22:01:11
【问题描述】:

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

我在 linux 上安装了 apache,并更改了我的 WSGI 配置,使其指向我的 django 项目。

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

 <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

【问题讨论】:

  • 虚拟服务器是什么意思?你在用虚拟化软件吗?这是一个非常广泛的问题,你是如何设置 wsgi 的?哪个服务器,apache?
  • 我只想从我的电脑上运行一个服务器。我正在向您展示我为引用 wsgi 而编辑的代码。

标签: python django apache apache2 mod-wsgi


【解决方案1】:

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

复制到这里以确保它与答案一起维护:

先决条件

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

apt-get update
apt-get upgrade

安装 Apache

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

apt-get install apache2

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

安装 pip 和 virtualenv 要开始在网络服务器上使用 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

它将使外壳恢复正常

(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/),您应该会看到 It works!示例 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 包含 WSGI 的准系统默认配置,用于为 Django 应用程序提供服务,该配置运行良好,更改此文件中的配置不在本文范围内。

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

service apache2 restart

之后,在您的服务器 IP 地址上打开 Web 浏览器时,没有任何额外的端口,您应该会看到与之前相同的 Django 页面,而不是初始页面。我们之前看到的页面。

这样我们的配置就完成了。

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

【讨论】:

  • 我已经尝试过该教程,但没有运气。我仍然不知道 WSGI 是否正常工作,我仍然不知道如何在我自己的计算机上运行服务器,以便任何人都可以访问我的站点。
  • 你有域名吗?如果是这样,请进入域名提供商并更改 dns 设置,以便域名指向您的 IP(您可以通过在浏览器中输入 myip 来找到您的 IP。如果您设置正确,它将转到您的站点。如果您没有域名,您可以通过获取服务器的 IP(在 linux 命令行键入 ifconfig)并获取 inet addr(这将是一些东西)在您的局域网上测试它比如192.168.1.xxx)。在浏览器中输入这个,它应该会进入你的网站。
  • 如果我没有域名怎么办,我可以在我自己的计算机上将用户指向我的 IP 地址吗?
  • 你可以,但出于各种原因(主要是安全性),这是一个坏主意。互联网是一个可怕的大世界,安全性非常困难。我建议在某个地方找一些便宜/免费的主机。
  • 正如@jwoolard 所说,您可以只使用您的 ip,但存在安全问题。如果您想知道您的 wsgi 是否正常工作,请在本地测试它,您就会知道。然后,您可以决定是否要冒安全问题的风险,因为您知道您的应用程序的用途和用途以及您在网络上还使用什么等。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2012-04-30
  • 2014-03-02
相关资源
最近更新 更多