• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Установка PostgreSQL на Ubuntu Server, создание роли и базы данных, локальное и удаленное подключение, настройка конфигурационных файлов и firewall

Содержание:

PostgreSQL – реляционная система управления базами данных для сайтов, API, CRM и серверных приложений. Материал для начинающего с VPS или выделенным сервером на Ubuntu. Здесь показано, как установить PostgreSQL на Ubuntu, проверить сервис, создать роль и базу и подготовить безопасное подключение. Первый доступ к PostgreSQL через SSH выполняется из локального терминала.

В отличие от MySQL или MariaDB, PostgreSQL имеет свою модель ролей и конфигурационных файлов, поэтому команды администрирования отличаются. Для работы необходим SSH-доступ, пользователь Linux с правами sudo и IP-адрес сервера. Если VPS еще нет, посмотрите VPS-хостинг Freehost. Готовый вариант с Ubuntu доступен на странице VPS на Ubuntu.

Что нужно перед установкой

Войдите на сервер через SSH:

ssh user@SERVER_IP

Замените user на имя Linux-пользователя, а SERVER_IP — IP-адресом VPS. Проверьте выпуск Ubuntu и свободное место:

lsb_release -ds
df -h /

Обновите индексы пакетов. Полное обновление системы перед установкой PostgreSQL не обязательно, но его можно выполнить во время планового обслуживания:

sudo apt update

sudo apt upgrade

Команда apt update обновляет локальные списки пакетов. Команда sudo apt upgrade может быть полезна для планового обслуживания, но для базовой установки PostgreSQL не является обязательной. Перед обновлением проверьте backup, свободное место и доступ к консоли VPS.

Установка PostgreSQL

Стандартный репозиторий Ubuntu содержит нужный пакет. Для базового сценария не нужно добавлять сторонний репозиторий:

sudo apt install postgresql postgresql-contrib

Пакет postgresql добавляет сервер, клиент psql и systemd-сервис. Пакет postgresql-contrib содержит дополнительные расширения. После установки система создает начальный кластер и запускает сервер.

Проверьте версию клиента:

psql --version

Версия PostgreSQL зависит от релиза Ubuntu и подключенных источников пакетов. На проверенном VPS команда вернула PostgreSQL 16.15.

версия 16.15, активный сервис и автозапуск

Проверка установки: версия 16.15, активный сервис и автозапуск.

Проверка работы PostgreSQL

После установки сервис обычно уже запущен. Проверьте его через systemctl:

sudo systemctl is-active postgresql
sudo systemctl is-enabled postgresql
sudo systemctl --no-pager status postgresql

Ожидаемые ответы active и enabled. Статус active (exited) для агрегированной службы не обязательно означает сбой: systemd управляет отдельным кластером. Просмотреть его можно так:

pg_lsclusters

Если сервис не запущен, сначала просмотрите журнал:

sudo journalctl -u postgresql --since "30 min ago" --no-pager

Для запуска или автозапуска используйте следующие команды только после проверки причины остановки:

sudo systemctl start postgresql
sudo systemctl enable postgresql

Системный пользователь postgres

Два уровня доступа

При установке Ubuntu создает системного пользователя postgres. Он требует операционной системы для запуска процессов. Внутри СУБД существует отдельная роль с таким же именем. Системный пользователь и роль – разные объекты.

Войти в консоль PostgreSQL локально можно от имени системного пользователя:

sudo -u postgres psql

Промпт postgres=# означает, что открыта консоль администратора. Для приложения не используйте роль postgres: создайте отдельный пользователь PostgreSQL с ограниченными правами

Проверка локального SQL-запроса от имени системной роли postgres

Проверка локального SQL-запроса от имени системной роли postgres.

Базовые команды psql

Клиент psql PostgreSQL принимает SQL-запросы и служебные метакоманды. Основная шпаргалка для работы с базой:

  • \l - список баз данных;

  • \du - список ролей и их атрибутов;

  • \c database_name - переход к другой базе;

  • \dt - таблицы текущей базы;

  • \q - Выход из консоли.

Метакоманды начинаются с обратной косой черты и не нуждаются в точке с запятой. SQL-команды завершаются символом ;. Инструмент PostgreSQL psql удобен для быстрой проверки состояния и прав доступа. Для кратких диагностических запросов комбинация PostgreSQL psql не нуждается в графическом клиенте.

sudo -u postgres psql -X -P pager=off -c "SELECT datname, pg_get_userbyid(datdba) FROM pg_database ORDER BY datname;"

Команда psql PostgreSQL показывает названия баз и владельцев

Команда psql PostgreSQL показывает названия баз и владельцев.

Создание пользователя PostgreSQL

Для приложения создайте отдельного пользователя PostgreSQL. Откройте консоль от имени администратора:

sudo -u postgres psql

Выполните SQL-команду создания роли с правом входа:

CREATE USER appuser WITH PASSWORD 'ЗАМЕНИТЕ_НА_СИЛЬНЫЙ_ПАРОЛЬ';

Для реального сервера используйте длинный уникальный пароль, не храните его в Git или в открытом конфигурационном файле. Проверить роль можно командой:

\du appuser

Создание базы данных

Создайте отдельную базу и сразу назначьте ее владельцем роль приложения:

CREATE DATABASE appdb OWNER appuser;

Владелец базы данных получает права на управление объектами, но доступы к отдельным таблицам все равно нужно планировать. После создания проверьте список баз:

\l
\q

Проверка подключения новым пользователем

Выйдите из консоли администратора и проверьте подключение к PostgreSQL новой ролью:

psql -h localhost -U appuser -d appdb

Параметр -h задает сервер, -U — пользователя, -d — базу данных. Адрес 127.0.0.1 проверяет TCP-подключение, обычно использующее приложение. Без -h клиент может использовать Unix-сокет и другое правило доступа.

После ввода пароля выполните тестовый запрос:

SELECT current_database(), current_user;
\q

Строка из URL для изменяющейся среды имеет вид:

postgresql://appuser:ПАРОЛЬ@127.0.0.1:5432/appdb

Не добавляйте реальный пароль в репозиторий. Для продакшена используйте переменные среды или хранилище секретов.

Где находятся настройки PostgreSQL

Что входит в PostgreSQL конфигурация

Под запросом “PostgreSQL конфигурация” подразумевают набор параметров сервера и правил аутентификации. Такая настройка PostgreSQL влияет на сеть, права доступа, память и журналы, поэтому перед редактированием сохраните копию.

Названия postgresql.conf и pg_hba.conf следует запомнить: первый файл описывает работу сервера, второй – проверку клиентов.

Основные параметры хранятся в двух файлах. Вместе они определяют сетевое поведение и правила доступа:

  • postgresql.conf — адрес прослушивания, порт, память, журналы и другие параметры сервера;

  • pg_hba.conf — правила, кто, откуда и на какую базу может выполнить аутентификацию.

Типичный путь на Ubuntu имеет переменный номер версии:

/etc/postgresql/<version>/main/postgresql.conf
/etc/postgresql/<version>/main/pg_hba.conf

Точные пути и текущие параметры лучше получить через SQL:

sudo -u postgres psql -X -P pager=off -c "SHOW config_file;"
sudo -u postgres psql -X -P pager=off -c "SHOW hba_file;"
sudo -u postgres psql -X -P pager=off -c "SHOW listen_addresses; SHOW port;"

На проверенном сервере используется каталог /etc/postgresql/16/main/, адреса localhost и порт 5432. Не копируйте номер версии без проверки.

Проверка конфигурационных файлов, адресов и портов 543

Проверка конфигурационных файлов, адресов и портов 5432.

Удаленное подключение к PostgreSQL

Для приложения на том же VPS достаточно локального доступа. Удаленное подключение PostgreSQL требуется, если сайт и база размещены на разных серверах. Не открывайте базу в Интернете без ограничений.

  1. В основном файле укажите частный или другой конкретный адрес сервера в listen_addresses.

  2. В файле доступа добавьте правило для одного IP-адреса сервера приложения.

  3. В Firewall позвольте PostgreSQL порт 5432 только для этого источника.

  4. Перезапустите PostgreSQL или выполните reload и проверьте подключение с сервера приложения.

Пример правила доступа:

host appdb appuser APP_SERVER_IP/32 scram-sha-256

Маска /32 позволяет один IPv4-адрес. Не используйте 0.0.0.0/0: так любой узел сети сможет обращаться в порт. Для настройки PostgreSQL на VPS лучше применить приватную сеть или SSH-туннель.

Firewall и SSH-туннель

Для PostgreSQL firewall правило должно содержать конкретный адрес:

sudo ufw allow from APP_SERVER_IP to any port 5432 proto tcp
sudo ufw status numbered

Вариант без публичного порта – тоннель через SSH:

ssh -L 5432:127.0.0.1:5432 user@DB_SERVER_IP

После создания тоннеля клиент подключается к 127.0.0.1:5432 на локальном компьютере. Это уменьшает поверхность атаки и не отменяет проверку пароля.

Перезапуск PostgreSQL после изменения конфигурации

После изменения файла доступа обычно достаточно перечитать правила:

sudo systemctl reload postgresql

После тзменения listen_addresses или порта может потребоваться полный перезапуск:

sudo systemctl restart postgresql

reload применяет доступные непрерывно параметры и не прерывает активные сессии. restart останавливает и запускает процесс заново, поэтому выполняйте его в согласованное окно работ. После операции повторите проверку через systemctl и журнал.

Удаление пользователя или базы

Команды DROP DATABASE и DROP USER используйте только после проверки backup и активных подключений:

DROP DATABASE appdb;
DROP USER appuser;

DROP DATABASE безвозвратно удаляет данные. Если роль владеет объектами или имеет зависимости, сначала переназначьте их или удалите в контролируемой среде.

Типичные проблемы

  • В соединении отказано. Проверьте, запущен ли сервис, слушает ли нужный адрес и открыт ли порт.

  • PostgreSQL не запущен. Проверьте статус через systemctl, журнал запуска и состояние кластера

  • Ошибка аутентификации. Проверьте роль, пароль и соответствующее правило доступа.

  • У пользователя нет доступа к базе. Проверьте владельца, права на схему и таблицы. Владелец базы данных не всегда владелец объектов, созданных другой ролью.

  • Порт 5432 закрытый firewall. Проверьте правило UFW, внешний firewall провайдера и IP-адрес клиента.

  • Изменения не действуют. Проверьте синтаксис файлов и выполните reload или restart в зависимости от параметра.

Для диагностики локального сервера выполните:

sudo systemctl is-active postgresql
sudo ss -lntp | grep 5432
sudo -u postgres psql -X -P pager=off -c "SHOW listen_addresses; SHOW port;"

Что следует настроить на production-сервере

Перед изменениями и по расписанию создавайте резервную копию:

pg_dump -h 127.0.0.1 -U appuser -d appdb -Fc -f /var/backups/appdb.dump

Копия на том же диске не защищает от его отказа. Предусмотрите другое хранилище и тестовое восстановление. Настройте firewall, ограничьте удаленный доступ, регулярно обновляйте Ubuntu, контролируйте свободное место, RAM и журналы. Мониторинг диска, RAM и PostgreSQL поможет заметить проблему до остановки приложения. SSD или NVMe полезны для нагруженных баз, но не заменяют индексы, оптимизацию запросов и backup.

Ресурсы для PostgreSQL на VPS

PostgreSQL на VPS может работать на небольшом тарифе, если нагрузка умеренная. Для больших баз и большого количества запросов требуются достаточно RAM, процессор и быстрый диск. VPS от FREEhost.UA имеет запас ресурсов для базы, веб-сервера и фонового worker-а. Отдельный PostgreSQL сервер удобен для проекта, где база нуждается в собственных ресурсах и независимом мониторинге.

Заключение

После выполнения инструкции PostgreSQL работает, создан отдельный пользователь и база данных с владельцем. Подключение через psql проверено, приложение можно подключить через переменные среды.

Затем настройте резервное копирование, проверьте восстановление и оптимизируйте PostgreSQL под нагрузку. Удаленный доступ ограничивайте конкретным IP-адресом.

Подписывайтесь на наш Telegram-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов

Смотрите наш канал YouTube на https://www.youtube.com/freehostua.

Мы в чем ошиблись, или что-то пропустили?

Напишите об этом в комментариях, мы с удовольствием ответим и обсудим ваши замечания и предложения.

Дата: 15.09.2026
Автор: Алексей Литвинцев
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA