当前位置: 首页 > news >正文

如何在 Debian VPS 上使用 mod_wsgi 和 Apache 运行 Django,并使用 virtualenv Python 环境

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

与 Django 应用程序一起工作,以及一般的 Python 应用程序,是一个复杂的问题,有许多工具在使用。有多种实现相同目标的方式,通常没有一种单一的方法来做事情。

在专用服务器上部署 Django 应用程序的最流行方式之一是使用 Nginx 配合 Gunicorn。在这篇文章中已经深入描述了如何做到这一点。然而,将 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 服务器是否已正确设置。您应该在屏幕上看到一个简单的 It works! 页面。

安装 pip 和 virtualenv

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

要执行此操作,请执行:

apt-get install python-pip python-virtualenv

此命令将从 Debian 软件包存储库安装 pipvirtualenv。您可以通过使用 --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 实例,因为有可能运行全局的解释器或 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
>>> import django
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ImportError: No module named django
>>> exit()

使用系统范围的解释器导入失败,而在虚拟环境中执行的导入成功。

创建第一个 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.

如果在浏览器中打开服务器 IP 地址并使用端口 8000(地址应该类似 http://<ip address>:8000/),您应该看到 It worked! 示例 Django 页面。这是我们将在使用 Apache web 服务器而不是内置的 Django 开发服务器时努力实现的结果。

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

为 Apache 安装 mod_wsgi

使用 Apache 为 Python 应用程序提供服务的最简单且推荐的方法是使用 mod_wsgi 模块。它在 Python 和 Apache 中都不是默认安装的,因此我们需要安装一个额外的软件包。

apt-get install libapache2-mod-wsgi

下一步将是配置默认的 Apache 虚拟主机,在本文开头为 It works! 页面提供服务,以提供我们的 Django 应用程序。

在默认虚拟主机中配置 mod_wsgi

配置 mod_wsgi 用于 Apache 中的任何其他虚拟主机的思路与此处介绍的相同。为简单起见,我们将使用默认虚拟主机,因为它是干净的 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

第一行生成一个名为 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

第三行是最重要的,因为它告诉 Apachemod_wsgi 在哪里找到 WSGI 配置。由 Django 提供的 wsgi.py 包含了用于为 Django 应用程序提供服务的 WSGI 的基本默认配置,这个文件的配置更改超出了本文的范围。

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

service apache2 restart

之后,在服务器 IP 地址上打开 web 浏览器,无需任何额外的端口,您应该看到与之前不同的 Django 页面,而不是最初看到的 It works! 页面。

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

请注意:在没有额外注意的情况下使用默认虚拟主机不是配置生产服务器的推荐方式。这是用于演示目的。

进一步阅读

配置 mod_wsgiDjango 本身的主题是广泛的。许多配置方面是特定于应用程序的,很难在没有使用真实世界的 Django 应用程序的情况下解释或演示。本指南不是关于如何使用 Apache 部署 Django 应用程序的完整指南,而是一个关于如何开始的快速入门指南。


http://www.mrgr.cn/news/57367.html

相关文章:

  • wdk 驱动开发 -记录一下
  • docker容器无法连接宿主机mysql排查
  • 功能自动化测试工具Appium使用步骤讲解
  • C#学习笔记(五)
  • 计算机毕业设计 | vue+springboot 在线花店后台管理系统(附源码)
  • C++ Qt 使用openCV库将图片文件互转YUV文件
  • 【thinkphp8】00007 内置服务器,切换php版本
  • 13_Linux开机流程:以Red Hat Enterprise Linux 7(RHEL 7)为例
  • PTA数据库编程练习合集
  • PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程
  • 10.21-10.23
  • 偷懒总结篇|贪心算法|动态规划|单调栈|图论
  • iPhone图片/照片/视频复制到win10系统的简单方法 - 照片导出
  • R语言统计分析——置换检验3
  • CMOS 图像传感器:像素寻址与信号处理
  • 【ShuQiHere】如何在 Linux 上虚拟化 macOS Catalina
  • 生成式AI的新篇章:从快思维到慢思维
  • 人生是不断排毒的过程
  • Codeforces Round 881 (Div. 3)(A~F1题解)
  • Linux的调度算法
  • ★ Linux ★ 基础开发工具的使用(上)
  • STM32--JQ8900语音模块
  • 嘘,偷偷复制某客巴巴的少许文字……
  • keil新建工程HC32L176MATA
  • 基于Spring Boot+Vue的私人定制旅游系统(协同过滤算法、实时聊天)
  • 堆排序原理及代码