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并设置编程环境》来安装这些工具并设置虚拟环境。

第一步——安装pgAdmin及其依赖项

截至目前,pgAdmin的最新版本是pgAdmin 4,而官方Ubuntu软件源中提供的最新版本是pgAdmin 3。虽然pgAdmin 3不再得到支持,但项目维护人员建议安装pgAdmin 4。在这一步中,我们将介绍在虚拟环境中安装pgAdmin 4的最新版本,并使用apt安装其依赖项的过程(按照项目开发团队的建议)。

首先,如果你最近还没有这么做的话,请更新你的服务器软件包索引。

  1. sudo apt update

 

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

  1. sudo apt install libgmp3-dev libpq-dev

 

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

  1. sudo mkdir -p /var/lib/pgadmin4/sessions
  2. sudo mkdir /var/lib/pgadmin4/storage
  3. sudo mkdir /var/log/pgadmin4

 

然后,将这些目录的所有权更改为您的非root用户和组。这是必要的,因为它们目前归您的root用户所有,但我们将从您的非root用户的虚拟环境安装pgAdmin,并且安装过程涉及在这些目录中创建一些文件。然而,在安装完成后,我们将更改所有权为www-data用户和组,以便可以提供给Web服务。

  1. sudo chown -R sammy:sammy /var/lib/pgadmin4
  2. sudo chown -R sammy:sammy /var/log/pgadmin4

 

接下来,打开您的虚拟环境。导航到您的编程环境所在的目录并激活它。按照前置 Python 3 教程的命名惯例,我们将进入环境目录并激活 my_env 环境。

  1. cd environments/
  2. source my_env/bin/activate

 

在激活虚拟环境后,确保您的系统上安装了最新版本的pip是明智的选择。默认的Ubuntu 18.04软件库中可用的pip版本为9.0.1,而最新版本为21.0.1。如果您按照预备教程中的Python安装教程安装了python3-pip软件包,但没有升级到最新版本,那么在配置pgAdmin的下一步时会遇到问题。

要将pip升级到最新版本,请执行以下命令进行操作:

  1. python -m pip install -U pip

 

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

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

 

接下来安装wheel包,这是wheel打包标准的参考实现。作为Python库,这个包用于构建wheels,并包含一个用于处理.whl文件的命令行工具。

  1. python -m pip install wheel

 

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

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

 

接下来,在教程中将与Nginx一起使用的Python WSGI服务器——Gunicorn安装上。以后将用它来提供pgadmin的Web界面。

  1. python -m pip install gunicorn

 

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

步骤2 — 配置pgAdmin 4

虽然你的服务器上已经安装了pgAdmin,但仍然需要进行一些步骤来确保它具有必要的权限和配置,以便正确地提供Web界面服务。

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

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

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

 

请在你的编辑器中添加以下内容:

环境 / 我的_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以服务器模式运行,而不是桌面模式。

请注意,这些文件路径都指向您在第一步中创建的目录。

在添加这些行后,保存并关闭文件。如果你使用的是nano,通过按下CTRL + X,然后按Y,最后按ENTER来进行关闭。

有了这些配置,运行pgAdmin设置脚本来设置您的登录凭据。

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

 

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

输出

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

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

第三步 — 启动 Gunicorn 并配置 Nginx

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

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

您的域名的/etc/nginx/sites-available/配置文件

server {
    listen 80;
    listen [::]:80;

    server_name your_domain www.your_domain;
        
    location / {
        proxy_pass http://unix:/tmp/pgadmin4.sock;
        include proxy_params;
    }
}

使用这个反向代理配置可以让你在本地浏览器中访问到你的Gunicorn服务器。通过pgAdmin应用程序启动你的Gunicorn服务器。

  1. 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将绑定进程到你的终端。为了更长期的解决方案,可以使用像Supervisor这样的程序来调用Gunicorn。你可以按照这篇教程在Ubuntu和Debian VPS上安装和管理Supervisor。使用Gunicorn作为应用服务器,通过Nginx反向代理访问,您就可以在网络浏览器中访问pgAdmin。

第四步 – 访问pgAdmin

在您的本地计算机上,打开您偏好的网络浏览器,然后输入服务器的IP地址进行访问。

http://your_server_ip

一旦到达那里,你将会看到一个类似如下的登录界面。

pgAdmin登录界面

输入您在第二步中定义的登录凭证,然后您将进入pgAdmin的欢迎屏幕:

pgAdmin欢迎页面

既然您确认可以访问pgAdmin界面,那么唯一剩下的就是将pgAdmin连接到您的PostgreSQL数据库。但在此之前,您需要对您的PostgreSQL超级用户的配置进行一个小的更改。

步骤5 — 配置您的PostgreSQL用户

如果您按照前提的PostgreSQL教程操作,您的服务器上应该已经安装了PostgreSQL,并配置了一个新的超级用户角色和数据库。

在PostgreSQL中,默认情况下,您使用”身份协议”或”ident”身份验证方法作为数据库用户进行身份验证。这涉及到PostgreSQL获取客户端的Ubuntu用户名并将其用作允许的数据库用户名。这在许多情况下可以提供更高的安全性,但在您希望外部程序(如pgAdmin)连接到您的数据库的情况下,可能会引起问题。为解决这个问题,我们将为此PostgreSQL角色设置一个密码,允许pgAdmin连接到您的数据库。

从终端中以超级用户身份打开PostgreSQL提示符。

  1. sudo -u sammy psql

 

从PostgreSQL提示符处,将用户配置文件更新为您选择的强密码。

  1. ALTER USER sammy PASSWORD password;

 

然后退出PostgreSQL提示符。

  1. \q

 

接下来,在浏览器中返回到您的pgAdmin 4界面,找到屏幕左侧的浏览器菜单。右键单击”服务器”以打开上下文菜单,将鼠标悬停在”创建”上方,然后点击”服务器”…

创建服务器上下文菜单

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

在”常规”选项卡中,输入此服务器的名称。可以是任何您喜欢的,但将其命名清晰明了可能会更有帮助。以我们的示例而言,该服务器被命名为Sammy-server-1。

创建服务器 - 常规选项卡

接下来,单击连接选项卡。在主机名/地址字段中输入localhost。默认情况下,端口应该设置为5432,这是适用于这个设置的默认端口,也是PostgreSQL使用的默认端口。

在”维护数据库”字段中,输入您想连接的数据库名称。请注意,该数据库必须已在您的服务器上创建。然后,在”用户名”和”密码”字段中分别输入您之前配置的PostgreSQL用户名和密码。

创建服务器 - 连接选项卡

其他标签中的空字段是可选的,只有在您有特定的设置需要的情况下才需要填写。点击保存按钮,数据库将出现在浏览器菜单的服务器下方。

您已成功将pgAdmin4连接到PostgreSQL数据库。您可以从pgAdmin仪表板上做与从PostgreSQL提示符上相同的各种操作。为了说明这一点,我们将通过Web界面创建一个示例表并填充一些样例数据。

第六步 – 在pgAdmin仪表板中创建一个表

在pgAdmin仪表板上,定位窗口左侧的浏览器菜单。点击服务器旁边的加号符号(+)展开其中的树状菜单。接下来,点击之前添加的服务器左侧的加号符号展开,然后展开数据库(在我们的例子中是sammy),再展开模式(1)。您应该看到类似以下的树状菜单:

展开的浏览器树状菜单

在表格列表项上单击右键,然后将鼠标悬停在”创建”上,再单击”表格”选项。

创建表格上下文菜单

这将打开一个创建表窗口。在窗口的”常规”选项卡下,输入表格的名称。名称可以是您喜欢的任何内容,但为了简单起见,我们将称其为表格-01。

创建表格 - 常规选项卡

然后导航到”列”选项卡,在窗口的右上角点击+符号,添加一些列。当添加列时,您需要给它一个名称和数据类型,并且如果所选的数据类型要求,则需要选择一个长度。

此外,官方的PostgreSQL文档指出,向表中添加主键通常是最佳实践。主键是一个约束,用于指示特定列或一组列可以用作该表中行的特殊标识。这不是必需的,但如果您希望将一个或多个列设置为主键,请将开关从”否”切换到”是”。

点击保存按钮以创建表格。

创建表格 - 开启主键的列选项卡

到这个地方,您已经创建了一张表并添加了几列。然而,这些列还没有包含任何数据。要向您的新表添加数据,请在浏览器菜单中右键单击表的名称,将鼠标悬停在”脚本”上并点击”插入脚本”。

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中,执行图标是一道闪电图标(⚡)。

要查看表格及其中的所有数据,请再次在浏览器菜单中右键单击表格名称,将光标悬停在”查看/编辑数据”上,然后选择”全部行”。

查看/编辑数据,全部行上下文菜单

这将打开另一个新面板,在该面板的下方,您可以在下方面板的数据输出选项卡中查看该表中存储的所有数据。

查看数据 - 示例数据输出

通过pgAdmin网络界面,您已成功创建了一张表并填充了一些数据。当然,这只是使用pgAdmin创建表的一种方法。例如,您也可以使用SQL而不是本步骤中描述的基于图形用户界面的方法来创建和填充表格。

结论

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

若想更全面地了解如何充分发挥pgAdmin的所有功能,请查阅该项目的文档。另外,您也可以通过我们社区关于PostgreSQL的教程来更深入了解。

bannerAds