如何在 Ubuntu 22.04 上安装 PostgreSQL 和 pgAdmin如何在 Ubuntu 22.04 上安装 PostgreSQL 和 pgAdmin如何在 Ubuntu 22.04 上安装 PostgreSQL 和 pgAdmin如何在 Ubuntu 22.04 上安装 PostgreSQL 和 pgAdmin
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Ubuntu 22.04 上安装 PostgreSQL 和 pgAdmin

发表 admin at 2025年2月28日
类别
  • 未分类
标签

PostgreSQL 或 Postgres 是一种实现 SQL 查询语言的开源对象关系数据库管理。它具有可靠事务和无读锁并发等高级功能,使我们能够构建容错环境和复杂的应用程序。

pgAdmin 是 PostgreSQL 的开源管理工具。它支持多个平台,包括 Windows、macOS 和 Linux。

本教程将教您如何在 Ubuntu 22.04 服务器上安装 PostgreSQL 14 和 pgAdmin 4。

先决条件

    运行 Ubuntu 20.04 的服务器。

    非 root sudo 用户。

    完全限定域名 (FQDN),例如 pgadmin.example.com。

    确保一切都已更新。

    $ sudo apt update
    $ sudo apt upgrade
    

    您的系统需要一些软件包。

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    其中一些软件包可能已经安装在您的系统上。

第 1 步 - 安装 PostgreSQL

Ubuntu 22.04 默认附带 PostgreSQL 14。要安装,请发出以下命令。

$ sudo apt install postgresql postgresql-contrib

postgresql-contrib 包包含一些额外的实用程序。

您还可以使用 PostgreSQL 的官方 APT 存储库进行安装。运行以下命令添加 PostgreSQL GPG 密钥。

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

将 APT 存储库添加到您的源列表中。

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

更新系统存储库。

$ sudo apt update

现在,您可以使用上述命令安装 PostgreSQL。

检查 PostgreSQL 服务的状态。

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2022-05-16 11:20:35 UTC; 5 days ago
    Process: 30544 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 30544 (code=exited, status=0/SUCCESS)
        CPU: 2ms

May 16 11:20:35 postgresql systemd[1]: Starting PostgreSQL RDBMS...
May 16 11:20:35 postgresql systemd[1]: Finished PostgreSQL RDBMS.

您可以看到该服务默认已启用并正在运行。

第 2 步 - 使用 PostgreSQL 角色和身份验证方法

Postgres 使用称为角色的概念来处理身份验证和数据库访问。角色代表一个用户或一组用户。 Postgres 不区分用户和组。

Postgres支持多种身份验证方法,例如以下

  • 信任 - 只要满足配置文件中定义的条件,就允许无需任何密码的连接。
  • 密码 - 这是不言自明的,需要密码才能访问。
  • Ident - 此方法仅在 TCP/IP 连接上受支持,并且对于远程连接很有用。
  • Peer - 与 Ident 相同,但仅用于本地连接。

默认情况下,Postgres的安装使用对等身份验证方法。在此方法下,它将 Postgres 角色与匹配的 Linux 系统帐户关联起来。如果角色存在,则您可以使用具有相同用户名的 Linux 帐户登录。

PostgreSQL 安装会创建一个与默认角色关联的用户帐户 postgres。您可以使用以下命令切换到系统上的 postgres 帐户。

$ sudo -i -u postgres

使用 psql 命令访问 PostgreSQL shell。

postgres@howtoforge:~$ psql

您将登录到 PostgreSQL shell。

psql (14.3 (Ubuntu 14.3-1.pgdg22.04+1))
Type "help" for help.

postgres=#

输入 exit 或 \q 关闭 shell。

您还可以通过单个命令访问 PostgreSQL shell。以下命令在 postgres 帐户下运行 shell。退出 shell 会将您带到当前的系统用户。

$ sudo -u postgres psql

第 3 步 - 创建新角色

您可以使用createuser命令创建新角色,也可以从psql shell创建它们。要使用 createuser 命令,您需要登录 postgres 帐户。如果登录到 postgres,请运行以下命令来创建新角色。

postgres@howtoforge:~$ createuser --interactive

--interactive 标志将提示您输入角色的名称,并询问它是否应该具有超级用户权限。

您还可以直接从您的帐户运行该命令。

$ sudo -u postgres createuser --interactive

您将得到以下输出。

Enter name of role to add: navjot
Shall the new role be a superuser? (y/n) y

要从 psql shell 创建角色,请在进入 shell 后使用以下命令。

postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';

在这里,我们创建具有超级用户、创建数据库、创建角色和登录等权限的角色。

您可以使用\du命令查看所有用户的列表。

postgres-# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 username  | Superuser, Create role, Create DB                          | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

第 4 步 - 创建数据库

要创建数据库,我们将使用createdb命令。如果登录到 postgres 帐户,请运行以下命令来创建新数据库。

postgres@howtoforge:~$ createdb howtoforge

您还可以从您的帐户运行该命令。

$ sudo -u postgres createdb howtoforge

您还可以使用 psql shell 创建数据库。为此,请从 shell 运行以下命令。

postgres-# CREATE DATABASE howtoforge;

我们可以通过运行以下命令向刚刚在数据库上创建的用户授予权限。

postgres-# GRANT ALL PRIVILEGES ON DATABASE howtoforge TO username;

您可以使用\l命令检查所有数据库的列表。

postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 howtoforge| postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | username=CTc/postgres
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

第 5 步 - 启用远程访问

默认情况下,PostgreSQL 服务器仅侦听 localhost 接口。要启用远程访问,请打开文件 /etc/postgresql/14/main/postgresql.conf 并更改行 #listen_addresses='localhost',取消注释并修改为如下所示的连接和身份验证部分。

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'     # what IP address(es) to listen on;

按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

重新启动 PostgreSQL 服务。

$ sudo systemctl restart postgresql

要验证更改,请运行以下命令。

$ ss -nlt | grep 5432

您将得到以下输出,显示 PostgreSQL 正在侦听所有接口。

LISTEN 0      244          0.0.0.0:5432      0.0.0.0:*
LISTEN 0      244             [::]:5432         [::]:*

下一步是将服务器配置为接受远程连接。这是通过编辑文件 /etc/postgresql/14/main/pg_hba.conf 来完成的。打开文件进行编辑。

$ sudo nano /etc/postgresql14/main/pg_hba.conf

您可以在此处配置对单个或所有数据库的访问,并定义哪些用户可以通过哪些接口访问它们。为了使密码身份验证起作用,请选择 scram-sha-256 作为身份验证方法。以下是一些您可以使用的示例。

# TYPE  DATABASE        USER                ADDRESS                 METHOD

# The username can access all databases from all locations using scram-sha256 password
host    all             username            0.0.0.0/0                scram-sha256

# The username can access only the howtoforge from all locations using scram-sha256 password
host    howtoforge      username            0.0.0.0/0                scram-sha256

# The username can access all databases from a trusted location (192.168.1.134) without a password
host    all             username            192.168.1.134            trust

完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

在远程访问生效之前还剩下最后一步。您需要打开防火墙端口 5432。运行以下命令打开该端口。

$ sudo ufw allow 5432/tcp

这将允许任何 IP 地址访问 PostgreSQL。但是,您应该将其限制在受信任的 IP 范围内。为此,请运行以下命令。以下命令允许从 192.168.1.0/24 子网访问 PostgreSQL。

$ sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432

第 6 步 - 安装 pgAdmin 4

pgAdmin 可以作为 Ubuntu 软件包安装,也可以使用 Python 安装。将其安装为 ubuntu 软件包会默认安装 Apache 服务器。但是,我们将在教程中使用 Nginx。因此,我们将使用 Python 轮来安装它。

为 pgAdmin 创建数据和日志目录。

$ sudo mkdir /var/lib/pgadmin
$ sudo mkdir /var/log/pgadmin

为 pgAdmin 创建一个应用程序文件夹。

$ sudo mkdir /opt/pgadmin

切换到root用户。

$ sudo su -

首先,安装Python所需的几个重要包。

$ apt install build-essential python3-dev python3-venv python3-pip

创建一个python虚拟环境并激活它。

$ python3 -m venv /opt/pgadmin/venv
$ source /opt/pgadmin/venv/bin/activate

安装 pgAdmin 和 uWSGI。

(venv) root@postgresql:-$ pip install --upgrade pip
(venv) root@postgresql:-$ pip install --upgrade setuptools
(venv) root@postgresql:-$ pip install wheel
(venv) root@postgresql:-$ pip install pgadmin4
(venv) root@postgresql:-$ pip install uwsgi

运行 pgAdmin 的安装文件。检查路径。 Ubuntu 22.04 默认情况下附带 Python 3.10,因此它在路径中可见。确保您选择正确的路径。

(venv) root@postgresql:-$ python3 /opt/pgadmin/venv/lib/python3.10/site-packages/pgadmin4/setup.py

按照设置说明进行操作,并在此处记下您的电子邮件和密码。

NOTE: Configuring authentication for SERVER mode.

Enter the email address and password to use for the initial pgAdmin user account:

Email address: [email 
Password: 
Retype password:
pgAdmin 4 - Application Initialisation
======================================

停用虚拟环境。

(venv) root@postgresql:-$ deactivate

切换回普通用户。

(venv) root@postgresql:-$ exit

创建一个新的系统用户 pgadmin。它将用于运行 pgAdmin 进程。

$ sudo adduser --system --group --home /var/lib/pgadmin --disabled-login --shell /usr/sbin/nologin pgadmin

由于我们将使用 Nginx,因此请将上述目录以及新创建的用户的所有权授予它。

$ sudo chown -R pgadmin:nginx /var/lib/pgadmin /var/log/pgadmin /opt/pgadmin

步骤 7 - 集成 uWSGI 和 pgAdmin

下一步是创建一个监听 UNIX 套接字 /tmp/pgadmin.sock 的 WSGI 服务器。在文件夹 /opt/pgadmin 中创建一个名为 pgadmin-uwsgi.ini 的 uWSGI 配置文件。

$ sudo nano /opt/pgadmin/pgadmin-uwsgi.ini

将以下代码添加到其中。确保路径中的 python 版本与系统中安装的版本匹配。

[uwsgi]
socket = /var/lib/pgadmin/pgadmin4.sock
chdir = /opt/pgadmin/venv/lib/python3.10/site-packages/pgadmin4/
module = pgAdmin4:application
threads = 20
processes = 1
mount = /=pgAdmin4:app
manage-script-name = true
chmod-socket = 660

按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

第 8 步 - 创建服务文件

现在我们已经配置了 pgAdmin 和 uWSGI,我们需要为其创建一个 systemd 服务单元文件。服务文件将允许服务器在启动时自动启动 uWSGI 并为 pgAdmin 4 应用程序提供服务。

创建并打开服务文件进行编辑。

$ sudo nano /etc/systemd/system/pgadmin-uwsgi.service

将以下代码粘贴到其中。

[Unit]
Description=pgadmin4 on uWSGI
Requires=network.target
After=network.target
[Service]
User=pgadmin
Group=nginx
Environment="PATH=/opt/pgadmin/venv/bin"
ExecStart=/opt/pgadmin/venv/bin/uwsgi --ini /opt/pgadmin/pgadmin-uwsgi.ini
[Install]
WantedBy=multi-user.target

按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

正如您所看到的,我们选择 nginx 作为运行 pgAdmin 进程的组,因为我们将使用它进行代理。

启用并启动uWSGI服务。

$ sudo systemctl enable pgadmin-uwsgi --now

检查服务的状态。

$ sudo systemctl status pgadmin-uwsgi

第 9 步 - 安装 SSL

在配置Nginx之前,我们需要设置SSL证书。

要使用 Let's Encrypt 安装 SSL 证书,我们需要下载 Certbot 工具。为此,我们将使用 Snapd 软件包安装程序。

安装 Snap 安装程序。

$ sudo apt install snapd

确保您的 Snapd 版本是最新的。

$ sudo snap install core 
$ sudo snap refresh core

安装证书机器人。

$ sudo snap install --classic certbot

使用以下命令通过创建指向 /usr/bin 目录的符号链接来确保 Certbot 命令运行。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

停止 Nginx 服务器,因为它会干扰 Certbot 工具。

$ sudo systemctl stop nginx

生成 SSL 证书。

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d pgadmin.example.com

上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/pgadmin.example.com 目录中。

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

为 Let's Encrypt 自动续订创建一个挑战 Web 根目录。

$ sudo mkdir -p /var/lib/letsencrypt

创建 Cron 作业来更新 SSL。它将每天运行以检查证书并在需要时更新它。为此,首先创建文件 /etc/cron.daily/certbot-renew 并打开它进行编辑。

$ sudo nano /etc/cron.daily/certbot-renew

粘贴以下代码。

#!/bin/sh
certbot renew --cert-name pgadmin.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

更改任务文件的权限以使其可执行。

$ sudo chmod +x /etc/cron.daily/certbot-renew

第 10 步 - 安装和配置 Nginx

Ubuntu 附带了旧版本的 Nginx。要安装最新版本,您需要下载官方 Nginx 存储库。

导入 Nginx 的签名密钥。

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

添加 Nginx 稳定版本的存储库。

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

更新系统存储库。

$ sudo apt update

安装 Nginx。

$ sudo apt install nginx

验证安装。

$ nginx -v
nginx version: nginx/1.20.2

配置 Nginx

创建并打开文件 /etc/nginx/conf.d/pgadmin.conf 进行编辑。

$ sudo nano /etc/nginx/conf.d/pgadmin.conf

将以下代码粘贴到其中。

server {
    listen 80;
    listen [::]:80;
    server_name pgadmin.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;    
    server_name pgadmin.example.com;
    
    ssl_certificate /etc/letsencrypt/live/pgadmin.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pgadmin.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/pgadmin.example.com/chain.pem;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_session_timeout  5m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location /pgadmin4/ {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass unix:/tmp/pgadmin4.sock;
    }
}

按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

打开文件 /etc/nginx/nginx.conf 进行编辑。

$ sudo nano /etc/nginx/nginx.conf

在 include /etc/nginx/conf.d/*.conf; 行之前添加以下行。

server_names_hash_bucket_size  64;

按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

验证 Nginx 配置文件语法。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新启动 Nginx 服务以启用新配置。

$ sudo systemctl restart nginx

第 11 步 - 配置防火墙

在访问 pgAdmin 之前,我们需要确保防火墙端口已打开。如果您使用 ufw 防火墙,请运行以下命令打开 HTTP 和 HTTPs 端口。

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

检查防火墙的状态。

$ sudo ufw status

您应该看到类似的输出。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
5432/tcp                   ALLOW       192.168.1.0/24
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

第 11 步 - 访问和配置 pgAdmin

在访问 pgAdmin 之前,我们需要为默认的 postgres 用户设置密码。

打开 psql shell。

$ sudo -u postgres psql

运行以下命令设置密码。

postgres-# \password postgres
Enter new password for user "postgres":
Enter it again:

退出外壳。

postgres-# exit

另外,更改 UNIX 套接字的所有权。

$ sudo chown nginx:nginx /var/lib/pgadmin/pgadmin4.sock

在浏览器中打开 URL https://pgadmin.example.com,您将看到以下登录屏幕。

输入在步骤 6 中创建的用户凭据以登录并访问以下仪表板。

下一步是将本地 PostgreSQL 服务器添加到其中。单击添加新服务器按钮即可开始。

为连接命名并切换到连接选项卡。

输入 localhost 作为主机名,并将端口字段留空。添加之前创建的密码并选中保存密码?选项。单击保存按钮完成服务器添加。

完成后,您将看到 PostgreSQL 服务器的以下仪表板屏幕。

让我们创建一个新表并向数据库添加一些数据。

在仪表板上,单击 PostgreSQL - Local 旁边的箭头符号以展开树形菜单。接下来,展开数据库,单击您添加的数据库的名称(在我们的示例中为howtoforge),然后单击架构。您应该看到以下菜单。

右键单击表格选项,然后选择创建>>表格菜单选项,如图所示。

这将打开创建表弹出窗口,如下所示。输入表的名称。

切换到列选项卡。这里我们将为表定义一些基本列。

单击加号添加第一列。我们将其命名为ID,并以整数作为其数据类型。每个表都应该有一个主键。要将 ID 设为表的主键,请切换主键按钮。

接下来,我们为名称添加另一列,其中数据类型为字符变化。为了限制名称长度,我们将其长度定义为 30。目前,这对于我们的示例来说已经足够了。完成创建表后,单击保存按钮。

现在我们已经有了包含一些列的表,下一步是用一些值填充表。要添加数据,请在浏览器中右键单击表名称,将光标移到脚本上,然后选择选项插入脚本 >。

它将在仪表板上打开一个新选项卡,其中包含部分填充的 INSERT 命令。将问号替换为您要填写的相应数据。这是我们用于表格的数据。

INSERT INTO public."table-01"(
"ID", "Name")
VALUES (1, 'Navjot'), (2, Adam), (3, 'Roxy');

单击倾斜的三角形按钮来执行 SQL 查询并添加数据。

接下来,您需要查看刚刚添加的数据。为此,右键单击表名称并选择选项查看/编辑数据,然后单击选项所有行。

这将在仪表板中打开另一个选项卡,您的数据将在下部面板的数据输出选项卡中可见。

您终于创建了一个数据库并使用 pgAdmin 向其中添加了一些数据。使用 pgAdmin 还可以做很多事情。

PostgreSQL 带有内置实用程序来备份和恢复数据。 pgAdmin 本身支持它们,但要使其正常工作,您可能需要添加 Postgre 二进制文件的路径。为此,请打开顶部的文件菜单,然后选择首选项选项。

它将打开一个新的弹出窗口,其中包含许多首选项。从左侧边栏中选择选项路径>>二进制路径。接下来,向下滚动到弹出窗口的 PostgreSQL 二进制路径 部分。

输入 /usr/bin 作为 PostgreSQL 14 服务器条目前面的路径,然后选中其上的复选标记。完成后点击保存按钮。您应该能够通过 pgAdmin 界面使用备份和恢复命令。

结论

您学习了如何在 Ubuntu 22.04 服务器上安装 PostgreSQL 和 pgAdmin。您还配置了 pgAdmin 以连接 PostgreSQL 服务并执行基本操作。如果您有疑问,请在下面的评论中发表。

©2015-2025 Norria support@norria.com