如何在服务器模式下安装和配置pgAdmin 4
介绍 pgAdmin是PostgreSQL及其相关数据库管理系统的开源管理和开发平台。它是用Python和jQuery编写的,支持PostgreSQL中的所有功能。您可以使用pgAdmin完成从编写基本SQL查询到监视数据库和配置高级数据库体系结构的所有工作。 在本教程中,我们将在Ubuntu 18.04服务器上安装和配置最新版本的pgAdmin,通过web浏览器访问pgAdmin,并将其连接到服
介绍
pgAdmin是PostgreSQL及其相关数据库管理系统的开源管理和开发平台。它是用Python和jQuery编写的,支持PostgreSQL中的所有功能。您可以使用pgAdmin完成从编写基本SQL查询到监视数据库和配置高级数据库体系结构的所有工作。
在本教程中,我们将在Ubuntu 18.04服务器上安装和配置最新版本的pgAdmin,通过web浏览器访问pgAdmin,并将其连接到服务器上的PostgreSQL数据库。
先决条件
要完成本教程,您需要:
-
运行Ubuntu 18.04的服务器。该服务器应该有一个具有sudo权限的非root用户,以及一个配置了
ufw
的防火墙。要获得有关设置的帮助,请参阅我们的Ubuntu 18.03的初始服务器安装指南。 -
服务器上安装的Apache web服务器。按照我们的指南如何在Ubuntu 18.04上安装Apache Web服务器在您的机器上进行配置。
-
服务器上安装了PostgreSQL。你可以按照我们的指南来设置它如何在Ubuntu 18.04上安装和使用PostgreSQL。在遵循本指南时,请确保创建一个新角色和数据库,因为要将pgAdmin连接到PostgreSQL实例,您将需要两者。
-
服务器上安装了Python 3和
venv
。按照如何安装Python 3并在Ubuntu 18.04服务器上设置编程环境安装这些工具并设置虚拟环境。
步骤1-安装pgAdmin及其依赖项
在撰写本文时,pgAdmin的最新版本是pgAdmin 4,而官方Ubuntu存储库中提供的最新版是pgAdmin 3。不过,pgAdmin 3不再受支持,项目维护人员建议安装pgAdmin 4。在这一步中,我们将介绍在虚拟环境中安装最新版本的pgAdmin 4的过程(根据项目开发团队的建议),并使用apt
安装其依赖项。
首先,如果您最近没有更新服务器的包索引,请更新:
sudo apt update
接下来,安装以下依赖项。其中包括libgmp3-dev
,一个多精度算术库;libpq-dev
,其中包括头文件和静态库,有助于与PostgreSQL后端通信;libapache2-mod-wsgi-py3
是一个Apache模块,允许您在Apache中托管基于Python的web应用程序:
sudo apt install libgmp3-dev libpq-dev libapache2-mod-wsgi-py3
接下来,创建几个目录,pgAdmin将在其中存储其会话数据、存储数据和日志:
sudo mkdir -p /var/lib/pgadmin4/sessions
sudo mkdir /var/lib/pgadmin4/storage
sudo mkdir /var/log/pgadmin4
然后,将这些目录的所有权更改为非根用户和组。这是必要的,因为它们当前由您的root用户拥有,但我们将从您的非root用户拥有的虚拟环境中安装pgAdmin,安装过程涉及在这些目录中创建一些文件。然而,在安装后,我们将把所有权转移给www数据用户和组,以便将其服务于web:
sudo chown -R sammy:sammy /var/lib/pgadmin4
sudo chown -R sammy:sammy /var/log/pgadmin4
接下来,打开虚拟环境。导航到编程环境所在的目录并激活它。按照prerequisite Python 3 tutorial的命名约定,我们将转到environments
目录并激活my_env
环境:
cd environments/
source my_env/bin/activate
激活虚拟环境后,请谨慎地确保系统上安装了最新版本的pip
。默认的Ubuntu 18.04存储库中提供的pip
版本是9.0.1,而最新版本是21.0.2。如果按照必备Python安装教程中所述安装了pyton3-pip
软件包,但尚未将其升级到最新版本,那么在下一步配置pgAdmin时会遇到问题。
要将pip
升级到最新版本,请运行以下命令:
python -m pip install -U pip
接下来,将pgAdmin 4源代码下载到您的机器上。要查找最新版本的源代码,请导航到pgAdmin 4(Python Wheel)下载页面。单击最新版本(v5.1,截至本文撰写时)的链接,然后在下一页上单击阅读pip的链接。从这个文件浏览器页面,复制以.whl
结尾的文件链接,.whl
是用于Python发行版的标准构建包格式。然后返回终端并运行以下wget
命令,确保将链接替换为从PostgreSQL站点复制的链接,该站点将把.whl
文件下载到服务器:
wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v5.1/pip/pgadmin4-5.1-py3-none-any.whl
接下来安装wheel
包,该包是车轮包装标准的参考实现。作为一个Python库,该包用作构建轮子的扩展,并包括一个用于处理.whl
个文件的命令行工具:
python -m pip install wheel
然后使用以下命令安装pgAdmin 4包:
python -m pip install pgadmin4-5.1-py3-none-any.whl
这需要安装pgAdmin及其依赖项。不过,在将其连接到数据库之前,需要对程序的配置进行一些更改。
步骤2-配置pgAdmin 4
虽然您的服务器上已经安装了pgAdmin,但仍需要执行一些步骤,以确保它具有正确服务于web界面所需的权限和配置。
pgAdmin的主配置文件config.py
在任何其他配置文件之前读取。它的内容可以作为进一步配置设置的参考点,这些配置设置可以在pgAdmin的其他配置文件中指定,但为了避免意外错误,您不应该编辑config.py
文件本身。我们将向名为config_local.py
的新文件中添加一些配置更改,该文件将在主文件之后读取。
现在使用您首选的文本编辑器创建此文件。在这里,我们将使用nano
:
nano my_env/lib/python3.6/site-packages/pgadmin4/config_local.py
在编辑器中,添加以下内容:
环境/my-env/lib/python3.6/site-packages/pgadmin4/config\u 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.6/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:
在此之后,停用您的虚拟环境:
deactivate
回想您在config_local.py
文件中指定的文件路径。这些文件保存在步骤1中创建的目录中,当前由非root用户所有。但是,运行web服务器的用户和组必须能够访问它们。默认情况下,在Ubuntu 18.04上,这些是www数据用户和组,因此更新以下目录上的权限,以赋予WWV数据对这两个目录的所有权:
sudo chown -R www-data:www-data /var/lib/pgadmin4/
sudo chown -R www-data:www-data /var/log/pgadmin4/
这样,pgAdmin就完全配置好了。但是,该程序尚未从您的服务器上提供,因此仍然无法访问。为了解决这个问题,我们将Apache配置为服务于pgAdmin,以便您可以通过web浏览器访问其用户界面。
步骤3-配置Apache
Apache web服务器使用虚拟主机来封装配置详细信息,并从单个服务器托管多个域。如果您遵循了必备的Apache教程,您可能已经设置了一个名为your_domain.conf
的示例虚拟主机文件,但在这一步中,我们将创建一个新的虚拟主机文件来为pgAdmin web界面提供服务。
首先,确保您在根目录中:
cd /
然后在/sites-available/
目录中创建一个名为pgadmin4.conf
的新文件。这将是服务器的虚拟主机文件:
sudo nano /etc/apache2/sites-available/pgadmin4.conf
将以下内容添加到此文件中,确保更新突出显示的部分以与您自己的配置对齐:
/etc/apache2/sites-available/pgadmin4.conf
<VirtualHost *>
ServerName your_server_ip
WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/home/sammy/environments/my_env
WSGIScriptAlias / /home/sammy/environments/my_env/lib/python3.6/site-packages/pgadmin4/pgAdmin4.wsgi
<Directory "/home/sammy/environments/my_env/lib/python3.6/site-packages/pgadmin4/">
WSGIProcessGroup pgadmin
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost>
保存并关闭虚拟主机文件。接下来,使用a2dissite
脚本禁用默认虚拟主机文件000-default.conf
:
sudo a2dissite 000-default.conf
**注意:**如果您遵循了必备的Apache教程,您可能已经禁用了000-default.conf
并设置了一个示例虚拟主机配置文件(在必备中命名为your_domain.conf
)。如果是这种情况,则需要使用以下命令禁用your_domain.conf
虚拟主机文件:
sudo a2dissite your_domain.conf
然后使用a2ensite
脚本启用pgadmin4.conf
虚拟主机文件。这将创建从/sites-available/
目录中的虚拟主机文件到/sites-enabled/
目录的符号链接:
sudo a2ensite pgadmin4.conf
接下来,测试配置文件的语法是否正确:
apachectl configtest
如果您的配置文件都正常,您将看到Syntax OK
。如果您看到输出中有错误,请重新打开pgadmin4.conf
文件并仔细检查您的IP地址和文件路径是否正确,然后重新运行configtest
。
在输出中看到Syntax OK
后,重新启动Apache服务,使其读取新的虚拟主机文件:
sudo systemctl restart apache2
pgAdmin现已完全安装和配置。接下来,我们将讨论如何从浏览器访问pgAdmin,然后再将其连接到PostgreSQL数据库。
步骤4-访问pgAdmin
在本地计算机上,打开首选web浏览器并导航到服务器的IP地址:
http://your_server_ip
到达后,您将看到一个类似于以下内容的登录屏幕:
输入您在步骤2中定义的登录凭据,您将进入pgAdmin欢迎屏幕:
既然已经确认可以访问pgAdmin界面,那么只需将pgAdmin连接到PostgreSQL数据库。不过,在这样做之前,您需要对PostgreSQL超级用户的配置进行一个小的更改。
步骤5-配置PostgreSQL用户
如果您遵循了prerequisite PostgreSQL tutorial,您应该已经在服务器上安装了PostgreSQL,并设置了新的超级用户角色和数据库。
默认情况下,在PostgreSQL中,您使用“标识协议”或“ident”身份验证方法作为数据库用户进行身份验证。这涉及到PostgreSQL获取客户端的Ubuntu用户名并将其用作允许的数据库用户名。在许多情况下,这可以提高安全性,但在您希望外部程序(如pgAdmin)连接到某个数据库的情况下,也会导致问题。为了解决这个问题,我们将为这个PostgreSQL角色设置一个密码,允许pgAdmin连接到您的数据库。
在终端上,打开超级用户角色下的PostgreSQL提示符:
sudo -u sammy psql
在PostgreSQL提示符下,更新用户配置文件,使其具有您选择的强密码:
ALTER USER sammy PASSWORD 'password';
然后退出PostgreSQL提示符:
\q
接下来,返回浏览器中的pgAdmin 4界面,找到左侧的浏览器菜单。右键单击服务器打开关联菜单,将鼠标悬停在创建上,然后单击服务...。
这将导致浏览器中弹出一个窗口,您将在其中输入有关服务器、角色和数据库的信息。
在常规选项卡中,输入此服务器的名称。这可以是你想要的任何东西,但你可能会发现它有助于描述。在我们的示例中,服务器名为Sammy-server-1
。
接下来,单击连接选项卡。在主机名/地址字段中,输入localhost
。默认情况下,端口应设置为5432
,这将适用于此设置,因为这是PostgreSQL使用的默认端口。
在维护数据库字段中,输入要连接的数据库的名称。请注意,此数据库必须已在您的服务器上创建。然后,在用户名和密码字段中分别输入您之前配置的PostgreSQL用户名和密码。
其他选项卡中的空白字段是可选的,只有在您有特定设置的情况下才需要填写。单击保存按钮,数据库将显示在浏览器菜单的服务器下。
您已成功将pgAdmin4连接到PostgreSQL数据库。您可以从pgAdmin仪表板执行PostgreSQL提示符下的任何操作。为了说明这一点,我们将创建一个示例表,并通过web界面用一些示例数据填充它。
步骤6-在pgAdmin仪表板中创建表
在pgAdmin仪表板中,找到窗口左侧的浏览器菜单。单击服务器(1)旁边的加号(*++),以展开其中的树菜单。接下来,单击您在上一步中添加的服务器左侧的加号(在我们的示例中为Sammy-server-1),然后展开Databases*,即您添加的数据库的名称(Sammy*),然后是Schemas(1)。您应该会看到如下树菜单:
右键单击表格列表项,然后将光标悬停在创建上,然后单击表...。
这将打开一个创建表窗口。在该窗口的常规选项卡下,输入表格的名称。这可以是您想要的任何内容,但为了简单起见,我们将其称为table-01。
然后导航到列选项卡,单击窗口右上角的**+符号以添加一些列。添加列时,需要为其指定名称和数据类型**,如果所选数据类型需要,则可能需要选择长度。
此外,PostgreSQL官方文档指出,向表中添加主键通常是最佳做法。“主键”是一个约束,指示可以用作表中行的特殊标识符的特定列或列集。这不是一个要求,但如果您想将一个或多个列设置为主键,请将最右侧的开关从否切换到是。
单击保存按钮创建表格。
至此,您已经创建了一个表,并向其中添加了几列。但是,这些列尚未包含任何数据。要向新表中添加数据,请右键单击浏览器菜单中的表名,将光标悬停在脚本上,然后单击插入脚本。
这将在仪表板上打开一个新面板。在顶部,您将看到部分完成的INSERT
语句,以及相应的表名和列名。继续,用一些虚拟数据替换问号(?),确保您添加的数据与您为每列选择的数据类型对齐。注意,您还可以通过将每一行添加到一组新的括号中来添加多行数据,每组括号用逗号分隔,如以下示例所示。
如果愿意,可以将部分完成的INSERT
脚本替换为以下示例INSERT
语句:
INSERT INTO public."table-01"(
col1, col2, col3)
VALUES ('Juneau', 14, 337), ('Bismark', 90, 2334), ('Lansing', 51, 556);
单击侧面三角形图标(▶) 执行INSERT
语句。请注意,在旧版本的pgAdmin中,执行图标是一个闪电(⚡).
要查看表格及其所有数据,请再次右键单击浏览器菜单中的表格名称,将光标悬停在查看/编辑数据上,然后选择所有行。
这将打开另一个新面板,在该面板下方的数据输出选项卡中,您可以查看该表中的所有数据。
这样,您就成功地创建了一个表,并通过pgAdmin web界面用一些数据填充了它。当然,这只是通过pgAdmin创建表的一种方法。例如,可以使用SQL而不是本步骤中描述的基于GUI的方法创建和填充表。
结论
在本指南中,您学习了如何从Python虚拟环境安装pgAdmin 4,对其进行配置,使用Apache将其提供给web,以及如何将其连接到PostgreSQL数据库。此外,本指南介绍了一种可用于创建和填充表的方法,但pgAdmin的用途远不止创建和编辑表。
有关如何充分利用pgAdmin所有功能的更多信息,我们鼓励您查看项目文档。您还可以通过我们的社区教程了解有关PostgreSQL的更多信息。
更多推荐
所有评论(0)