前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上使用PostgreSQL和Django应用程序

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

原创
作者头像
彼岸轮回
修改2018-10-29 18:27:42
2.9K0
修改2018-10-29 18:27:42
举报

介绍

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

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

先决条件

首先,您需要一个干净的CentOS 7服务器实例,并设置非root用户。必须为非root用户配置sudo权限。

当您准备好继续时,请继续阅读。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

从CentOS和EPEL存储库安装组件

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

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

代码语言:javascript
复制
sudo yum install epel-release

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

代码语言:javascript
复制
sudo yum install python-pip python-devel gcc postgresql-server postgresql-devel postgresql-contrib

执行初始PostgreSQL配置

安装完成后,您需要输入以下内容来初始化PostgreSQL数据库:

代码语言:javascript
复制
sudo postgresql-setup initdb

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

代码语言:javascript
复制
sudo systemctl start postgresql

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

代码语言:javascript
复制
sudo nano /var/lib/pgsql/data/pg_hba.conf

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

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

代码语言:javascript
复制
. . .
​
# 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,以便它在启动时自动启动:

代码语言:javascript
复制
sudo systemctl restart postgresql
sudo systemctl enable postgresql

创建数据库和数据库用户

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

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

代码语言:javascript
复制
sudo su - postgres

您现在应该在为postgres用户设置的的shell会话中。键入以下内容登录Postgres会话:

代码语言:javascript
复制
psql

首先,我们将为Django项目创建一个数据库。出于安全原因,每个项目都应该有自己独立的数据库。我们将在本指南中为我们的数据库取名为myproject,但最好选择更具描述性的内容:

代码语言:javascript
复制
CREATE DATABASE myproject;

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

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

代码语言:javascript
复制
CREATE USER myprojectuser WITH PASSWORD 'password';

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

我们将默认编码设置为UTF-8,这是Django所期望的。我们还将默认事务隔离方案设置为“read committed”,它阻止从未提交的事务中读取。最后,我们正在设定时区。默认情况下,我们的Django项目将设置为使用UTC

代码语言:javascript
复制
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';

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

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

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

代码语言:javascript
复制
\q

退出postgres用户的shell会话以返回常规用户的shell会话:

代码语言:javascript
复制
exit

在虚拟环境中安装Django

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

您可以通过键入以下内容获取允许您创建这些环境的virtualenv包:

代码语言:javascript
复制
sudo pip install virtualenv

创建一个目录来保存Django项目。之后移入目录:

代码语言:javascript
复制
mkdir ~/myproject
cd ~/myproject

我们可以通过输入以下内容创建一个虚拟环境来存储我们的Django项目的Python需求:

代码语言:javascript
复制
virtualenv myprojectenv

这将安装Python的本地副本并pip进入项目目录中名叫myprojectenv的目录。

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

代码语言:javascript
复制
source myprojectenv/bin/activate

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

一旦您的虚拟环境处于活动状态,您就可以安装Django pip。我们还将安装psycopg2允许我们使用我们配置的数据库的包:

代码语言:javascript
复制
pip install django psycopg2

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

代码语言:javascript
复制
django-admin.py startproject myproject .

配置Django数据库设置

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

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

代码语言:javascript
复制
nano ~/myproject/myproject/settings.py

在文件底部,您将看到如下所示的DATABASES部分:

代码语言:javascript
复制
. . .
​
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
​
. . .

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

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

代码语言:javascript
复制
. . .
​
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}
​
. . .

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

迁移数据库并测试您的项目

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

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

代码语言:javascript
复制
cd ~/myproject
python manage.py makemigrations
python manage.py migrate

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

代码语言:javascript
复制
python manage.py createsuperuser

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

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

代码语言:javascript
复制
python manage.py runserver 0.0.0.0:8000

在Web浏览器中,通过访问后跟:8000的服务器的域名或IP地址,来访问默认的Django根页面:

代码语言:javascript
复制
http://server_domain_or_IP:8000

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

附加/admin到URL的末尾,您应该能够访问管理界面的登录屏幕:

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

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

通过访问管理界面,我们已确认我们的数据库已存储了我们的用户帐户信息,并且可以对其进行适当访问。

结论

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

更多CentOS教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Use PostgreSQL with your Django Application on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • 从CentOS和EPEL存储库安装组件
  • 执行初始PostgreSQL配置
  • 创建数据库和数据库用户
  • 在虚拟环境中安装Django
  • 配置Django数据库设置
  • 迁移数据库并测试您的项目
  • 结论
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档