Гид по технологиям

Установка PostgreSQL 14 и pgAdmin 4 на Ubuntu 22.04

11 min read Базы данных Обновлено 09 Nov 2025
PostgreSQL 14 и pgAdmin 4 на Ubuntu 22.04
PostgreSQL 14 и pgAdmin 4 на Ubuntu 22.04

Логотипы PostgreSQL и pgAdmin для демонстрации установки

Кратко: пошаговое руководство по установке PostgreSQL 14 и pgAdmin 4 на сервер с Ubuntu 22.04. Вы узнаете, как установить сервер БД и веб-интерфейс, создать роли и базы, открыть удалённый доступ, настроить uWSGI + Nginx с SSL от Let’s Encrypt и проверить работоспособность. Включены чек‑листы, рекомендации по безопасности и план на случай ошибок.

Важно: перед началом убедитесь, что у вас есть доступ с правами sudo и доменное имя, указывающее на сервер (FQDN), например pgadmin.example.com.

Кому полезно это руководство

  • Системным администраторам, которые разворачивают PostgreSQL и pgAdmin на Ubuntu 22.04.
  • Разработчикам, которым нужен локальный или удалённый GUI для администрирования PostgreSQL.
  • Тем, кто настраивает защищённый (HTTPS) доступ к pgAdmin через Nginx и uWSGI.

В этом материале рассмотрены шаги установки, базовая настройка безопасности, сценарии тестирования и руководство по устранению типичных проблем.

Предварительные требования

  • Сервер с Ubuntu 22.04 (64‑bit) и доступ по SSH.
  • Непользователь 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 14
  2. Роли и методы аутентификации
  3. Создание роли и базы данных
  4. Включение удалённого доступа и настройка pg_hba.conf
  5. Установка pgAdmin 4 в виртуальном окружении Python
  6. Интеграция с uWSGI
  7. Создание systemd unit для pgAdmin/uWSGI
  8. Установка SSL (Let’s Encrypt)
  9. Установка и конфигурация Nginx
  10. Настройка брандмауэра (ufw)
  11. Доступ и базовые операции в pgAdmin
  12. Проверки, безопасность и планы отказа

Шаг 1 — Установка PostgreSQL

Ubuntu 22.04 включает PostgreSQL 14 в стандартных репозиториях. Для установки выполните:

$ sudo apt install postgresql postgresql-contrib

Пакет postgresql-contrib добавляет дополнительные утилиты и расширения. Альтернативно можно подключить официальный репозиторий PostgreSQL и поддерживать версию отдельно.

Добавление GPG‑ключа PostgreSQL:

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

Добавление APT‑репозитория PGDG:

$ 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:

$ 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.

Вы увидите, что служба включена и запущена.

Совет по производительности: для продакшн‑сервера отрегулируйте shared_buffers, work_mem и другие параметры в /etc/postgresql/14/main/postgresql.conf согласно объёму RAM и нагрузке.

Шаг 2 — Роли PostgreSQL и методы аутентификации

PostgreSQL использует концепцию ролей (roles) для управления доступом. Роль может представлять отдельного пользователя или группу.

Поддерживаемые методы аутентификации:

  • trust — доступ без пароля (только при доверенной сети/конфигурации).
  • password — парольная аутентификация (md5 или scram‑sha‑256 рекомендуется).
  • ident — проверка клиента по TCP (обычно для локальных или доверенных подключений).
  • peer — для локальных Unix‑сокетов: проверяется соответствие имени UNIX‑пользователя.

По умолчанию часто используется peer для локального доступа. Это означает, что роль PostgreSQL связывается с UNIX‑учётной записью с тем же именем.

Переключение на системного пользователя postgres:

$ sudo -i -u postgres

Вход в psql:

postgres@howtoforge:~$ psql

В оболочке psql вы увидите приглашение:

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

postgres=#

Выход: введите exit или \q.

Запуск psql одной командой без интерактивного переключения:

$ sudo -u postgres psql

Шаг 3 — Создание новой роли

Роль можно создать двумя способами: командой createuser из командной строки или SQL в psql.

Интерактивное создание роли:

postgres@howtoforge:~$ createuser --interactive

Или под другой учётной записью:

$ sudo -u postgres createuser --interactive

Пример вывода:

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

Через psql:

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

Проверка списка ролей:

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 | {}

Рекомендация: в продакшне избегайте широких прав (SUPERUSER) для обычных приложений — выделяйте минимально необходимые привилегии.

Шаг 4 — Создание базы данных

Создать базу можно командой createdb или SQL:

postgres@howtoforge:~$ createdb howtoforge

Или:

$ sudo -u postgres createdb howtoforge

Через psql:

postgres-# CREATE DATABASE howtoforge;

Выдача прав пользователю на базу:

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

Список баз данных:

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:

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

# - Connection Settings -

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

Сохраните файл и перезапустите сервис:

$ sudo systemctl restart postgresql

Проверка прослушиваемых портов:

$ ss -nlt | grep 5432

Ожидаемый вывод:

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

Настройка pg_hba.conf для контроля доступа и выбора метода аутентификации (рекомендуется scram-sha-256):

Откройте файл:

$ sudo nano /etc/postgresql/14/main/pg_hba.conf

Примеры записей:

# 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

После изменения сохраните и перезапустите PostgreSQL.

Откройте порт в брандмауэре (ufw):

$ sudo ufw allow 5432/tcp

Рекомендуется ограничить доступ только доверенным подсетям:

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

Важно: открытый 5432 на весь Интернет — риск. Всегда применяйте шифрование, firewall и допустимые IP‑списки.

Шаг 6 — Установка pgAdmin 4

pgAdmin можно установить как системный пакет (включит Apache), но в этом руководстве мы устанавливаем pgAdmin в Python virtualenv и используем Nginx + uWSGI.

Создайте каталоги данных и логов:

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

Создайте папку приложения:

$ sudo mkdir /opt/pgadmin

Переключитесь в root для установки зависимостей (или используйте sudo):

$ sudo su -

Установите необходимые пакеты Python:

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

Создайте виртуальное окружение и активируйте его:

$ 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 (проверьте путь к Python в venv, у Ubuntu 22.04 это обычно python3.10):

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

Следуйте инструкциям, чтобы задать адрес электронной почты администратора и пароль.

Отключите виртуальное окружение и выйдите из root, если нужно:

(venv) root@postgresql:-$ deactivate
(venv) root@postgresql:-$ exit

Создайте системного пользователя pgadmin для запуска процессов:

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

Передайте права ownership на каталоги (в руководстве используется группа nginx):

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

Шаг 7 — Интеграция uWSGI и pgAdmin

Создайте конфигурационный файл uWSGI:

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

Содержимое:

[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

Проверьте, что путь к python и папке site-packages соответствует установленному виртуальному окружению.

Шаг 8 — Создаём systemd service для pgAdmin/uWSGI

Создайте юнит:

$ 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

Включите и запустите сервис:

$ sudo systemctl enable pgadmin-uwsgi --now
$ sudo systemctl status pgadmin-uwsgi

Если возникают ошибки, проверьте журналы systemd: sudo journalctl -u pgadmin-uwsgi -b.

Шаг 9 — Установка SSL (Let’s Encrypt)

Установка certbot через snapd:

$ sudo apt install snapd
$ sudo snap install core
$ sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Остановите Nginx временно (Certbot использует порт 80):

$ sudo systemctl stop nginx

Запрос сертификата (замените email и домен):

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

Сертификаты окажутся в /etc/letsencrypt/live/pgadmin.example.com.

Создайте DH group для улучшения безопасности TLS:

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

Создайте webroot для автообновления через webroot метод (если будете использовать):

$ sudo mkdir -p /var/lib/letsencrypt

Добавьте ежедневную задачу для обновления сертификата:

$ 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"

Сделайте файл исполняемым:

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

Замечание: certbot может выдавать сертификаты и автоматически настраивать Nginx (при использовании nginx plugin). В нашем сценарии мы используем standalone и настраиваем Nginx вручную.

Шаг 10 — Установка и настройка Nginx

Добавьте официальный репозиторий Nginx (при желании иметь более свежую версию):

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

$ 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
$ sudo apt install nginx

Проверка версии:

$ nginx -v
nginx version: nginx/1.20.2

Создайте конфигурацию для pgAdmin:

$ 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;
    }
}

Примечание: проверьте путь сокета uwsgi_pass — в нашем uWSGI конфиге используется /var/lib/pgadmin/pgadmin4.sock. Согласуйте пути.

Добавьте server_names_hash_bucket_size если потребуется:

$ sudo nano /etc/nginx/nginx.conf

Добавьте перед include /etc/nginx/conf.d/*.conf; строку:

server_names_hash_bucket_size  64;

Проверка конфигурации и перезапуск:

$ sudo nginx -t
$ sudo systemctl restart nginx

Шаг 11 — Настройка брандмауэра

Если вы используете ufw, откройте HTTP/HTTPS порты:

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

И убедитесь, что порт PostgreSQL открыт только для доверенных подсетей (см. выше).

Проверка статуса ufw:

$ 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)

Шаг 12 — Доступ и базовая работа в pgAdmin

Установите пароль для системной роли postgres (если ещё не установлен):

$ sudo -u postgres psql
postgres-# \password postgres
Enter new password for user "postgres":
Enter it again:
postgres-# exit

Измените владельца Unix‑сокета uWSGI (если требуется):

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

Откройте в браузере https://pgadmin.example.com — вы увидите экран входа.

Экран входа pgAdmin 4 с полями логина

Войдите под пользователем, созданным в шаге установки pgAdmin.

После входа добавьте локальный сервер PostgreSQL (Add New Server). В поле Hostname укажите localhost, порт можно оставить пустым (будет использовать стандартный 5432), сохраните пароль.

Интерфейс панели управления pgAdmin 4

Пример добавления сервера — нажмите Add New Server и заполните вкладку Connection.

Добавление сервера в pgAdmin: popup регистрации

Введите имя подключения и во вкладке Connection задайте Hostname=localhost и пароль.

Детали подключения к серверу в pgAdmin

После подключения вы увидите панель мониторинга сервера.

Панель управления PostgreSQL в pgAdmin

Создание таблицы через GUI: разверните PostgreSQL -> Databases -> ваша база -> Schemas -> Tables. Правый клик по Tables -> Create -> Table.

Дерево объектов базы данных в pgAdmin

Выберите Create -> Table:

Опция Create Table в pgAdmin

Задайте имя таблицы и колонок (ID как Primary key, Name varchar(30)).

Окно создания таблицы в pgAdmin

Добавление колонок:

Вкладка Columns при создании таблицы

Для вставки данных можно использовать INSERT Script:

Меню INSERT Script в pgAdmin

Пример SQL для вставки (проверьте кавычки и корректность значений):

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

Обратите внимание: в примере содержится некорректная запись (2, Adam) — литерал строки должен быть заключён в кавычки: ‘Adam’. Неисправные SQL‑лiterals приведут к ошибке исполнения.

Выполните запрос и просмотрите данные через View/Edit Data -> All Rows.

Окно просмотра данных в pgAdmin

Если вы хотите использовать встроенные утилиты бэкапа/восстановления в pgAdmin, укажите путь к бинарникам PostgreSQL: File -> Preferences -> Paths -> Binary paths. Укажите /usr/bin для PostgreSQL 14 и отметьте чекбокс.

Меню Preferences в pgAdmin

Настройка пути к бинарным файлам PostgreSQL

Сохранение путей позволит pgAdmin запускать pg_dump/pg_restore из интерфейса.

Дополнительная ценность: безопасность, проверка и план отката

Ниже собраны практики, чек‑листы и инструкции для устойчивой, безопасной и проверяемой установки.

Фактбокс: ключевые числа

  • ОС: Ubuntu 22.04
  • PostgreSQL: 14
  • pgAdmin: 4 (устанавливается в venv)
  • Порт PostgreSQL по умолчанию: 5432
  • Порт HTTPS: 443

Рекомендации по безопасности

  • Используйте scram-sha-256 для паролей в pg_hba.conf.
  • Ограничьте доступ к порту 5432 по IP‑адресам через ufw или облачный security group.
  • Всегда включайте HTTPS для pgAdmin и используйте современные TLS‑настройки (TLSv1.2/1.3).
  • Не запускайте pgAdmin как root — используйте отдельного системного пользователя pgadmin.
  • Регулярно обновляйте систему и пакеты безопасности.
  • Разработайте ротацию паролей и политику доступа для администратора БД.

Проверки работоспособности (Acceptance Criteria)

Критерии приёмки — что проверить после установки:

  1. Сервис PostgreSQL активен и слушает на 5432: ss -nlt | grep 5432.
  2. Сервис pgadmin-uwsgi активен: systemctl status pgadmin-uwsgi.
  3. Nginx отвечает на HTTPS: curl -kI https://pgadmin.example.com.
  4. Вход в pgAdmin с учётными данными администратора возможен.
  5. Подключение pgAdmin к локальной БД успешно.
  6. Бэкап с помощью pg_dump через GUI или CLI работает.

Playbook: краткий SOP для развёртывания (сводка команд)

  1. Обновить систему: sudo apt update && sudo apt upgrade
  2. Установить PostgreSQL: sudo apt install postgresql postgresql-contrib
  3. Настроить listen_addresses и pg_hba.conf, перезапустить PostgreSQL
  4. Установить Python venv, pgAdmin и uWSGI в /opt/pgadmin
  5. Создать uWSGI ini и systemd unit, включить сервис
  6. Установить Certbot, получить сертификат
  7. Установить Nginx, настроить conf.d/pgadmin.conf и перезапустить
  8. Открыть порты в ufw и протестировать доступ

Резервное копирование и восстановление (микро‑методология)

  • Резервное копирование: периодические pg_dump (полный бекап базы) или pg_basebackup (для физического бэкапа).
  • Хранение: копии на удалённом хранилище (S3, NFS), с версионированием и шифрованием.
  • Тест восстановления: регулярная проверка восстановления из резервной копии на тестовой машине.

Пример ручного бекапа одной базы:

$ sudo -u postgres pg_dump -F c -b -v -f /var/backups/howtoforge.dump howtoforge

Восстановление:

$ sudo -u postgres pg_restore -d howtoforge /var/backups/howtoforge.dump

Стратегии миграции и обновления PostgreSQL

  • Для миграции между мажорными версиями используйте pg_upgrade или логическую репликацию.
  • Тестируйте pg_upgrade на копии данных перед применением в продакшн.
  • Планируйте окно обслуживания и обратный план (rollback), если обновление сломает совместимость приложений.

Тестовые сценарии и критерии приёмки

  1. Проверка установки PostgreSQL: команда psql возвращает приглашение.
  2. Создание роли и базы: CREATE ROLE, CREATE DATABASE выполняются без ошибок.
  3. Удалённый доступ: подключение с другой машины к порту 5432 в рамках разрешённой сети.
  4. Веб‑доступ к pgAdmin: загрузка страницы логина, успешный вход и добавление сервера.
  5. SSL: сертификат валиден и цепочка доверия полна (openssl s_client -connect).

Ролe‑ориентированные чек‑листы

DBA:

  • Проверить параметры postgresql.conf (wal, checkpoints, shared_buffers).
  • Настроить регулярные бэкапы и тесты восстановления.
  • Управлять ролями и правами доступа.

SysAdmin:

  • Обновить ОС и пакеты.
  • Настроить systemd, nginx, firewall и certbot.
  • Обеспечить мониторинг и сбора логов.

Dev:

  • Подключиться через pgAdmin и протестировать схемы и запросы.
  • Тестировать миграции и откаты миграций.

Технический чеклист безопасности (быстрая проверка)

  • scram-sha-256 в pg_hba.conf для удалённых подключений.
  • Ограничение IP в ufw/SG.
  • TLS 1.2/1.3 и современный набор шифров в Nginx.
  • Правильные права на сокеты и директории (/var/lib/pgadmin).
  • Логи и мониторинг (journalctl, pg_log).

Устранение проблем: runbook

Проблема: Nginx не стартует после конфигурации

  • Проверьте sudo nginx -t.
  • Посмотрите sudo journalctl -u nginx -b.
  • Убедитесь, что файл конфигурации не содержит опечаток и пути сертификатов верны.

Проблема: pgAdmin не доступен, 502 Bad Gateway

  • Проверьте systemctl status pgadmin-uwsgi и журнал: sudo journalctl -u pgadmin-uwsgi -b.
  • Убедитесь, что uWSGI создал сокет и права на него позволяют nginx читать.
  • Проверьте соответствие пути сокета в nginx и uWSGI ini.

Проблема: при добавлении сервера в pgAdmin соединение отклоняется

  • Проверьте, что PostgreSQL слушает на localhost/0.0.0.0 и порт 5432.
  • Убедитесь, что пароль пользователя postgres установлен и метод аутентификации в pg_hba.conf позволяет подключение.

Полезные подсказки и распространённые ошибки

  • Ошибка при вставке: неверный синтаксис SQL. Проверяйте кавычки вокруг строковых литералов.
  • При установке в venv используйте тот же Python, что доступен в /opt/pgadmin/venv/bin.
  • Если certbot не может получить порт 80, остановите временно Nginx: sudo systemctl stop nginx.

Краткое руководство по переходу на продакшн

  • Тестируйте конфигурации в staging среде.
  • Настройте мониторинг (Prometheus, pg_stat_statements) и алерты.
  • Автоматизируйте бэкапы и проверки восстановления.
  • Планируйте обновления с резервными копиями и проверкой совместимости.

Однострочный глоссарий

  • role — объект аутентификации и авторизации в PostgreSQL; может быть пользователем или группой.
  • pg_hba.conf — файл контроля доступа PostgreSQL (host-based authentication).
  • pg_dump/pg_restore — утилиты логического бэкапа и восстановления PostgreSQL.
  • uWSGI — приложение‑сервер WSGI для развёртывания Python‑приложений за Nginx.

Заключение

Вы установили PostgreSQL 14 и pgAdmin 4 на Ubuntu 22.04, настроили роли и базу данных, включили удалённый доступ, развернули pgAdmin в virtualenv через uWSGI и проксировали через Nginx с SSL. Дальше:

  • Внедрите мониторинг и бэкапы.
  • Приведите конфигурации безопасности в соответствие с политиками вашей организации.
  • Регулярно тестируйте процедуры восстановления.

Если остались вопросы или возникла ошибка при выполнении шагов — опишите её с журналами и командой, которую выполняли; это поможет быстро найти решение.


Важно

  • Всегда ограничивайте доступ к 5432 и используйте надежные пароли.
  • Держите резервные копии в отдельном хранилище.

Спасибо за внимание. Удачной настройки и безопасной эксплуатации!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он действует и как защититься
Кибербезопасность

Троян Herodotus: как он действует и как защититься

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Панель полей PivotTable в Excel — руководство
Excel

Панель полей PivotTable в Excel — руководство

Включить новый Пуск в Windows 11 — инструкция
Windows

Включить новый Пуск в Windows 11 — инструкция

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

Как посмотреть историю просмотров Reels в Instagram
Социальные сети

Как посмотреть историю просмотров Reels в Instagram