Перейти к содержанию
Innovialabs

Как установить и настроить PostgreSQL на Ubuntu

Практика4 мин

Коротко

Установите PostgreSQL из репозиториев Ubuntu через apt, создайте отдельную роль и базу для приложения, откройте удалённый доступ только для конкретных IP через listen_addresses и pg_hba.conf и подберите shared_buffers, work_mem и число соединений под память VPS.

Короткий путь

На свежем сервере с Ubuntu весь процесс занимает несколько минут:

  1. Установить пакет postgresql через apt.
  2. Создать роль и базу данных для приложения.
  3. Если приложение на другом сервере — разрешить удалённый доступ только для его IP.
  4. Поправить несколько параметров памяти и перезапустить.

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

sudo apt update
sudo apt install -y postgresql
sudo systemctl status postgresql

Сервис запускается сразу и добавляется в автозагрузку. Ubuntu поставляет проверенную версию; если нужна более новая мажорная версия, используйте официальный apt-репозиторий PostgreSQL, описанный на странице загрузки PostgreSQL.

Конфигурация лежит в /etc/postgresql/<версия>/main/. Точные пути можно узнать так:

sudo -u postgres psql -c "SHOW config_file;"
sudo -u postgres psql -c "SHOW hba_file;"

Шаг 2. Пользователь и база данных

При установке создаётся системный пользователь и суперпользователь базы postgres. Локально он входит через peer-аутентификацию — по совпадению имени пользователя Linux, без пароля. Используйте его только для администрирования, никогда — в настройках приложения.

sudo -u postgres psql
CREATE ROLE appuser WITH LOGIN PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER appuser;
\q

Теперь приложение подключается как appuser к appdb и владеет своими таблицами. Для разных приложений заводите разные роли, а для отчётов при необходимости — отдельную роль только на чтение.

Шаг 3. Удалённый доступ

По умолчанию PostgreSQL слушает только localhost. Если приложение работает на том же сервере, пропустите этот шаг — это самая безопасная схема.

postgresql.conf — на каких сетевых интерфейсах слушать:

listen_addresses = 'localhost,10.0.0.5'   # или '*' для всех интерфейсов

pg_hba.conf — кому разрешено подключаться. Добавьте строку только для сервера приложения:

# TYPE  DATABASE  USER     ADDRESS           METHOD
host    appdb     appuser  203.0.113.10/32   scram-sha-256

Затем перезапустите сервис (изменение listen_addresses требует рестарта, для одного pg_hba.conf достаточно reload) и откройте порт в файрволе только для этого IP:

sudo systemctl restart postgresql
sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp

Проверка с сервера приложения:

psql "host=SERVER_IP dbname=appdb user=appuser"

Правила безопасности:

  • Никогда не сочетайте 0.0.0.0/0 и trust — это открытая база.
  • Вместо публикации порта 5432 в интернет лучше приватная сеть между серверами или SSH-туннель.
  • Используйте scram-sha-256, а не устаревший md5. Если пароль задавался при другом методе, задайте его заново.

Шаг 4. Базовая настройка памяти для небольшого VPS

Настройки по умолчанию очень консервативны. Распространённая отправная точка для сервера с 2 ГБ RAM, на котором работает только PostgreSQL:

ALTER SYSTEM SET shared_buffers = '512MB';
ALTER SYSTEM SET effective_cache_size = '1536MB';
ALTER SYSTEM SET work_mem = '8MB';
ALTER SYSTEM SET maintenance_work_mem = '128MB';
ALTER SYSTEM SET max_connections = 50;
ALTER SYSTEM SET random_page_cost = 1.1;

ALTER SYSTEM записывает значения в postgresql.auto.conf, который перекрывает postgresql.conf. После этого перезапустите сервис: shared_buffers и max_connections меняются только при рестарте.

ПараметрЧто делаетОриентир
shared_buffersСобственный кэш данных PostgreSQLОколо четверти RAM
effective_cache_sizeПодсказка планировщику об общем кэше, включая ОСОт половины до трёх четвертей RAM
work_memПамять на одну сортировку или хеш-операциюНебольшое: тратится на каждую операцию в каждом соединении
maintenance_work_memПамять для VACUUM и создания индексовБольше, чем work_mem
max_connectionsЛимит соединенийУмеренно, с пулером вроде PgBouncer
random_page_costСтоимость случайного чтения с дискаНиже на SSD

Если на сервере работает и приложение, уменьшите значения. Проверить, что применилось, можно командой SHOW shared_buffers;.

Частые ошибки

  • Подключать приложение под пользователем postgres.
  • «Временно» открыть порт 5432 всему интернету.
  • Ставить большой work_mem — много параллельных запросов съедят всю память.
  • Забыть про бэкапы: настройте pg_dump или физическое резервное копирование сразу после установки.

Частые вопросы

Docker удобен для разработки и одинаковых версий во всех окружениях. На одном production-VPS нативную установку проще обновлять и настраивать. Если выбираете Docker, храните данные в volume и продумайте бэкапы так же.

Поможем с этим

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

Обсудить проект

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

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.