如何服务与Apache在CentOS 7 Django的应用程序和mod_wsgi的

介绍

Django是一个强大的网络框架,可以帮助您快速获得您的Python应用程序或网站。 Django包括一个用于在本地测试代码的简化开发服务器,但是对于与生产有关的任何事情,需要一个更安全和更强大的Web服务器。

在本指南中,我们将演示如何在CentOS 7上的Python虚拟环境中安装和配置Django。然后我们将在我们的应用程序之前设置Apache,以便它可以在将需要应用程序逻辑的请求Django应用程序。 我们将做到这一点使用mod_wsgi Apache模块,可以通过WSGI接口规范和Django沟通。

先决条件和目标

为了完成这个指南,你应该有一个非root用户新鲜的CentOS 7服务器实例sudo配置权限。 你可以学习如何通过运行thorugh我们设置此服务器初始设置指南

我们将在Python虚拟环境中安装Django。 将Django安装到特定于您的项目的环境中将允许单独处理您的项目及其需求。

一旦我们的应用程序启动并运行,我们将配置Apache与Django应用程序接口。 它会做到这一点与mod_wsgi Apache模块,可HTTP请求转换成一个被称为WSGI规范中定义的可预测的应用格式。 你可以通过阅读链接部分找到更多关于WSGI 本指南

让我们开始吧。

从CentOS和EPEL Repos安装软件包

要开始此过程,我们将从分发包的存储库下载并安装所有需要的项目。 这将包括Apache Web服务器,则mod_wsgi使用与我们的Django的应用接口模块,以及pip ,可以用来下载我们的Python相关的工具Python的包管理器。

为了得到pip ,我们需要启用EPEL软件库,其中一些额外的软件包。 您可以通过键入以下内容轻松实现:

sudo yum install epel-release

启用EPEL后,我们可以键入以下内容安装我们需要的组件:

sudo yum install python-pip httpd mod_wsgi

配置Python虚拟环境

现在我们已经从存储库中获取了组件,我们可以开始处理我们的Django项目。 第一步是创建一个Python虚拟环境,以便我们的Django项目将独立于系统的工具和我们可能正在处理的任何其他Python项目。

我们需要安装virtualenv命令来创建这些环境。 我们可以得到这样的使用pip

sudo pip install virtualenv

随着virtualenv安装后,我们就可以开始形成我们的项目。 创建一个目录,您希望保留您的项目并移动到目录:

mkdir ~/myproject
cd ~/myproject

在项目目录中,通过键入以下内容创建Python虚拟环境:

virtualenv myprojectenv

这将创建一个名为myprojectenv你中myproject目录。 在内部,它会安装Python和本地版本的本地版本pip 我们可以使用它为我们的项目安装和配置一个孤立的Python环境。

在我们安装我们项目的Python需求之前,我们需要激活虚拟环境。 你可以通过键入:

source myprojectenv/bin/activate

您的提示应该更改为表示您现在在Python虚拟环境中操作。 它看起来是这样的: ( myprojectenv ) user @ host :~/ myproject $

随着虚拟环境活跃,本地实例安装Django pip通过键入:

pip install django

创建和配置新的Django项目

现在Django安装在我们的虚拟环境中,我们可以创建实际的Django项目文件。

创建Django项目

由于我们已经有一个项目目录,我们将告诉Django在这里安装文件。 它将创建一个具有实际代码的二级目录,这是正常的,并在此目录中放置一个管理脚本。 这一点的关键是在结束时告诉Django在当前目录中创建文件的点:

django-admin.py startproject myproject .

调整项目设置

我们应该对我们新创建的项目文件做的第一件事是调整设置。 使用文本编辑器打开设置文件:

nano myproject/settings.py

为了简单起见,我们将在本指南中使用默认的SQLite数据库,因此我们实际上不需要更改太多。 我们将专注于配置静态文件目录,其中Django将放置静态文件,以便Web服务器可以轻松地提供这些文件。

在文件的底部,我们将添加一行来配置此目录。 Django使用STATIC_ROOT设置来确定这些文件应该去的目录。 我们将使用一点Python来告诉它在项目的主目录中使用一个名为“static”的目录:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

保存并在完成后关闭文件。

完成初始项目设置

现在,我们可以使用管理脚本将初始数据库模式迁移到SQLite数据库:

cd ~/myproject
./manage.py makemigrations
./manage.py migrate

通过键入以下内容为项目创建管理用户:

./manage.py createsuperuser

您必须选择用户名,提供电子邮件地址,然后选择并确认密码。

我们可以通过键入以下内容将所有静态内容收集到我们配置的目录位置:

./manage.py collectstatic

您必须确认操作。 静态文件将被放置在一个名为static项目目录之内。

最后,您可以使用以下命令启动Django开发服务器来测试您的项目:

./manage.py runserver 0.0.0.0:8000

在Web浏览器,访问你的服务器的域名或IP地址后面:8000

http://server_domain_or_IP:8000

您应该会看到默认的Django索引页面:

Django默认索引

如果您添加/admin在地址栏中的URL的最后,你会被提示输入您已创建的管理员用户名和密码createsuperuser命令:

Django管理员登录

验证后,您可以访问默认的Django管理界面:

Django管理界面

当您完成浏览时,在终端窗口中按CTRL-C关闭开发服务器。

我们现在已经完成了Django,所以我们可以通过键入以下内容退出我们的虚拟环境:

deactivate

配置Apache

现在你的Django项目正在工作,我们可以配置Apache作为前端。 它接收客户端的连接将被翻译成Django的应用程序需要使用的WSGI格式mod_wsgi模块。 这应该在早期安装时自动启用。

要配置WSGI传递,我们需要创建一个定义WSGI传递的新配置文件。 创建和打开一个文件sudo的内特权/etc/httpd/conf.d目录。 我们称这个文件django.conf

sudo nano /etc/httpd/conf.d/django.conf

首先,让我们配置静态文件。 我们将使用别名来告诉Apache映射开始的任何请求/static我们的项目文件夹中的“静态”的目录。 我们早些时候收集了那些静态资产。 我们将设置别名,然后通过目录块授予对相关目录的访问权限:

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
    Require all granted
</Directory>

接下来,我们将授予访问wsgi.py那里Django的代码存储在第二级项目目录中的文件。 为此,我们将使用一个目录部分,其中包含一个文件部分。 我们将授予对此嵌套构造中的文件的访问权限:

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
    Require all granted
</Directory>

<Directory /home/user/myproject/myproject>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

配置完成后,我们准备构造实际处理WSGI传递的文件部分。 我们将使用守护进程模式运行WSGI进程,这是推荐的配置。 我们可以使用WSGIDaemonProcess指令来设置它。

此伪指令对进程使用任意名称。 我们将使用myproject留一致。 然后,我们设置Python路径,Apache可以找到所有可能需要的组件。 由于我们使用虚拟环境,我们将必须设置两个路径组件。 第一个是我们项目的父目录,其中可以找到项目文件。 第二个是lib/python x . x /site-packages我们的虚拟环境中的文件夹(其中X的由Python版本号部件更换)内的道路。 这样,Apache可以找到运行我们的项目所需的所有其他Python代码。

之后,我们需要指定进程组。 这应该指向我们选择了同一个名字WSGIDaemonProcess指令( myproject在我们的例子)。 最后,我们需要设置脚本别名这样Apache将通过请求根域到wsgi.py文件:

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
    Require all granted
</Directory>

<Directory /home/user/myproject/myproject>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIDaemonProcess myproject python-path=/home/user/myproject:/home/user/myproject/myprojectenv/lib/python2.7/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py

完成这些更改后,保存并关闭文件。

包含一些权限问题

接下来,我们需要修复一些权限集,以便Apache服务可以访问我们的文件。 默认情况下,CentOS非常严格地锁定每个用户的主目录。 为了解决这个问题,我们将添加apache用户对自己的用户群。 这将让我们打开足够的权限,以便它可以获得适当的文件。

添加apache用户到组使用以下命令。 替换自己的用户名的user的命令:

sudo usermod -a -G user apache

现在,我们可以给我们的用户组执行我们的主目录的权限。 这将允许Apache进程在以下内容中输入和访问内容:

chmod 710 /home/user

这将使Apache能够进入我们的主目录。

如果使用SQLite数据库,这是本文中使用的默认值,则需要允许Apache进程访问数据库文件本身。

为此,第一步是更改权限,以便数据库的组所有者可以读写。 数据库文件名为db.sqlite3默认情况下,它应该位于你的基地项目目录:

chmod 664 ~/myproject/db.sqlite3

之后,我们需要给Apache下运行群, apache组,文件组所有权:

sudo chown :apache ~/myproject/db.sqlite3

为了写入文件,我们还需要给数据库的父目录的Apache组所有权:

sudo chown :apache ~/myproject

一旦这些步骤完成,您就可以开始Apache服务。 为此,请键入:

sudo systemctl start httpd

现在,您应该可以访问您的Django站点,方法是转到服务器的域名或IP地址,而无需指定端口。 常规站点和管理界面应按预期运行。

如果一切都按预期工作,您可以启用Apache服务,以便在启动时自动启动:

sudo systemctl enable httpd

结论

在本指南中,我们在其自己的虚拟环境中设置了一个Django项目。 我们与配置Apachemod_wsgi处理客户请求和接口与Django应用程序。

Django通过提供许多常用的部分来简化创建项目和应用程序,使您能够专注于独特的元素。 通过利用本文中描述的通用工具链,您可以轻松地从单个服务器提供您创建的应用程序。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏