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

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

Марина
Марина
📅 12 сентября 2026
Как установить PostgreSQL на Ubuntu 24.04 и настроить доступ

PostgreSQL — свободная система управления базами данных (СУБД): программа, которая хранит данные вашего сайта или бота и отдаёт их по запросу. На Ubuntu 24.04 она ставится одной командой — sudo apt install postgresql. Из штатного репозитория приедет версия 16, служебный пользователь postgres и запущенная служба, которая слушает порт 5432/TCP на локальном адресе 127.0.0.1. Дальше остаются четыре шага, которые новички чаще всего пропускают: первый вход через psql, создание отдельной базы с отдельным пользователем, правка pg_hba.conf и ограничение доступа к порту. Весь этот набор спокойно живёт на самом простом VPS с Ubuntu 24.04 — стартовые тарифы у части провайдеров начинаются от 139 ₽/мес.

Материал рассчитан на того, кто впервые поднимает базу на своём сервере: для небольшого сайта, Telegram-бота или внутреннего учёта. Ниже — выбор версии, пошаговая установка, разбор двух главных конфигов, таблица параметров памяти под 1–8 ГБ RAM, безопасное подключение с ноутбука и резервные копии. Каждая команда дана с пояснением, что она делает.

Какая версия PostgreSQL приедет из репозитория Ubuntu 24.04

В репозитории Ubuntu 24.04 LTS лежит PostgreSQL 16. Версия не самая свежая, но она получает исправления безопасности вместе с остальными обновлениями системы. Для типового сайта, бота или внутреннего сервиса разницы с новыми ветками вы не заметите: SQL-синтаксис, права, резервные копии и настройка памяти устроены одинаково.

Свежие ветки берут из официального репозитория проекта apt.postgresql.org (его называют PGDG). Смысл в этом есть, когда приложение требует конкретную версию или нужны свежие расширения. Плата — отдельный репозиторий, который придётся сопровождать самостоятельно.

Третий путь — контейнер Docker: база работает в изолированной «коробке» со своим окружением. Он удобен, когда на одной машине нужны рядом две-три версии. Но появляется целый слой, который придётся осваивать отдельно: тома для хранения данных, сети, проброс портов.

Способ установки Какая версия ставится Когда выбирать
Штатный репозиторий Ubuntu 24.04 PostgreSQL 16 Первая база, обычный сайт или бот
Репозиторий проекта apt.postgresql.org Ветки новее 16 Приложение требует конкретную свежую версию
Контейнер Любая Несколько версий на одном сервере

Дальше разбирается первый вариант: он покрывает большинство задач и не требует ничего, кроме доступа к серверу по SSH.

Сколько памяти, ядер и диска нужно серверу под базу

PostgreSQL нетребователен на старте: его фоновая служба (демон) в простое занимает порядка 30–60 МБ, и база на пару тысяч строк живёт даже на 512 МБ оперативной памяти. Проблемы начинаются не от размера базы, а от одновременных запросов: каждое соединение — это отдельный процесс, и при 20 активных клиентах сервер с 1 ГБ RAM начнёт упираться.

Разумный минимум для боевого проекта — 1 ядро и 2 ГБ RAM. Такая машина тянет базу на несколько гигабайт и 10–20 параллельных соединений. Под диск закладывайте объём базы, умноженный на 3: данные, индексы и место под резервную копию.

Тип диска для базы важнее, чем для статичного сайта: PostgreSQL постоянно пишет журнал транзакций, и на NVMe задержка записи измеряется десятыми долями миллисекунды против единиц миллисекунд на HDD. Экономия 50–60 ₽/мес на тарифе с обычным жёстким диском окупится минусом в отзывчивости на первой же тяжёлой выборке.

Провайдер Стартовая конфигурация Цена Для чего хватит
RuVDS 1 ядро, 0,5 ГБ RAM, 10 ГБ HDD от 139 ₽/мес Учебная база, тестовый стенд
Selectel 1 ядро, 1 ГБ RAM, 10 ГБ NVMe от 200 ₽/мес Небольшой сайт или бот
Aéza 1 ядро, 2 ГБ RAM, 30 ГБ NVMe от 593 ₽/мес, промо от 199 ₽ Боевая база проекта

Данные проверены 03.09.2026.

В разделе Linux собраны 44 провайдера, нижняя граница по рынку — 59 ₽/мес за 1 ГБ RAM и 10 ГБ NVMe. Такие тарифы годятся под учебную базу, но для проекта, где данные жалко потерять, смотрите площадки с резервным копированием на своей стороне. Бюджетные варианты собраны в разделе недорогих VPS.

Установка PostgreSQL и первый вход через psql
Из репозитория Ubuntu 24.04 приезжает PostgreSQL 16

Установка PostgreSQL на Ubuntu 24.04: пошаговая инструкция

Вся установка занимает 3–5 минут и требует только доступа к серверу с правами администратора. Если вы ещё не подключались к машине, начните с гайда как настроить SSH на VPS — там разобраны ключи и смена стандартного порта 22/TCP.

Команды ниже выполняются от обычного пользователя с правом sudo. Постоянно сидеть под root не нужно: цена опечатки в такой сессии заметно выше.

  1. Обновите список пакетов: sudo apt update. Команда скачивает свежие индексы репозиториев, без неё apt может поставить устаревшую сборку.
  2. Поставьте сервер и клиентские утилиты: sudo apt install postgresql postgresql-contrib -y. Второй пакет добавляет расширения вроде pg_stat_statements и pgcrypto.
  3. Проверьте, что служба поднялась: systemctl status postgresql. В выводе должно быть active (exited) у обёртки и active (running) у postgresql@16-main.
  4. Включите автозапуск: sudo systemctl enable postgresql. После перезагрузки сервера база поднимется сама.
  5. Убедитесь, что порт занят: ss -tlnp | grep 5432. Команда показывает, какие программы слушают сетевые порты. Ожидаемый ответ — прослушивание на 127.0.0.1:5432, то есть снаружи база пока недоступна.
  6. Посмотрите версию: psql --version. Для Ubuntu 24.04 это будет 16.x.

Если шаг 3 показал, что служба не запустилась, смотрите журнал: sudo journalctl -u postgresql@16-main -n 50. Ключ -n 50 выводит последние 50 строк — этого хватает, чтобы увидеть причину.

Первый вход через psql и минимум команд консоли

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

Внутри psql работают два вида команд. SQL-запросы заканчиваются точкой с запятой — без неё консоль молча ждёт продолжения, и это первая ловушка новичка. Служебные команды начинаются с обратного слэша и точки с запятой не требуют.

Полезный минимум: l показывает список баз, du — роли и их права, c имя_базы переключает подключение, dt выводит таблицы, q закрывает консоль. Команда conninfo печатает, куда вы подключены: базу, пользователя, сокет и порт.

Сразу задайте пароль роли postgres: ALTER USER postgres WITH PASSWORD 'длинный_пароль';. Пока подключение идёт через локальный сокет, пароль не спрашивают, но он понадобится, как только вы разрешите вход по сети.

Как создать базу данных и пользователя с ограниченными правами

Подключать приложение под ролью postgres — то же самое, что запускать сайт от root. Эта роль в PostgreSQL суперпользовательская: она может удалить любую базу и изменить любые настройки, поэтому под каждый проект заводят отдельную роль и отдельную базу.

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

CREATE USER shopapp WITH PASSWORD 'сюда_длинный_пароль';
CREATE DATABASE shopdb OWNER shopapp;
GRANT ALL PRIVILEGES ON DATABASE shopdb TO shopapp;

Первая создаёт роль с правом входа, вторая — базу с указанным владельцем, третья выдаёт права на подключение и создание объектов. Проверить результат можно командой l: в колонке Owner напротив shopdb появится shopapp.

Начиная с версии 15 роли по умолчанию не могут создавать таблицы в схеме public чужой базы. Если приложение жалуется на отказ в правах, подключитесь к нужной базе (c shopdb) и выполните GRANT ALL ON SCHEMA public TO shopapp; — это частая причина ошибки «permission denied for schema public» при переносе проекта со старого сервера.

Где лежат postgresql.conf и pg_hba.conf и чем они отличаются

Оба главных конфига лежат в каталоге /etc/postgresql/16/main/. Цифра в пути — мажорная версия, при переходе на новую ветку путь изменится. Найти каталог помогает запрос SHOW config_file; внутри psql.

Файл postgresql.conf отвечает за поведение сервера: сколько памяти отдать под кеш, на каких адресах слушать, что записывать в журнал. Строка со значением по умолчанию закомментирована знаком #; чтобы параметр заработал, комментарий снимают.

Файл pg_hba.conf отвечает за то, кому разрешено подключаться. HBA — это host-based authentication, доступ по адресу источника. Каждая строка описывает связку «тип подключения — база — пользователь — сеть — метод проверки», и правила читаются сверху вниз до первого совпадения.

Часть параметров применяется командой sudo systemctl reload postgresql, а изменения shared_buffers, listen_addresses и порта требуют перезапуска: sudo systemctl restart postgresql. Правки pg_hba.conf подхватываются перезагрузкой конфигурации без разрыва сессий.

Параметры памяти PostgreSQL для разных объёмов RAM
shared_buffers обычно ставят в четверть оперативной памяти сервера

Настройка памяти: shared_buffers, work_mem и кеш

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

Параметр shared_buffers задаёт объём общей памяти под кеш страниц данных, практическое правило — 25 % от RAM. Больше отдавать смысла мало: остальное лучше оставить файловому кешу системы. Параметр work_mem — память на одну операцию сортировки или хеширования внутри запроса. Типовые значения — 4–16 МБ. Это значение расходуется на каждую параллельную операцию отдельно, поэтому 256 МБ на маленьком сервере быстро приведут к нехватке памяти.

Третий параметр, effective_cache_size, ничего не выделяет — он подсказывает планировщику, сколько данных предположительно лежит в кешах. Ориентировочно берут 50–75 % от RAM.

RAM сервера shared_buffers work_mem effective_cache_size
1 ГБ 256 МБ 4 МБ 640 МБ
2 ГБ 512 МБ 8 МБ 1,25 ГБ
4 ГБ 1 ГБ 16 МБ 2,5 ГБ
8 ГБ 2 ГБ 16 МБ 5 ГБ

Значения ориентировочные и подходят для обычного веб-приложения. Проверить, что настройки применились, можно запросами SHOW shared_buffers; и SHOW work_mem; — они печатают действующие величины, а не то, что написано в файле.

Удалённый доступ к порту 5432 без дыр в безопасности

По умолчанию база слушает только 127.0.0.1 и доступна лишь приложениям на том же сервере. Для связки «сайт и база на одной машине» менять это не нужно вовсе.

Открывать 5432 в интернет без ограничения по адресу нельзя: сканеры находят такой порт за часы и начинают перебирать пароли. Если доступ снаружи всё же нужен, сначала поменяйте в postgresql.conf строку listen_addresses = '*' — база начнёт слушать все сетевые адреса. Затем добавьте в pg_hba.conf правило с конкретным адресом, а не с «любым» 0.0.0.0/0: host shopdb shopapp 203.0.113.10/32 scram-sha-256. Здесь /32 означает ровно один IP-адрес, а scram-sha-256 — современный метод проверки пароля.

Третий рубеж — межсетевой экран на самом сервере. Правило sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp пропускает только один адрес. Подробный разбор правил есть в гайде о том, как настроить фаервол на Linux-сервере.

Если постоянного адреса нет — домашний интернет обычно выдаёт динамический, — не открывайте порт вовсе. Команда ssh -L 5432:localhost:5432 user@ваш_сервер пробрасывает порт на ноутбук по защищённому каналу, и клиент вроде pgAdmin или DBeaver подключается к localhost. Для такой схемы удобнее вход по SSH-ключу.

Резервные копии: pg_dump и восстановление

Снимок диска у провайдера защищает от падения сервера, но не от ошибочного DELETE без условия — запроса, который вместо одной строки стирает всю таблицу. Логическая выгрузка (дамп) решает вторую задачу и занимает секунды на объёмах до нескольких гигабайт.

Базовая команда: sudo -u postgres pg_dump -Fc shopdb > /var/backups/shopdb_$(date +%F).dump. Ключ -Fc задаёт сжатый бинарный формат, из которого можно вытащить одну таблицу, а не всю базу. Подстановка $(date +%F) добавляет в имя дату в виде 2026-09-03, чтобы копии не перезаписывали друг друга.

Восстановление выполняет pg_restore: sudo -u postgres pg_restore -d shopdb -c /var/backups/shopdb_2026-09-03.dump. Ключ -c удаляет существующие объекты перед заливкой, иначе вы получите ошибки «уже существует».

Автоматизируйте выгрузку через cron — встроенный в Linux планировщик задач. Строка 0 4 * * * запустит скрипт ежедневно в 04:00. Держите минимум 7 последних копий и одну недельную, а файлы увозите с сервера — резервная копия на том же диске не спасает при его отказе. Логика переноса данных между машинами описана в гайде о переносе базы данных: у PostgreSQL меняются только утилиты, порядок действий тот же.

Как проверить, что база действительно работает

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

Первая проверка — подключение под созданной ролью: psql -h 127.0.0.1 -U shopapp -d shopdb. Ключ -h заставляет клиент идти через сеть, а не через локальный сокет, и проверяет запись в pg_hba.conf. Если пароль запросили и пустили — связка ролей и правил настроена верно.

Вторая проверка — реальная запись. Создайте таблицу, вставьте строку и прочитайте её обратно: CREATE TABLE test (id serial, name text); INSERT INTO test (name) VALUES ('ok'); SELECT * FROM test;. Затем удалите её командой DROP TABLE test;. Это подтверждает, что у роли есть права на схему и на диске есть место.

Третья проверка — размер и активность. Запрос SELECT pg_size_pretty(pg_database_size('shopdb')); печатает размер базы в человекочитаемом виде, а SELECT count(*) FROM pg_stat_activity; показывает число текущих соединений. Если оно приближается к 100 (значение max_connections по умолчанию), приложению нужен не более мощный сервер, а пул соединений — посредник вроде PgBouncer, который держит несколько постоянных подключений и раздаёт их запросам по очереди.

Частые ошибки при установке PostgreSQL

Большая часть проблем на первом сервере повторяется из раза в раз и связана не с самой СУБД, а с доступами и памятью. Ниже — те, что чаще всего приводят к переустановке с нуля.

Каждая лечится за минуту, если знать, где смотреть: журнал journalctl и файл pg_hba.conf отвечают примерно на 80 % вопросов.

  • Открыть порт 5432 для всех адресов «на время отладки» и забыть закрыть — база начинает получать переборы паролей в первые же сутки.
  • Подключать приложение под ролью postgres: одна ошибка в коде миграции удаляет чужие базы на том же сервере.
  • Поставить shared_buffers в 70–80 % RAM: памяти не хватит операционной системе, и служба будет падать по нехватке ресурсов.
  • Забыть точку с запятой в конце SQL-запроса и решить, что консоль зависла.
  • Хранить резервные копии на том же диске, что и базу.
  • Ставить пакет postgresql-16 из стороннего репозитория поверх уже работающего экземпляра без остановки службы.

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

Нужен ли отдельный сервер под базу? Для проекта до нескольких тысяч посетителей в сутки — нет, сайт и база спокойно живут на одной машине с 2 ГБ RAM. Разносить их имеет смысл, когда база и веб-сервер начинают конкурировать за память или когда к базе ходят несколько приложений.

Сколько стоит сервер под небольшую базу? Стартовые тарифы в разделе Linux начинаются от 59 ₽/мес за 1 ГБ RAM и 10 ГБ NVMe, конфигурации с 1 ГБ и NVMe у известных площадок идут от 200 ₽/мес, а вариант с 2 ГБ RAM и 30 ГБ диска — от 593 ₽/мес либо от 199 ₽ по промо.

Почему psql не спрашивает пароль? При входе командой sudo -u postgres psql используется локальный сокет и метод peer: система считает, что раз вы уже вошли на сервер как postgres, повторная проверка не нужна. По сети пароль запрашивается всегда.

Как обновиться с PostgreSQL 16 на новую ветку? Мажорные версии не обновляются заменой пакета: нужно выгрузить базы через pg_dumpall, поставить новую ветку и залить данные обратно, либо использовать pg_upgrade. Перед этим делайте копию и закладывайте окно простоя.

Что делать с ошибкой «could not connect to server: Connection refused»? Она означает, что на указанном адресе и порту никто не слушает. Проверьте systemctl status postgresql, затем listen_addresses в postgresql.conf и правила межсетевого экрана — в 9 случаях из 10 причина в одном из этих трёх мест.

Подойдёт ли обычный виртуальный хостинг вместо VPS? На виртуальном хостинге обычно доступна только MySQL или MariaDB, а PostgreSQL встречается редко и без доступа к конфигам. Если нужны свои настройки памяти и расширения, берите виртуальный сервер с полным доступом к системе.

Сколько места закладывать под базу? Считайте размер данных, умноженный на 3: индексы обычно добавляют 20–50 % к объёму таблиц, плюс место под свежую выгрузку. Для базы на 5 ГБ комфортный диск — от 20 ГБ.

Итог

Установка сводится к команде apt install postgresql, остальное время уходит на обвязку: отдельная роль под приложение, настроенные shared_buffers и work_mem, закрытый порт 5432 и ежедневная выгрузка через pg_dump. Полчаса работы один раз снимают большую часть будущих проблем.

Из железа под первую базу достаточно 1 ядра, 2 ГБ RAM и NVMe-диска от 20 ГБ. Сравнить цены 44 провайдеров можно в разделе VPS на Linux.

Поделиться:
👁 48 просмотров
Марина
Редактор · FREEHOSTING
Главный редактор FREEHOSTING. С 2020 года тестирует VDS, VPS и хостинг-провайдеров — арендует серверы, нагружает их реальными проектами и пишет честные обзоры по итогам. Помогает читателям выбирать хостинг под свои задачи: от Telegram-бота до production-сайта.