如何在Ubuntu20.04上将PostgreSQL与Django应用程序一起使用
介绍
Django 是一个用于快速创建 Python 应用程序的灵活框架。 默认情况下,Django 应用程序配置为将数据存储到轻量级 SQLite 数据库文件中。 虽然这在某些负载下运行良好,但更传统的数据库管理系统可以提高生产性能。
在本指南中,您将安装和配置 PostgreSQL(通常称为 Postgres)以与您的 Django 应用程序一起使用。 您将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的 Django 项目以使用此后端。
先决条件
- 您将需要一个干净的 Ubuntu 20.04 服务器实例,其非 root 用户配置为
sudo
权限。 按照我们的 初始服务器设置指南 了解如何设置。
当您准备好继续时,以您的 sudo
用户身份登录。
第 1 步 – 从 Ubuntu 存储库安装组件
首先,您将安装基本组件。 这包括 pip
,用于安装和管理 Python 组件的 Python 包管理器,以及带有相关库的数据库软件。
您将使用 Ubuntu 20.04 附带的 Python 3。 通过键入以下内容开始安装:
sudo apt update sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib
安装完成后,您可以继续访问数据库。
第 2 步 – 创建数据库和数据库用户
默认情况下,Postgres 使用称为“对等身份验证”的身份验证方案进行本地连接。 基本上,这意味着如果用户的操作系统用户名与有效的 Postgres 用户名匹配,则该用户无需进一步身份验证即可登录。
在 Postgres 安装期间,创建了一个名为 postgres 的操作系统用户,以对应于 postgres PostgreSQL 管理用户。 您需要使用此用户来执行管理任务。 您可以使用 sudo
并使用 -u
选项传入用户名。
通过键入以下内容登录到交互式 Postgres 会话:
sudo -u postgres psql
首先,您将为 Django 项目创建一个数据库。 出于安全原因,每个项目都应该有自己的隔离数据库。 在本指南中,我们将数据库称为 myproject
,但最好选择更具描述性的名称:
CREATE DATABASE myproject;
笔记
请记住在 SQL 提示符处以分号结束所有命令。
接下来,您将创建一个数据库用户,您将使用该用户连接到数据库并与之交互。 将密码设置为强大且安全的密码:
CREATE USER myprojectuser WITH PASSWORD 'password';
之后,您将为刚刚创建的用户修改一些连接参数。 这将加快数据库操作,从而不必在每次建立连接时都查询和设置正确的值。
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';
您将默认编码设置为 Django 期望的 UTF-8。 您还将默认事务隔离方案设置为“已提交读”,这会阻止来自未提交事务的读取。 最后,您正在设置时区。 默认情况下,您的 Django 项目将设置为使用 UTC
。 这些都是来自 Django 项目本身 的建议。
现在,您需要做的就是授予数据库用户对您创建的数据库的访问权限:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
退出 SQL 提示符以返回到 postgres 用户的 shell 会话:
\q
在虚拟环境中安装 Django
现在您的数据库已设置完毕,您可以安装 Django。 为了获得更好的灵活性,您将在 Python 虚拟环境中安装 Django 及其所有依赖项。 virtualenv
包允许您轻松创建这些环境。
要安装 virtualenv
,请键入:
sudo pip3 install virtualenv
制作并移动到一个目录来保存你的 Django 项目:
mkdir ~/myproject cd ~/myproject
您可以通过键入以下内容来创建一个虚拟环境来存储 Django 项目的 Python 需求:
python3 -m virtualenv myprojectenv
这会将 Python 的本地副本和本地 pip
命令安装到项目目录中名为 myprojectenv
的目录中。
在虚拟环境中安装应用程序之前,您需要激活它。 您可以通过键入:
source myprojectenv/bin/activate
您的提示将更改以指示您现在正在虚拟环境中操作。 它看起来像这样 (myprojectenv)user@host:~/myproject$
。
一旦您的虚拟环境处于活动状态,您就可以使用 pip
安装 Django 的正式版本。 您还将安装 psycopg2
包,它允许我们使用您配置的 Postgres 数据库:
笔记
无论你使用的是哪个版本的 Python,在激活虚拟环境时,都应该使用 pip
命令(而不是 pip3
)。
pip install Django psycopg2
您现在可以在 myproject
目录中启动 Django 项目。 这将创建一个同名的子目录来保存代码本身,并将在当前目录中创建一个管理脚本。 确保在命令末尾添加点,以便正确设置:
django-admin startproject myproject .
配置 Django 数据库设置
现在您有了一个项目,您需要将其配置为使用您创建的数据库。
打开位于子项目目录中的主 Django 项目设置文件:
nano ~/myproject/myproject/settings.py
在文件的底部,您将看到如下所示的 DATABASES
部分:
~/myproject/myproject/settings.py
. . . DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } . . .
这当前配置为使用 SQLite 作为数据库。 您需要更改它以便使用您的 PostgreSQL 数据库。
首先,更改引擎,使其使用 postgresql
适配器而不是 sqlite3
适配器。 对于 NAME
,请使用数据库的名称(本例中为 myproject
)。 您还需要添加登录凭据。 您需要用户名、密码和主机才能连接。 您将添加端口选项并将其留空,以便选择默认值:
~/myproject/myproject/settings.py
. . . DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'myproject', 'USER': 'myprojectuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } . . .
当您在这里时,您还需要调整 ALLOWED_HOSTS
指令。 这定义了允许连接到 Django 实例的地址或域名的白名单。 任何带有不在此列表中的 Host 标头的传入请求都将引发异常。 Django 要求您设置它以防止某一类安全漏洞。
在下面的代码片段中,有一些注释掉的示例用于演示:
~/myproject/myproject/settings.py
. . . # The simplest case: just add the domain name(s) and IP addresses of your Django server # ALLOWED_HOSTS = [ 'example.com', '203.0.113.5'] # To respond to 'example.com' and any subdomains, start the domain with a dot # ALLOWED_HOSTS = ['.example.com', '203.0.113.5'] ALLOWED_HOSTS = ['your_server_domain_or_IP']
在方括号中,列出与您的 Django 服务器关联的 IP 地址或域名。 每个项目都应列在引号中,条目之间用逗号分隔。 如果您希望请求整个域和任何子域,请在条目的开头添加句点。
完成后,保存并关闭文件。
迁移数据库并测试您的项目
现在已经配置了 Django 设置,您可以将数据结构迁移到数据库并测试服务器。
您可以从创建迁移并将其应用到数据库开始。 由于您还没有任何实际数据,这将简单地设置初始数据库结构:
cd ~/myproject python manage.py makemigrations python manage.py migrate
创建数据库结构后,您可以通过键入以下内容创建管理帐户:
python manage.py createsuperuser
系统将要求您选择用户名,提供电子邮件地址,然后选择并确认帐户密码。
如果您遵循初始服务器设置指南,则应该安装 UFW 防火墙。 在您可以访问 Django 开发服务器以测试您的数据库之前,您需要在防火墙中打开该端口。
通过键入以下内容允许到端口的外部连接:
sudo ufw allow 8000
一旦你打开了端口,你可以通过启动 Django 开发服务器来测试你的数据库是否正确执行:
python manage.py runserver 0.0.0.0:8000
在您的网络浏览器中,访问您的服务器的域名或 IP 地址,后跟 :8000
以访问默认的 Django 根页面:
http://server_domain_or_IP:8000
您应该会看到默认的索引页面:
将 /admin
附加到 URL 的末尾,您应该能够访问管理界面的登录屏幕:
输入您刚刚使用 createsuperuser
命令创建的用户名和密码。 然后您将被带到管理界面:
完成调查后,您可以通过在终端窗口中按 CTRL-C 来停止开发服务器。
通过访问管理界面,您已确认您的数据库已存储您的用户帐户信息并且可以适当地访问它。
结论
在本指南中,您演示了如何安装和配置 PostgreSQL 作为 Django 项目的后端数据库。 虽然 SQLite 可以轻松处理开发和轻型生产使用期间的负载,但大多数项目都受益于实现功能更全的数据库管理系统。
要进一步推进您的项目,请参阅我们的 如何在 Ubuntu 20.04 上使用 Postgres、Nginx 和 Gunicorn 设置 Django 的指南。