如何在Ubuntu 22.04上以服务器模式安装和配置pgAdmin 4

开始

引言

开头

导言

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

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

先决条件

完成本教程,你将需要以下物品:

  • A server running Ubuntu 22.04. This server should have a non-root user with sudo privileges, as well as a firewall configured with ufw. For help with setting this up, follow our Initial Server Setup Guide for Ubuntu 22.04.
  • Nginx installed and configured as a reverse proxy for http://unix:/tmp/pgadmin4.sock, following Step 1 and 2 of How To Configure Nginx as a Reverse Proxy on Ubuntu 22.04.
  • PostgreSQL installed on your server. You can set this up by following our guide on How To Install and Use PostgreSQL on Ubuntu 22.04. As you follow this guide, be sure to create a new role and database, as you will need both to connect pgAdmin to your PostgreSQL instance.
  • Python 3 and venv installed on your server. Follow How To Install Python 3 and Set Up a Programming Environment on an Ubuntu 22.04 server to install these tools and set up a virtual environment.

第一步 – 安装 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是明智的。要将pip升级到最新版本,请运行以下命令:

  1. python -m pip install -U pip

 

使用pip来安装pgadmin4。

  1. python -m pip install pgadmin4==6.10

 

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

  1. python -m pip install gunicorn

 

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

第二步——配置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

 

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

这是一个路径,指向一个名为”config_local.py”的文件。这个文件位于”environments/my_env/lib/python3.10/site-packages/pgadmin4″目录下。
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: this defines the file in which pgAdmin’s logs will be stored.
  • SQLITE_PATH: pgAdmin stores user-related data in an SQLite database, and this directive points the pgAdmin software to this configuration database. Because this file is located under the persistent directory /var/lib/pgadmin4/, your user data will not be lost after you upgrade.
  • SESSION_DB_PATH: specifies which directory will be used to store session data.
  • STORAGE_DIR: defines where pgAdmin will store other data, like backups and security certificates.
  • SERVER_MODE: setting this directive to True tells pgAdmin to run in Server mode, as opposed to Desktop mode.

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

在添加了这些行之后,保存并关闭文件。如果你使用的是nano编辑器,按下CTRL + X,然后按Y,最后按ENTER以保存并关闭文件。

在配置完成后,运行pgAdmin设置脚本以设置登录凭据。

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

 

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

Output

. . . Enter the email address and password to use for the initial pgAdmin user account: Email address: sammy@example.com Password: Retype password:

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

步骤3 — 启动Gunicorn并配置Nginx。

你将使用Gunicorn作为应用程序的服务器,将pgAdmin作为Web应用程序提供。然而,作为应用程序服务器,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

 

Output

[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

Note

注意:以这种方式调用Gunicorn将绑定进程到你的终端。对于更长期的解决方案,请使用像Supervisor这样的程序来调用Gunicorn。你可以按照这个教程在Ubuntu和Debian VPS上安装和管理Supervisor。

当Gunicorn充当应用程序服务器,并经由Nginx反向代理提供访问时,您可以在Web浏览器中访问pgAdmin。

步骤4 — 访问pgAdmin

在您的本地计算机上,打开您偏爱的网络浏览器,并导航到您服务器的IP地址:

http://your_domain

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

pgAdmin login screen

输入您在步骤2中定义的登录凭证,您将会看到pgAdmin的欢迎界面。

pgAdmin Welcome Page

既然您确认您可以访问pgAdmin界面,现在所需要做的就是将pgAdmin连接到您的PostgreSQL数据库。不过,在这之前,您需要对您的PostgreSQL超级用户的配置进行一个小的更改。

第五步- 配置您的PostgreSQL用户

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

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

Create Server context menu

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

在“常规”选项卡中,输入此服务器的名称。可以随意取名,但建议使用一些描述性的词语。例如,我们将服务器命名为Sammy-server-1。

Create Server - General tab

接下来,点击连接选项卡。由于pgAdmin正在与您的Postgres数据库运行在同一台机器上,您可以使用Unix域套接字进行连接。与TCP套接字连接相比,Unix域套接字具有更高的性能和更低的延迟。这种方法还可以跳过设置密码的步骤。在”主机名/地址”字段中输入/var/run/postgresql。端口默认应该设置为5432,这适用于此设置,因为这是PostgreSQL默认使用的端口。

在维护数据库字段中,输入您想要连接的数据库的名称。请注意,该数据库必须已经在您的服务器上创建。然后,输入之前配置的PostgreSQL用户名。在这里,我们创建的数据库是sammy,用户名也是sammy。

Create Server - Connection tab

只要你有特定的设置,其他选项卡中的空字段是可选的,只有在有必要时才需要填写它们。点击保存按钮,数据库将出现在浏览器菜单中的服务器下。

你已成功将pgAdmin4连接到PostgreSQL数据库。你可以通过pgAdmin仪表板完成几乎与使用PostgreSQL命令行相同的任何操作。为了说明此点,我们将通过Web界面创建一个示例表并填充一些样本数据。

第六步 – 在pgAdmin概览页中创建表格

从pgAdmin仪表板上,找到窗口左侧的浏览器菜单。点击Servers (1)旁边的加号(+)来展开其中的树状菜单。接下来,点击先前添加的服务器(在我们的例子中是Sammy-server-1)左侧的加号,然后展开Databases、添加的数据库的名称(在我们的例子中是sammy)以及Schemas (1)。你应该会看到一个类似下面的树状菜单:

Expanded Browser tree menu

在表格列表项上点击右键,然后将鼠标悬停在“创建”上并点击“表格”。

Create Table context menu

这将打开一个“创建表格”的窗口。在该窗口的“常规”选项卡下,输入一个表格的名称。这个名称可以任意设置,但为了简单起见,我们将称之为“表格-01”。

Create Table - General tab

然后导航到“列”选项卡,点击窗口右上角的“+”号来添加一些列。在添加列时,您需要输入名称和数据类型,如果所选数据类型要求,可能还需要选择长度。

此外,官方的 PostgreSQL 文档指出,给表添加一个主键通常是最佳实践。主键是一个约束,指定特定的列或一组列可用作表中行的特定标识符。虽然这并非必需,但如果您想将一个或多个列设置为主键,请将最右边的开关从 No 切换到 Yes。

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

Create Table - Columns Tab with Primary Key turned on

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

INSERT script context menu

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

如果你愿意的话,可以将部分完成的INSERT脚本替换为这个样例INSERT语句。

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

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

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

View/Edit Data, All Rows context menu

这将打开另一个新面板,在此之下,您可以在下方面板的数据输出标签中查看该表中保存的所有数据。

View Data - example data output

通过pgAdmin web界面,您成功地创建了一个表并填充了一些数据。当然,这只是您可以使用pgAdmin创建表的方法之一。例如,在这一步描述的基于图形用户界面的方法之外,也可以使用SQL来创建和填充表。

结论

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

为了了解如何充分利用pgAdmin的所有功能,我们鼓励您查看该项目的文档以获取更多信息。您还可以通过我们社区的相关教程进一步了解PostgreSQL。

广告
将在 10 秒后关闭
bannerAds