在Ubuntu 18.04上安装和配置pgAdmin 4服务器模式的方法

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 在Ubuntu 18.04上安装和配置pgAdmin 4服务器模式的方法

简介

pgAdmin 是一个针对 PostgreSQL 及其相关数据库管理系统的开源管理和开发平台。它使用 Python 和 jQuery 编写,支持 PostgreSQL 中的所有功能。您可以使用 pgAdmin 从编写基本的 SQL 查询到监视数据库和配置高级数据库架构等各种操作。

在本教程中,我们将演示如何在 Ubuntu 18.04 服务器上安装和配置最新版本的 pgAdmin,通过 Web 浏览器访问 pgAdmin,并将其连接到服务器上的 PostgreSQL 数据库。

先决条件

要完成本教程,您需要:

  • 运行 Ubuntu 18.04 的服务器。该服务器应具有一个具有 sudo 权限的非 root 用户,并配置了 ufw 防火墙。如果需要帮助设置,请参考我们的《Ubuntu 18.04 初始服务器设置指南》。
  • 已安装并配置 Nginx 作为 http://unix:/tmp/pgadmin4.sock 的反向代理,按照《如何在 Ubuntu 22.04 上配置 Nginx 作为反向代理》中的第 1 和 2 步进行设置。
  • 在服务器上安装了 PostgreSQL。您可以按照我们的《如何在 Ubuntu 18.04 上安装和使用 PostgreSQL》指南进行设置。在按照该指南操作时,务必创建一个新角色和数据库,因为您需要这两者来连接 pgAdmin 到您的 PostgreSQL 实例。
  • 在服务器上安装了 Python 3 和 venv。请按照《如何在 Ubuntu 18.04 服务器上安装 Python 3 并设置编程环境》安装这些工具并设置虚拟环境。

步骤 1 — 安装 pgAdmin 及其依赖项

截至本文撰写时,pgAdmin 的最新版本是 pgAdmin 4,而通过官方 Ubuntu 软件仓库提供的最新版本是 pgAdmin 3。尽管 pgAdmin 3 不再受支持,项目维护人员建议安装 pgAdmin 4。在本步骤中,我们将介绍在虚拟环境中安装最新版本的 pgAdmin 4(正如项目开发团队建议的),并使用 apt 安装其依赖项的过程。

首先,如果您最近没有更新过服务器的软件包索引,请更新:

sudo apt update

接下来,安装以下依赖项。这些包括 libgmp3-dev,一个多精度算术库;libpq-dev,其中包括与 PostgreSQL 后端通信的头文件和静态库:

sudo apt install libgmp3-dev libpq-dev

然后,创建一些目录,用于存储 pgAdmin 的会话数据、存储数据和日志:

sudo mkdir -p /var/lib/pgadmin4/sessions
sudo mkdir /var/lib/pgadmin4/storage
sudo mkdir /var/log/pgadmin4

接下来,将这些目录的所有权更改为您的非 root 用户和组。这是必要的,因为当前这些目录的所有者是您的 root 用户,但我们将从您的非 root 用户拥有的虚拟环境中安装 pgAdmin,并且安装过程中会在这些目录中创建一些文件。但在安装完成后,我们将把所有权更改为 www-data 用户和组,以便可以提供给 Web:

sudo chown -R sammy:sammy /var/lib/pgadmin4
sudo chown -R sammy:sammy /var/log/pgadmin4

接下来,打开您的虚拟环境。转到您的编程环境所在的目录并激活它。按照先决条件 Python 3 教程的命名约定,我们将转到 environments 目录并激活 my_env 环境:

cd environments/
source my_env/bin/activate

激活虚拟环境后,最好确保您的系统上安装了最新版本的 pip。默认 Ubuntu 18.04 软件仓库中提供的 pip 版本是 9.0.1,而最新版本是 21.0.1。如果您按照先决条件 Python 安装教程中的步骤安装了 python3-pip 包,但尚未将其升级到最新版本,那么在下一步配置 pgAdmin 时将会遇到问题。

要将 pip 升级到最新版本,请运行以下命令:

python -m pip install -U pip

接下来,将 pgAdmin 4 源代码下载到您的计算机上。要找到最新版本的源代码,请转到 pgAdmin 4(Python Wheel)下载页面。单击最新版本(本文撰写时为 v6.10),然后在下一页单击pip的链接。从文件浏览器页面,复制以 .whl 结尾的文件链接,这是 Python 发行版中使用的标准构建包格式。然后返回到您的终端并运行以下 wget 命令,确保用您从 PostgreSQL 网站复制的链接替换,以将 .whl 文件下载到您的服务器:

wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v6.10/pip/pgadmin4-6.10-py3-none-any.whl

接下来,使用以下命令安装 wheel 包,这是 wheel 打包标准的参考实现。作为 Python 库,该包用作构建 wheel 的扩展,并包括用于处理 .whl 文件的命令行工具:

python -m pip install wheel

然后使用以下命令安装 pgAdmin 4 包:

python -m pip install pgadmin4-6.10-py3-none-any.whl

接下来,安装 Gunicorn,这是一个 Python WSGI 服务器,将在本教程后面与 Nginx 一起用于提供 pgadmin Web 接口:

python -m pip install gunicorn

这样就完成了安装 pgAdmin 及其依赖项。但在将其连接到数据库之前,您需要对程序的配置进行一些更改。

步骤 2 — 配置 pgAdmin 4

虽然 pgAdmin 已经安装在您的服务器上,但仍然有一些步骤需要进行,以确保它具有所需的权限和配置,以便正确提供 Web 接口。

pgAdmin 的主配置文件 config.py 在任何其他配置文件之前被读取。它的内容可以用作进一步配置设置的参考点,这些设置可以在 pgAdmin 的其他配置文件中指定,但为了避免意外错误,您不应该直接编辑 config.py 文件。我们将向一个新文件添加一些配置更改,命名为 config_local.py,该文件将在主配置文件之后被读取。

现在使用您喜欢的文本编辑器创建此文件。在这里,我们将使用 nano

nano my_env/lib/python3.10/site-packages/pgadmin4/config_local.py

在您的编辑器中,添加以下内容:

LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
STORAGE_DIR = '/var/lib/pgadmin4/storage'
SERVER_MODE = True

这里是这五个指令的作用:

  • LOG_FILE:定义了 pgAdmin 日志将存储的文件。
  • SQLITE_PATH:pgAdmin 将用户相关数据存储在一个 SQLite 数据库中,该指令将 pgAdmin 软件指向此配置数据库。由于此文件位于持久目录 /var/lib/pgadmin4/ 下,因此在升级后不会丢失用户数据。
  • SESSION_DB_PATH:指定用于存储会话数据的目录。
  • STORAGE_DIR:定义了 pgAdmin 将存储其他数据(如备份和安全证书)的位置。
  • SERVER_MODE:将此指令设置为 True 告诉 pgAdmin 以服务器模式运行,而不是桌面模式。

请注意,每个文件路径都指向您在步骤 1 中创建的目录。

添加这些行后,保存并关闭文件。如果您使用的是 nano,请按 CTRL + X,然后按 Y,最后按 ENTER

配置完成后,运行 pgAdmin 设置脚本以设置您的登录凭据:

python my_env/lib/python3.10/site-packages/pgadmin4/setup.py

运行此命令后,您将看到一个提示,询问您的电子邮件地址和密码。这将作为您以后访问 pgAdmin 时的登录凭据,因此请务必记住或记下您在此输入的内容:

. . .
输入用于初始 pgAdmin 用户帐户的电子邮件地址和密码:
电子邮件地址:sammy@example.com
密码:
重新输入密码:

至此,pgAdmin 已经完全配置好。但是,该程序尚未从您的服务器上提供服务,因此无法访问。为了解决这个问题,我们将配置 Gunicorn 和 Nginx 来提供 pgAdmin,以便您可以通过 Web 浏览器访问其用户界面。

步骤 3 — 启动 Gunicorn 并配置 Nginx

您将使用 Gunicorn 作为 Web 应用程序来提供 pgAdmin。但是,作为应用程序服务器,Gunicorn 只能在本地访问,无法通过互联网访问。为了使其可以远程访问,您需要使用 Nginx 作为反向代理。

完成设置 Nginx 作为反向代理的先决条件后,您的 Nginx 配置文件将包含以下内容:

server {
    listen 80;
    listen [::]:80;
    server_name your_domain www.your_domain;
        
    location / {
        proxy_pass http://unix:/tmp/pgadmin4.sock;
        include proxy_params;
    }
}

这个反向代理配置使您的 Gunicorn 服务器可以在本地浏览器中访问。使用以下命令启动您的 Gunicorn 服务器与 pgAdmin 应用程序:

gunicorn --bind unix:/tmp/pgadmin4.sock --workers=1 --threads=25 --chdir ~/environments/my_env/lib/python3.10/site-packages/pgadmin4 pgAdmin4:app
[2022-08-29 00:19:11 +0000] [7134] [INFO] Starting gunicorn 20.1.0
[2022-08-29 00:19:11 +0000] [7134] [INFO] Listening at: unix:/tmp/pgadmin4.sock (7134)
[2022-08-29 00:19:11 +0000] [7134] [INFO] Using worker: gthread
[2022-08-29 00:19:11 +0000] [7135] [INFO] Booting worker with pid: 7135

通过 Gunicorn 作为应用程序服务器并通过您的 Nginx 反向代理进行访问,您现在可以在 Web 浏览器中访问 pgAdmin 了。

步骤 4 — 访问 pgAdmin

在本地机器上,打开你喜欢的网络浏览器,然后输入你服务器的 IP 地址:

http://your_server_ip

输入后,会出现一个类似下面的登录界面:

!pgAdmin 登录界面

输入在第 2 步中定义的登录凭据,然后你将进入 pgAdmin 欢迎界面:

!pgAdmin 欢迎页面

现在你已经确认可以访问 pgAdmin 界面,剩下的就是将 pgAdmin 连接到你的 PostgreSQL 数据库。不过,在这之前,你需要对你的 PostgreSQL 超级用户进行一些微小的配置。

步骤 5 — 配置你的 PostgreSQL 用户

如果你按照先决条件 PostgreSQL 教程进行了操作,那么你应该已经在服务器上安装了 PostgreSQL,并设置了一个新的超级用户角色和数据库。

在 PostgreSQL 中,默认情况下,你使用“身份验证协议”或“ident”身份验证方法来认证数据库用户。这意味着 PostgreSQL 会获取客户端的 Ubuntu 用户名,并将其用作允许的数据库用户名。在许多情况下,这可以提供更高的安全性,但也可能在你希望外部程序(如 pgAdmin)连接到你的数据库时出现问题。为了解决这个问题,我们将为这个 PostgreSQL 角色设置一个密码,这样 pgAdmin 就可以连接到你的数据库了。

从你的终端,以超级用户角色打开 PostgreSQL 提示符:

sudo -u sammy psql

在 PostgreSQL 提示符下,更新用户配置,设置一个你选择的强密码:

ALTER USER sammy PASSWORD 'password';

然后退出 PostgreSQL 提示符:

\q

接下来,回到你的浏览器中的 pgAdmin 4 界面,找到左侧的 Browser 菜单。右键单击 Servers 以打开上下文菜单,将鼠标悬停在 Create 上,然后单击 Server…

!创建服务器上下文菜单

这将在你的浏览器中弹出一个窗口,在其中你将输入有关你的服务器、角色和数据库的信息。

General 选项卡中,输入此服务器的名称。这可以是任何你喜欢的名称,但最好是一些描述性的内容。在我们的示例中,服务器的名称是 Sammy-server-1

!创建服务器 - General 选项卡

接下来,点击 Connection 选项卡。在 Host name/address 字段中,输入 localhostPort 应该默认设置为 5432,这对于这个设置来说是有效的,因为这是 PostgreSQL 使用的默认端口。

Maintenance database 字段中,输入你想要连接的数据库的名称。请注意,这个数据库必须已经在你的服务器上创建好。然后,在 UsernamePassword 字段中,分别输入你之前配置的 PostgreSQL 用户名和密码。

!创建服务器 - Connection 选项卡

其他选项卡中的空字段是可选的,只有在你有特定设置需要时才需要填写它们。点击 Save 按钮,数据库将出现在 Browser 菜单下的 Servers 中。

你已成功将 pgAdmin4 连接到你的 PostgreSQL 数据库。你可以在 pgAdmin 仪表板上执行几乎任何你在 PostgreSQL 提示符上可以执行的操作。为了说明这一点,我们将通过 Web 界面创建一个示例表,并向其中填充一些示例数据。

步骤 6 — 在 pgAdmin 仪表板中创建表

从 pgAdmin 仪表板中,找到窗口左侧的 Browser 菜单。单击 Servers (1) 旁边的加号(+)以展开其中的树形菜单。接下来,单击上一步中添加的服务器(在我们的示例中为 Sammy-server-1)左侧的加号,然后展开 Databases、你添加的数据库的名称(在我们的示例中为 sammy),然后展开 Schemas (1)。你应该会看到如下所示的树形菜单:

!展开的 Browser 树形菜单

右键单击 Tables,然后将鼠标悬停在 Create 上,单击 Table…

!创建表上下文菜单

这将打开一个 Create-Table 窗口。在这个窗口的 General 选项卡下,为表输入一个名称。这可以是任何你喜欢的名称,但为了简单起见,我们将其称为 table-01

!创建表 - General 选项卡

然后转到 Columns 选项卡,并单击窗口右上角的加号(+)以添加一些列。在添加列时,你需要为其指定一个 Name 和一个 Data type,如果数据类型要求,你可能还需要选择一个 Length

此外,官方的 PostgreSQL 文档指出,向表添加主键通常是最佳实践。主键 是一个约束,指示可以用作表中行的特殊标识符的特定列或列集。这不是必需的,但如果你想将一个或多个列设置为主键,可以将右侧的开关从 No 切换到 Yes

点击 Save 按钮以创建表。

!创建表 - 打开主键的 Columns 选项卡

到目前为止,你已经创建了一个表,并向其中添加了一些列。不过,这些列还没有包含任何数据。要向新表添加数据,右键单击 Browser 菜单中表的名称,将鼠标悬停在 Scripts 上,然后单击 INSERT Script

!INSERT 脚本上下文菜单

这将在仪表板上打开一个新面板。在顶部,你将看到一个部分填充的 INSERT 语句,其中包含适当的表和列名称。请用一些虚拟数据替换问号(?),确保你添加的数据与你为每列选择的数据类型相匹配。请注意,你还可以通过在新的括号组中添加每行来添加多行数据,每组括号之间用逗号分隔,如下例所示。

如果愿意,可以用以下示例 INSERT 语句替换部分填充的 INSERT 脚本:

INSERT INTO public."table-01"(
    col1, col2, col3)
    VALUES ('Juneau', 14, 337), ('Bismark', 90, 2334), ('Lansing', 51, 556);

!示例 INSERT 语句

点击侧向三角形图标()以执行 INSERT 语句。请注意,在较旧版本的 pgAdmin 中,执行图标是一个闪电图标()。

要查看表和其中的所有数据,再次右键单击 Browser 菜单中你的表的名称,将鼠标悬停在 View/Edit Data 上,然后选择 All Rows

!查看/编辑数据,所有行上下文菜单

这将在仪表板上打开另一个新面板,在下面的 Data Output 选项卡中,你可以查看表中保存的所有数据。

!查看数据 - 示例数据输出

到此为止,你已成功通过 pgAdmin Web 界面创建了一个表,并向其中填充了一些数据。当然,这只是你可以使用 pgAdmin 创建表的一种方法。例如,你也可以使用 SQL 而不是本步骤中描述的基于 GUI 的方法来创建和填充表。

结论

在本指南中,您学习了如何从 Python 虚拟环境安装 pgAdmin 4,配置它,使用 Gunicorn 和 Nginx 将其提供给 Web,并且如何将其连接到 PostgreSQL 数据库。此外,本指南还介绍了一种用于创建和填充表的方法,但 pgAdmin 不仅仅可以用于创建和编辑表格。

要了解如何充分利用 pgAdmin 的所有功能,我们鼓励您查阅该项目的文档。您也可以通过我们社区关于 PostgreSQL 的教程了解更多信息。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
19天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
17天前
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
41 3
|
20天前
|
存储 缓存 固态存储
阿里云服务器2核8G、4核16G、8核32G配置租用收费标准与活动价格参考
2核8G、8核32G、4核16G配置的云服务器处理器与内存比为1:4,这种配比的云服务器一般适用于中小型数据库系统、缓存、搜索集群和企业办公类应用等通用型场景,因此,多为企业级用户选择。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
12天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
17天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
17天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。
|
25天前
|
弹性计算
阿里云2核16G服务器多少钱一年?亲测价格查询1个月和1小时收费标准
阿里云2核16G服务器提供多种ECS实例规格,内存型r8i实例1年6折优惠价为1901元,按月收费334.19元,按小时收费0.696221元。更多规格及详细报价请访问阿里云ECS页面。
63 9
|
22天前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
25天前
|
弹性计算 异构计算
2024年阿里云GPU服务器多少钱1小时?亲测价格查询方法
2024年阿里云GPU服务器每小时收费因实例规格不同而异。可通过阿里云GPU服务器页面选择“按量付费”查看具体价格。例如,NVIDIA A100的gn7e实例为34.742元/小时,NVIDIA A10的gn7i实例为12.710156元/小时。更多详情请访问阿里云官网。
74 2
|
1月前
|
存储 弹性计算 NoSQL
"从入门到实践,全方位解析云服务器ECS的秘密——手把手教你轻松驾驭阿里云的强大计算力!"
【10月更文挑战第23天】云服务器ECS(Elastic Compute Service)是阿里云提供的基础云计算服务,允许用户在云端租用和管理虚拟服务器。ECS具有弹性伸缩、按需付费、简单易用等特点,适用于网站托管、数据库部署、大数据分析等多种场景。本文介绍ECS的基本概念、使用场景及快速上手指南。
73 3