Установка PostgreSQL на VPS: настройка Ubuntu 24.04

Сайты и веб-серверы
Установка PostgreSQL на VPS: настройка Ubuntu 24.04

Установка PostgreSQL на VPS — стандартная задача для тех, кто разворачивает приложение на Django, Rails, Laravel или Node.js: именно эту СУБД рекомендуют большинство современных фреймворков. PostgreSQL ценят за строгость типов, честные транзакции, JSONB и предсказуемое поведение под нагрузкой — при этом на небольшом проекте она нетребовательна и спокойно живёт на одном сервере с приложением. В этом руководстве пошагово разберём, как поставить Postgres на сервере с Ubuntu 24.04 LTS: установка из репозитория, создание ролей и баз, разбор pg_hba.conf, настройка памяти под ваш объём RAM и бэкапы через pg_dump. Все команды актуальны и проверены.

Выбор сервера: что важно для PostgreSQL

PostgreSQL любит две вещи: память и быстрый диск. Память идёт под shared_buffers и кеш операционной системы — чем больше данных помещается в RAM, тем меньше чтений с диска. А каждая транзакция фиксируется в журнале WAL, поэтому задержки записи напрямую влияют на скорость INSERT и UPDATE: NVMe-накопитель здесь даёт кратное преимущество перед SATA SSD.

Для небольшого продакшена — приложение плюс база на одном сервере — разумный выбор у Cheap-Host это тариф Pro: 12 vCPU, 16 ГБ RAM и 128 ГБ NVMe за 750 ₽/мес. Запаса по памяти хватит и на рост базы, и на кеш ОС, а KVM-виртуализация гарантирует, что выделенные ресурсы действительно ваши. Если проект совсем маленький, можно стартовать и на Start (8 ГБ RAM, 450 ₽/мес), а позже сделать апгрейд без потери данных.

Установка PostgreSQL на Ubuntu 24.04

Обновляем систему и ставим PostgreSQL вместе с пакетом дополнений (в нём полезные расширения вроде pg_stat_statements):

sudo apt update && sudo apt upgrade -y
sudo apt install postgresql postgresql-contrib -y

Из репозитория Ubuntu 24.04 устанавливается PostgreSQL 16. Служба запускается автоматически — проверяем:

sudo systemctl status postgresql
psql --version

Автозапуск при перезагрузке включён из коробки, но убедиться не помешает:

sudo systemctl enable postgresql

Установщик создал системного пользователя postgres — суперпользователя СУБД. Входим в консоль psql от его имени:

sudo -u postgres psql

Если видите приглашение postgres=# — база работает. Выйти можно командой \q.

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

В PostgreSQL пользователи называются ролями. Правило то же, что и в любой СУБД: приложение не должно работать под суперпользователем. Создаём отдельную роль и базу, владельцем которой она станет. В консоли sudo -u postgres psql:

CREATE ROLE appuser WITH LOGIN PASSWORD 'Slozhny-Parol_2026!';
CREATE DATABASE appdb OWNER appuser;
\q

Проверяем подключение по TCP от имени новой роли:

psql -h 127.0.0.1 -U appuser -d appdb

Система спросит пароль и пустит в базу. Полезные команды внутри psql:

  • \l — список баз данных;
  • \dt — таблицы текущей базы;
  • \du — список ролей;
  • \conninfo — параметры текущего подключения;
  • \q — выход.

Строка подключения для приложения будет выглядеть так: postgresql://appuser:пароль@127.0.0.1:5432/appdb.

pg_hba.conf: как Postgres решает, кого пускать

Аутентификацией управляет файл /etc/postgresql/16/main/pg_hba.conf. Каждая строка — правило: тип подключения, база, роль, адрес и метод проверки. Два метода, которые нужно понимать:

  • peer — для локальных unix-сокетов: PostgreSQL сверяет имя системного пользователя Linux с именем роли. Именно поэтому sudo -u postgres psql работает без пароля, а psql -U appuser без ключа -h — нет.
  • scram-sha-256 — современная парольная аутентификация для TCP-подключений. В Ubuntu 24.04 она используется по умолчанию для локальных host-правил — менять ничего не нужно.

После любых правок pg_hba.conf применяем конфигурацию без перезапуска:

sudo systemctl reload postgresql

По умолчанию PostgreSQL слушает только 127.0.0.1 (параметр listen_addresses в postgresql.conf) — снаружи база недоступна, и для связки «приложение и база на одном VPS» это правильное состояние. Если базу нужно открыть для другого сервера, добавьте в pg_hba.conf строку вида host appdb appuser 203.0.113.10/32 scram-sha-256, пропишите listen_addresses = '*' и обязательно ограничьте порт 5432 файрволом — как это сделать, разбирали в статье про настройку UFW.

Настройка памяти под небольшой проект

Дефолтный shared_buffers в PostgreSQL — всего 128 МБ: этого мало даже для скромной базы. Основные параметры живут в /etc/postgresql/16/main/postgresql.conf. Ориентиры для VPS, где база работает рядом с приложением:

Параметр8 ГБ RAM16 ГБ RAMЗа что отвечает
shared_buffers2GB4GBКеш страниц данных (~25% RAM)
effective_cache_size4GB8GBОценка доступного кеша для планировщика
work_mem16MB32MBПамять на сортировку в одном запросе
maintenance_work_mem256MB512MBПамять для VACUUM и построения индексов

Редактируем конфиг и перезапускаем службу (смена shared_buffers требует именно restart, а не reload):

sudo nano /etc/postgresql/16/main/postgresql.conf
sudo systemctl restart postgresql

С work_mem будьте аккуратны: это лимит на одну операцию сортировки, а их в сложном запросе может быть несколько, и выполняются они параллельно в разных сессиях. Ставить гигабайты не нужно. Для типового небольшого проекта приведённых значений достаточно — глубокий тюнинг имеет смысл только после появления реальной нагрузки и медленных запросов.

Бэкапы: pg_dump и расписание

Логический бэкап одной базы делается утилитой pg_dump. Сжатый дамп в собственном формате PostgreSQL (его удобно восстанавливать выборочно через pg_restore):

sudo -u postgres pg_dump -Fc appdb -f /var/backups/appdb-$(date +%F).dump

Восстановление в чистую базу:

sudo -u postgres pg_restore -d appdb /var/backups/appdb-2026-07-17.dump

Если нужен дамп всех баз вместе с ролями — используйте pg_dumpall, он выводит обычный SQL. Ежедневный бэкап проще всего повесить на cron от пользователя postgres:

sudo -u postgres crontab -e
# добавить строку:
0 3 * * * pg_dump -Fc appdb -f /var/backups/appdb-$(date +\%F).dump

Копии, лежащие только на самом сервере, бэкапом считаются условно: при отказе диска вы потеряете и базу, и дампы. Настройте выгрузку на внешнее хранилище — схему 3-2-1 мы подробно разбирали в материале о резервном копировании VPS.

PostgreSQL или MySQL: короткая шпаргалка

Частый вопрос новичков — какую СУБД ставить. Честный ответ: для небольшого проекта обе справятся, выбирайте по экосистеме.

  • PostgreSQL — Django, Rails, современные Node.js- и Go-приложения, геоданные (PostGIS), JSONB, сложная аналитика, строгие транзакции.
  • MySQL — WordPress и большинство PHP-CMS, готовые веб-приложения, где MySQL указан в требованиях. Инструкция по ней у нас тоже есть: установка MySQL на VPS.

Держать обе СУБД на одном сервере можно — 16 ГБ RAM тарифа Pro это позволяют, — но без необходимости лучше не плодить сущности: каждая база хочет свой кусок памяти.

FAQ

Какая версия PostgreSQL ставится на Ubuntu 24.04?

Из штатного репозитория командой apt install postgresql устанавливается PostgreSQL 16. Для большинства проектов этого достаточно; более новые мажорные версии можно поставить из официального репозитория PGDG, но для небольшого проекта это не обязательно.

PostgreSQL или MySQL — что выбрать для небольшого проекта?

Оба варианта рабочие. MySQL чаще выбирают под WordPress и классические PHP-CMS, PostgreSQL — под Django, Rails, Node.js-приложения и всё, где важны сложные запросы, JSONB и строгость типов. Если фреймворк или CMS рекомендует конкретную СУБД — берите её.

Сколько ресурсов нужно VPS для PostgreSQL?

Небольшой проект стартует и на 2 ГБ RAM, но комфортный минимум для базы вместе с приложением — 8–16 ГБ: PostgreSQL активно использует память под shared_buffers и кеш ОС. Быстрый NVMe-диск важнее числа ядер — база чувствительна к задержкам записи WAL.

Почему psql пишет peer authentication failed?

Метод peer сопоставляет имя системного пользователя Linux с именем роли PostgreSQL, поэтому подключаться суперпользователем нужно как sudo -u postgres psql. Роли приложения подключайтесь по TCP: psql -h 127.0.0.1 -U appuser -d appdb — тогда сработает парольная аутентификация scram-sha-256.

Как открыть PostgreSQL для удалённых подключений?

Задайте listen_addresses в postgresql.conf, добавьте в pg_hba.conf строку host для конкретного IP с методом scram-sha-256 и откройте порт 5432 в файрволе только для доверенных адресов. Открывать порт всему интернету нельзя.

Вывод

Установка PostgreSQL на Ubuntu 24.04 сводится к одной команде apt, а вся содержательная работа — в том, что после неё: отдельная роль для приложения, понимание pg_hba.conf, shared_buffers под ваш объём RAM и ежедневный pg_dump с выгрузкой копий наружу. Этого набора небольшому проекту хватит надолго — Postgres славится тем, что просто работает и не напоминает о себе.

Если под PostgreSQL нужен сервер — у Cheap-Host тариф Pro от 750 ₽/мес: 12 vCPU, 16 ГБ RAM, 128 ГБ NVMe, KVM с полным root-доступом и безлимитным трафиком. Деплой за 45–60 секунд, апгрейд ресурсов — без потери данных: cheap-host.onl.

Читайте также