如何在CentOS 7 Django的应用程序使用PostgreSQL

Django是快速创建Python应用程序的灵活框架。默认情况下,Django应用程序被配置成将数据存储到一个轻量级SQLite数据库文件。虽然这工作得很好一些负载下,一个更传统的数据库管理系统可以提高性能...

介绍

Django是一个用于快速创建Python应用程序的灵活框架。 默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。 虽然这在一些负载下运行良好,但更传统的DBMS可以提高生产性能。

在本指南中,我们将演示如何安装和配置PostgreSQL以与Django应用程序一起使用。 我们将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的Django项目以使用此后端。

先决条件

要开始,您需要一个干净的CentOS 7服务器实例,并设置非root用户。 非root用户必须配置sudo特权。 了解如何按照我们设置此服务器初始设置指南

当您准备好继续时,请继续阅读。

从CentOS和EPEL存储库安装组件

我们的第一步将安装我们从存储库中需要的所有碎片。 我们将安装pip ,Python的包管理器,以便安装和管理我们的Python组件。 我们还将安装数据库软件和与之交互所需的相关库。

我们需要的一些软件在EPEL存储库中,其中包含额外的软件包。 我们可以通过绑定轻松启用此存储库:

sudo yum install epel-release

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

sudo yum install python-pip python-devel gcc postgresql-server postgresql-devel postgresql-contrib

执行初始PostgreSQL配置

安装后,您需要通过键入以下内容来初始化PostgreSQL数据库:

sudo postgresql-setup initdb

在数据库初始化后,我们可以通过键入以下命令来启动PostgreSQL服务:

sudo systemctl start postgresql

启动数据库后,我们实际上需要调整已填充的配置文件中的值。 用你的编辑器和sudo命令现在打开文件:

sudo nano /var/lib/pgsql/data/pg_hba.conf

此文件负责配置数据库系统的身份验证方法。 目前,它被配置为仅当系统用户与数据库用户匹配时才允许连接。 这对于本地维护任务是正常的,但是我们的Django实例将有另一个用户配置密码。

我们可以通过修改两个配置该host在该文件的底部行。 更改的最后一列(认证方法) md5 这将允许密码认证:

. . .

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
#host    all             all             ::1/128                 ident
host    all             all             ::1/128                 md5

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

随着我们的新配置更改,我们需要重新启动服务。 我们还将启用PostgreSQL,以便它在启动时自动启动:

sudo systemctl restart postgresql
sudo systemctl enable postgresql

创建数据库和数据库用户

默认情况下,Postgres使用称为“对等身份验证”的身份验证方案进行本地连接。 我们可以看到本作的local在入口pg_hba.conf我们编辑的文件。 基本上,这意味着如果用户的操作系统用户名与有效的Postgres用户名匹配,则该用户可以在没有进一步身份验证的情况下登录。

期间Postgres的安装,操作系统用户名为postgres创建以对应于postgres PostgreSQL的管理用户。 我们需要更改为此用户以执行管理任务:

sudo su - postgres

你现在应该在为A shell会话postgres用户。 键入以下内容登录Postgres会话:

psql

首先,我们将为我们的Django项目创建一个数据库。 出于安全原因,每个项目都应该有自己的隔离数据库。 我们将调用我们的数据库myproject本指南中,但它总是更好的选择更具描述:

CREATE DATABASE myproject;

记住在SQL提示符处用分号结束所有命令。

接下来,我们将创建一个数据库用户,我们将使用它来连接和与数据库交互。 将密码设置为强有力且安全的:

CREATE USER myprojectuser WITH PASSWORD 'password';

然后,我们将修改刚刚创建的用户的一些连接参数。 这将加速数据库操作,以便在每次建立连接时不必查询和设置正确的值。

我们将默认编码设置为UTF-8,Django期望。 我们还将默认事务隔离方案设置为“读提交”,这会阻止从未提交的事务读取。 最后,我们设置时区。 缺省情况下,我们的Django的项目将被设置为使用UTC

ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';

现在,我们需要做的是给我们的数据库用户访问我们创建的数据库的权限:

GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

退出SQL提示以返回到postgres用户的shell会话:

\q

将退出的postgres用户的shell会话要回你的普通用户的shell会话:

exit

在虚拟环境中安装Django

现在我们的数据库已经设置好了,我们可以安装Django了。 为了更好的灵活性,我们将在Python虚拟环境中安装Django及其所有依赖项。

你可以得到virtualenv包,允许你创建这些环境通过键入:

sudo pip install virtualenv

创建一个目录来保存你的Django项目。 之后移动到目录:

mkdir ~/myproject
cd ~/myproject

我们可以创建一个虚拟环境,通过键入以存储我们的Django项目的Python需求:

virtualenv myprojectenv

这将安装Python的本地副本和pip变成一个名为myprojectenv项目目录之内。

在我们在虚拟环境中安装应用程序之前,我们需要激活它。 您可以键入以下内容:

source myprojectenv/bin/activate

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

一旦你的虚拟环境是活动的,你可以安装Django pip 我们也将安装psycopg2包,这将允许我们使用我们配置的数据库:

pip install django psycopg2

现在,我们可以开始我们的内Django项目myproject目录。 这将创建一个同名的子目录来保存代码本身,并在当前目录中创建一个管理脚本。 确保在命令末尾添加点,以便正确设置:

django-admin.py startproject myproject .

配置Django数据库设置

现在我们有一个项目,我们需要配置它来使用我们创建的数据库。

打开位于子项目目录中的主Django项目设置文件:

nano ~/myproject/myproject/settings.py

对文件的底部,你会看到一个DATABASES部分看起来像这样:

. . .

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

. . .

这当前配置为使用SQLite作为数据库。 我们需要改变它,使用我们的PostgreSQL数据库。

首先,改变发动机,使其指向postgresql_psycopg2后端,而不是sqlite3后端。 对于NAME ,使用你的数据库的名称( myproject在我们的例子)。 我们还需要添加登录凭据。 我们需要用户名,密码和主机来连接。 我们将添加并留空白端口选项,以便选择默认值:

. . .

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

. . .

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

迁移数据库并测试项目

现在Django设置已配置,我们可以将我们的数据结构迁移到我们的数据库并测试服务器。

我们可以开始创建和应用迁移到我们的数据库。 由于我们还没有任何实际数据,这将简单地设置初始数据库结构:

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

创建数据库结构后,我们可以通过键入以下内容创建管理帐户:

python manage.py createsuperuser

系统将要求您选择用户名,提供电子邮件地址,然后选择并确认帐户的密码。

设置管理帐户后,您可以通过启动Django开发服务器来测试数据库是否正常运行:

python manage.py runserver 0.0.0.0:8000

在Web浏览器,访问你的服务器的域名或IP地址后面:8000达到默认的Django根页面:

http://server_domain_or_IP:8000

您应该看到默认索引页:

Django索引

追加/admin到URL的末尾,你应该能够进入登录界面管理界面:

Django管理员登录

输入您刚刚使用创建的用户名和密码createsuperuser命令。 然后,您将转到管理界面:

Django管理界面

完成调查后,您可以通过在终端窗口中按CTRL-C来停止开发服务器。

通过访问管理界面,我们已经确认我们的数据库已经存储了我们的用户帐户信息,并且可以正确访问。

结论

在本指南中,我们演示了如何安装和配置PostgreSQL作为Django项目的后端数据库。 虽然SQLite可以轻松地处理开发和轻量级生产使用期间的负载,但大多数项目都可以从实现更全功能的DBMS中获益。