В этой статье разберём на примере Ubuntu/Debian:
- как установить PostgreSQL и проверить, что сервер запущен;
- как зайти в консоль через
psqlи не поймать «Peer authentication failed»; - как создать администратора
adminс паролем; - как настроить базу с кодировкой
UTF8иLC_COLLATEпод русский/английский; - как включить/запретить удалённый доступ к PostgreSQL;
- какие ошибки встречаются чаще всего и как их исправить.
Установка PostgreSQL на VPS
Сначала обновим пакеты и установим сервер PostgreSQL из стандартного репозитория:
sudo apt update
sudo apt install -y postgresql postgresql-contrib
Проверяем статус службы:
sudo systemctl status postgresql
Если в статусе видно active (running), сервер запущен. Быстрый тест — проверим, слушается ли порт 5432:
ss -tulpn | grep 5432 || echo "Порт 5432 не слушается"
Посмотрим, какая версия установлена (понадобится для путей к конфигам):
ls /etc/postgresql
Обычно увидите что-то вроде 14, 15 или 16. В примерах дальше будем использовать 16 — подставьте свою.
Первичный вход в psql: пользователь postgres
PostgreSQL создаёт системного пользователя postgres, от имени которого работает сервер БД. Через него удобнее всего выполнять начальную настройку.
Заходим в консоль PostgreSQL:
sudo -u postgres psql
Если всё ок, увидите приглашение:
psql (16.x)
Type "help" for help.
postgres=#
Важно: на этом этапе не нужно вводить пароль — авторизация идёт через «peer» (по системному пользователю).
Создаём администратора admin с паролем
Теперь внутри psql создадим роль admin с логином и паролем. Это будет наш основной админ для работы с базами.
Внутри консоли psql (под postgres=#):
CREATE ROLE admin
WITH LOGIN
PASSWORD 'Slozhnyj_Parol_2025!'
CREATEDB
CREATEROLE;
При желании можно сделать admin суперпользователем, но для простых задач достаточно прав CREATEDB и CREATEROLE. Проверим, что роль создалась:
\du
В списке ролей должна появиться строка с admin.
Выходим из psql:
\q
Пробуем зайти уже под admin:
psql -U admin -d postgres
Если видите запрос пароля и успешный вход — всё работает. Если ошибка авторизации — чуть ниже разберём, в чём подвох.
Настройка pg_hba.conf, чтобы admin логинился по паролю
PostgreSQL управляет способами аутентификации через файл pg_hba.conf. На Ubuntu он лежит здесь:
/etc/postgresql/16/main/pg_hba.conf
Подставь свою версию вместо 16, если она другая.
Откроем файл:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Нас интересуют строки в начале, обычно там что-то вроде:
local all postgres peer
local all all peer
Чтобы пользователь admin мог логиниться по паролю, поменяем peer на md5 (или scram-sha-256, если включено):
local all postgres peer
local all all md5
Сохраняем файл и перезапускаем PostgreSQL:
sudo systemctl restart postgresql
Теперь пробуем ещё раз:
psql -U admin -d postgres
Если всё сделано правильно, будет запрос пароля и вход в систему.
Создание базы данных под проект (администратор admin)
Подключаемся к серверу под пользователем admin:
psql -U admin -d postgres
Создадим базу данных, где admin будет владельцем (для примера назовём её project_db):
CREATE DATABASE project_db
WITH OWNER = admin
ENCODING = 'UTF8'
LC_COLLATE = 'ru_RU.utf8'
LC_CTYPE = 'ru_RU.utf8'
TEMPLATE = template0;
Пояснения:
-
OWNER = admin— владелец базы, он сможет создавать таблицы, индексы и т.д. -
ENCODING = 'UTF8'— универсальная кодировка. -
LC_COLLATE/LC_CTYPE— сортировка и правила сравнения строк. Если на сервере нетru_RU.utf8, используйen_US.utf8илиC.
Переходим в новую базу:
\c project_db
Проверим, что всё работает, создав тестовую таблицу:
CREATE TABLE test_table (
id serial PRIMARY KEY,
name text NOT NULL
);
INSERT INTO test_table (name) VALUES ('test');
SELECT * FROM test_table;
Если видите одну строку с test — база готова к работе.
Настройка слушающих адресов (listen_addresses)
По умолчанию PostgreSQL слушает только localhost. Для обычного сайта на том же VPS этого достаточно и безопасно — PHP/приложение подключается через Unix-сокет или 127.0.0.1.
Файл конфигурации postgresql.conf находится, как правило, здесь:
/etc/postgresql/16/main/postgresql.conf
Откроем его:
sudo nano /etc/postgresql/16/main/postgresql.conf
И найдём строку:
#listen_addresses = 'localhost'
Раскомментируем, если надо, и оставим только локальный доступ (рекомендуется по умолчанию):
listen_addresses = 'localhost'
Если нужно подключаться с другого сервера (например, с отдельного backend-сервера), можно указать IP или *:
listen_addresses = 'localhost,10.0.0.5'
# или
listen_addresses = '*'
Предупреждение: если ставишь *, обязательно не забудь ограничить доступ в pg_hba.conf и через фаервол, иначе база окажется открыта всему миру.
После изменений перезапускаем сервер:
sudo systemctl restart postgresql
Удалённый доступ: пример настройки + фаервол
Предположим, тебе нужно подключаться к PostgreSQL с рабочего компьютера или другого сервера.
-
В
postgresql.confуказываем:listen_addresses = '*' -
В
pg_hba.confдобавляем строку (замени IP на свой):host all admin 203.0.113.10/32 md5Так доступ по паролю будет только для
adminс конкретного IP. -
В фаерволе (UFW) открываем 5432 только для нужного IP:
sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp -
Перезапускаем PostgreSQL:
sudo systemctl restart postgresql
С рабочего компьютера подключение будет выглядеть так:
psql -h YOUR.SERVER.IP -U admin -d project_db
Частые ошибки и их решения
-
psql: FATAL: role «admin» does not exist
Значит, роль
adminне была создана или вы создавали БД не тем пользователем. Зайдите подpostgresи выполните ещё раз:sudo -u postgres psql CREATE ROLE admin WITH LOGIN PASSWORD 'Slozhnyj_Parol_2025!' CREATEDB CREATEROLE; -
psql: FATAL: Peer authentication failed for user «admin»
Скорее всего, в
pg_hba.confдляlocal all allдо сих пор стоитpeer. Поменяй наmd5и перезапусти PostgreSQL:local all all md5 -
Не можешь подключиться по сети
- проверь
listen_addressesвpostgresql.conf; - проверь запись
host ...вpg_hba.conf; - проверь, открыт ли порт 5432 в UFW/фаерволе;
- попробуй подключиться по IP, а не по домену.
- проверь
-
Проблемы с локалью при создании базы (ошибки про ru_RU.utf8)
Сначала посмотри доступные локали:
locale -aЕсли
ru_RU.utf8нет — можно использоватьen_US.utf8илиC, либо сгенерировать русскую локаль черезsudo dpkg-reconfigure locales.
Итоги
-
Установили PostgreSQL на VPS и убедились, что сервис запущен.
-
Зашли в консоль через
sudo -u postgres psql. -
Создали администратора
adminс паролем и выдали ему права. -
Создали базу
project_dbс кодировкой UTF8 и правильными локалями. -
Настроили
pg_hba.confи при необходимости удалённый доступ. -
Разобрали типичные ошибки и способы их исправления.
Вывод: PostgreSQL на VPS настраивается не сложнее, чем MariaDB/MySQL, если понимать, как работают роли, pg_hba.conf и конфиги. Главный принцип — отдельный пользователь admin с паролем, закрытый по умолчанию доступ извне и аккуратная работа с правами.