Установка
PostgreSQL это сервер баз данных. В репозитории Ubuntu 24.04 лежит версия 16. Её получают вместе с обновлениями системы, поэтому отдельный репозиторий не нужен.
sudo apt update
sudo apt install postgresql
Первая команда обновляет список пакетов. Вторая ставит сервер и клиент psql, создаёт кластер (набор баз) и запускает службу. Подготовку самого сервера описывает статья первая настройка VPS на Ubuntu.
Проверьте, что всё запустилось:
sudo systemctl status postgresql
pg_lsclusters
systemctl status показывает состояние службы. pg_lsclusters выводит кластеры Ubuntu: в строке должна быть версия 16, имя main, порт 5432 и статус online.
Вход под администратором
При установке создаётся системный пользователь postgres, он же администратор базы. Войти можно так:
sudo -u postgres psql
sudo -u postgres запускает команду от имени пользователя postgres, а psql открывает консоль базы. В консоли приглашение выглядит как postgres=#. Выход: \q.
Пользователь и база
В консоли psql выполните:
CREATE USER app_user WITH PASSWORD 'замените-на-длинный-пароль';
CREATE DATABASE app_db OWNER app_user;
Первая команда создаёт пользователя app_user с паролем. Вторая создаёт базу app_db и делает его владельцем. Команды SQL заканчиваются точкой с запятой. Имена и пароль замените на свои, пароль возьмите длинный и случайный.
Выйдите (\q) и проверьте вход уже под новым пользователем:
psql -h 127.0.0.1 -U app_user -d app_db
-h 127.0.0.1 задаёт адрес сервера, -U пользователя, -d базу. Введите пароль. Если приглашение стало app_db=>, всё работает. Адрес 127.0.0.1 указан намеренно: так вход идёт по паролю, а не через системного пользователя.
Полезные команды внутри psql: \l показывает список баз, \dt таблицы текущей базы, \du пользователей.
Почему база слушает только localhost
После установки PostgreSQL принимает подключения только с самого сервера. Проверьте:
sudo ss -tlnp | grep 5432
ss -tlnp показывает слушающие TCP-порты и программы, а grep оставляет нужную строку. Адрес 127.0.0.1:5432 означает, что снаружи в базу не попасть.
Это хорошо. Базу сканируют и подбирают к ней пароли так же, как SSH. Если приложение работает на том же сервере, ему внешний доступ не нужен: оно подключается через 127.0.0.1. Пока вам не нужен доступ снаружи, ничего не меняйте.
Удалённый доступ с одного IP
Нужен он, например, чтобы подключаться из программы на своём компьютере. Понадобятся три шага. Для примера берём адрес 203.0.113.5, подставьте свой постоянный адрес.
Шаг 1. Сервер должен слушать внешний адрес. Откройте основной конфиг:
sudo nano /etc/postgresql/16/main/postgresql.conf
Найдите строку listen_addresses и задайте:
listen_addresses = 'localhost,198.51.100.10'
Здесь 198.51.100.10 это адрес вашего сервера. Укажите его, а не '*': так сервер слушает только нужный интерфейс. Проверьте, что этот адрес есть в выводе команды ip -4 addr. У некоторых хостеров внешний адрес на сервере не виден, в выводе только внутренний: тогда укажите внутренний.
Шаг 2. Разрешите вход только вашему адресу в pg_hba.conf. В нём перечислены правила: кто, откуда и как может подключаться.
sudo nano /etc/postgresql/16/main/pg_hba.conf
Добавьте строку в конец файла:
host app_db app_user 203.0.113.5/32 scram-sha-256
Поля: тип подключения (host), база, пользователь, адрес клиента (/32 значит ровно один адрес) и способ проверки пароля. Правила читаются сверху вниз.
Перезапустите службу, чтобы применить listen_addresses:
sudo systemctl restart postgresql
Для изменений только в pg_hba.conf хватает reload, а вот смена listen_addresses требует именно перезапуска.
Шаг 3. Откройте порт в файрволе только для своего адреса:
sudo ufw allow from 203.0.113.5 to any port 5432 proto tcp
Правило пропускает на порт 5432 только соединения с адреса 203.0.113.5. Остальные подключения отбрасываются. Подробнее о ufw и порядке включения читайте в статье настройка файрвола ufw.
Если ваш домашний адрес меняется, правило перестанет работать или, хуже, начнёт пускать чужого владельца этого адреса. Для динамического IP удобнее подключаться через SSH-туннель:
ssh -L 5432:127.0.0.1:5432 user@сервер. Тогда порт 5432 наружу открывать не нужно. Подробнее о входе по SSH в статье подключение к VPS по SSH.
Резервная копия pg_dump
sudo -u postgres pg_dump app_db > app_db.sql
pg_dump выгружает базу в текстовый файл с командами SQL. Файл создаётся в текущем каталоге. Записывает его ваша оболочка, а не пользователь postgres, поэтому команда работает и из домашнего каталога.
Формат поменьше и удобнее для больших баз:
sudo -u postgres pg_dump -Fc app_db > app_db.dump
Ключ -Fc включает сжатый «custom»-формат. Его читает pg_restore.
Восстановление
Пустая база должна существовать. Для текстового файла:
sudo -u postgres psql -d app_db < app_db.sql
< передаёт файл в psql, и тот выполняет команды из него. Файл читает ваша оболочка: вариант psql -f app_db.sql из домашнего каталога завершится ошибкой Permission denied, потому что у пользователя postgres нет доступа к вашему каталогу. Для формата -Fc так же:
sudo -u postgres pg_restore -d app_db < app_db.dump
pg_restore загружает копию в указанную базу. Проверяйте восстановление на тестовой базе: копия, которую ни разу не открывали, остаётся предположением. Хранить дампы на том же сервере опасно, копируйте их на другой. О расписании и хранении читайте в статье резервные копии VPS.
Что делать дальше
Если база нужна боту или сайту, подбирайте сервер с запасом по памяти: PostgreSQL использует оперативную память под кэш. Сравнить тарифы можно на странице подбора VPS: конфигурации «2 ядра 4 ГБ» сейчас стоят от 650 ₽ до 6 400 ₽ в месяц, цены сверены 17 октября 2026 года. Признаки нехватки ресурсов описаны в статье как понять, что VPS не хватает.
