---
title: "Как установить PostgreSQL на VPS с Ubuntu или Debian"
description: "PostgreSQL на VPS: установка через apt, роль и база, безопасный удалённый доступ через SSH-туннель или pg_hba.conf, бэкап pg_dump и базовая настройка памяти."
url: https://tihost.io/blog/postgresql-on-vps
language: ru
section: "Руководства"
published: 2026-10-05
updated: 2026-10-05
publisher: Tihost (https://tihost.io)
---

# Как установить PostgreSQL на VPS с Ubuntu или Debian

> **Коротко:** PostgreSQL на Ubuntu и Debian ставится одной командой `sudo apt install postgresql` и по умолчанию слушает только localhost. Для приложения создайте отдельную роль и базу, к базе с домашнего компьютера подключайтесь через SSH-туннель, а не открывайте порт 5432 в интернет. Делайте ежедневный дамп `pg_dump -Fc` и начните настройку памяти с shared_buffers около 25% оперативной памяти.

**Главное:**

- PostgreSQL ставится на Ubuntu и Debian из репозитория дистрибутива командой `sudo apt install postgresql`: в Ubuntu 22.04 это версия 14, в Debian 12 - 15, в Ubuntu 24.04 - 16.
- После установки PostgreSQL слушает только localhost, поэтому порт 5432 закрыт для интернета; безопаснее всего подключаться к базе удалённо через SSH-туннель `ssh -L 5432:localhost:5432`.
- Если порт PostgreSQL всё же открыт наружу, в pg_hba.conf разрешают один конкретный IP с методом scram-sha-256, а в UFW открывают порт 5432 только для этого адреса.
- Резервная копия PostgreSQL делается командой `pg_dump -Fc` и восстанавливается через `pg_restore`; копию нужно хранить вне сервера с базой.
- Общепринятый ориентир для shared_buffers в PostgreSQL - около 25% оперативной памяти сервера, тогда как значение по умолчанию - всего 128 МБ.

> Команды рассчитаны на Ubuntu 22.04/24.04 и Debian 12. Перед установкой пройдите [первую настройку сервера](https://tihost.io/blog/vps-first-setup) и включите UFW.

## Шаг 1. Установите PostgreSQL из репозитория дистрибутива

Пакет `postgresql` из репозитория Ubuntu или Debian - самый простой путь: он сам создаёт кластер базы, системного пользователя `postgres` и сервис, который запускается при загрузке. Обновления безопасности приходят вместе с обычным `apt upgrade`:

```bash
sudo apt update
sudo apt install -y postgresql
sudo systemctl status postgresql
sudo -u postgres psql -c "SELECT version();"
```

Если нужна версия новее, чем в дистрибутиве, подключите официальный репозиторий PostgreSQL по инструкции на [postgresql.org](https://www.postgresql.org/download/) - остальные шаги не меняются. Файлы настроек лежат в `/etc/postgresql/<версия>/main/`.

## Шаг 2. Создайте роль и базу для приложения

Роль в PostgreSQL - это пользователь базы данных. Приложению нужна своя роль с паролем и своя база, а не суперпользователь `postgres`. `createuser --pwprompt` спросит пароль, `createdb --owner` создаст базу, которой владеет эта роль:

```bash
sudo -u postgres createuser --pwprompt myapp
sudo -u postgres createdb --owner=myapp myapp
psql -h localhost -U myapp -d myapp -c "SELECT current_user;"
```

То же самое можно сделать SQL-командами в консоли `psql`. Команда `sudo -u postgres psql` пускает без пароля благодаря методу peer: PostgreSQL сверяет имя роли с именем системного пользователя при подключении через локальный сокет.

`psql`:

```
sudo -u postgres psql
CREATE ROLE myapp WITH LOGIN PASSWORD 'strong-password';
CREATE DATABASE myapp OWNER myapp;
\q
```

## Шаг 3. Подключайтесь удалённо через SSH-туннель

SSH-туннель - самый безопасный способ открыть базу в DBeaver, pgAdmin или DataGrip со своего компьютера: порт 5432 остаётся закрытым, а трафик идёт внутри уже защищённого SSH-соединения. Выполните команду на своём компьютере, подставив пользователя и IP сервера, и не закрывайте окно:

```bash
ssh -N -L 5432:localhost:5432 deploy@203.0.113.10
```

Теперь в клиенте подключайтесь к `localhost:5432` с ролью `myapp` и её паролем. Если на компьютере уже работает свой PostgreSQL, возьмите другой локальный порт: `-L 15432:localhost:5432`. Как настроить вход по ключу - в статье [про подключение к VPS по SSH](https://tihost.io/blog/ssh-connect-to-vps).

## Шаг 4. Если порт всё же нужно открыть

Прямой доступ к порту 5432 нужен, когда к базе ходит другой сервер, а туннель держать неудобно. Тогда закрывают всё, кроме одного адреса, - на трёх уровнях: PostgreSQL слушает внешний интерфейс, pg_hba.conf пускает только нужную роль с нужного IP, UFW пропускает пакеты только с этого IP. Сначала узнайте пути к файлам настроек:

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

Измените `listen_addresses` в postgresql.conf и добавьте строку в pg_hba.conf, подставив IP своего клиента вместо `198.51.100.7`. `hostssl` разрешает только шифрованные подключения - на Ubuntu и Debian SSL в PostgreSQL включён по умолчанию с самоподписанным сертификатом, а `scram-sha-256` - современный метод проверки пароля:

`/etc/postgresql/<версия>/main/`:

```
# postgresql.conf
listen_addresses = '*'

# pg_hba.conf - строка в конец файла
hostssl  myapp  myapp  198.51.100.7/32  scram-sha-256
```

```bash
sudo systemctl restart postgresql
sudo ufw allow from 198.51.100.7 to any port 5432 proto tcp
sudo ss -tlnp | grep 5432
```

> Не пишите в pg_hba.conf `0.0.0.0/0` и не открывайте порт 5432 в UFW для всех: открытый PostgreSQL постоянно перебирают боты. Пароль роли должен быть длинным и случайным.

## Шаг 5. Настройте резервные копии pg_dump

`pg_dump -Fc` делает согласованный дамп базы в сжатом формате custom прямо на работающем сервере - останавливать PostgreSQL не нужно. Роли и их пароли в дамп базы не входят, их сохраняет `pg_dumpall --globals-only`:

```bash
mkdir -p ~/backups
sudo -u postgres pg_dump -Fc myapp > ~/backups/myapp-$(date +%F).dump
sudo -u postgres pg_dumpall --globals-only > ~/backups/globals-$(date +%F).sql
```

Восстанавливают дамп командой `pg_restore` - для проверки удобно разворачивать его в отдельную базу, не трогая рабочую:

```bash
sudo -u postgres createdb --owner=myapp myapp_restored
sudo -u postgres pg_restore -d myapp_restored --no-owner --role=myapp < ~/backups/myapp-2026-10-05.dump
```

Дамп, который лежит на том же сервере, пропадёт вместе с ним. Как отправлять дампы на другой сервер по расписанию, хранить историю и проверять восстановление - в статье [про резервные копии VPS](https://tihost.io/blog/vps-backup).

## Шаг 6. Базовая настройка памяти

По умолчанию PostgreSQL берёт под свой кеш (`shared_buffers`) всего 128 МБ. Общепринятый ориентир - около 25% оперативной памяти сервера, а `effective_cache_size` - подсказка планировщику, сколько данных поместится в кеше вместе с кешем ОС, обычно 50-75% памяти. Пример для сервера с 4 ГБ, где PostgreSQL - основная нагрузка:

```bash
sudo -u postgres psql -c "ALTER SYSTEM SET shared_buffers = '1GB';"
sudo -u postgres psql -c "ALTER SYSTEM SET effective_cache_size = '3GB';"
sudo systemctl restart postgresql
sudo -u postgres psql -c "SHOW shared_buffers;"
```

Это стартовые значения, а не формула: если на том же сервере работают приложение и nginx, оставьте им запас и берите меньше. Меняйте параметры по одному и смотрите на память и время запросов. `ALTER SYSTEM` записывает настройки в `postgresql.auto.conf`, а `shared_buffers` вступает в силу только после перезапуска.

## Какой VPS нужен PostgreSQL

Базе небольшого сайта или бота хватает 2 ГБ памяти; если база растёт и рядом работает приложение, берите 4-8 ГБ, чтобы горячие данные помещались в кеш. Подробнее - в статье [сколько оперативной памяти нужно VPS](https://tihost.io/blog/how-much-ram-vps). Серверы Tihost работают на NVMe-дисках, что важно для базы данных с частой записью, и стоят от $4.00 в месяц. Приложение к базе можно развернуть по инструкции [Node.js на VPS](https://tihost.io/blog/nodejs-app-on-vps).

**Запустите сервер за 2 минуты.** AMD Ryzen 9, NVMe и защита от DDoS в Германии, Финляндии и Польше. Оплата криптовалютой или картой. [Заказать сервер](https://tihost.io/login)

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

### Как подключиться к PostgreSQL на VPS с домашнего компьютера?

Безопаснее всего через SSH-туннель: команда `ssh -N -L 5432:localhost:5432 user@IP-сервера`, после чего клиент подключается к `localhost:5432`. Порт PostgreSQL при этом остаётся закрытым для интернета.

### Почему PostgreSQL не принимает внешние подключения?

После установки на Ubuntu и Debian PostgreSQL слушает только localhost. Для внешних подключений нужно изменить `listen_addresses` в postgresql.conf, добавить строку для IP клиента в pg_hba.conf, перезапустить сервис и открыть порт 5432 в файрволе.

### Какую версию PostgreSQL ставит apt?

Ubuntu 22.04 ставит PostgreSQL 14, Debian 12 - PostgreSQL 15, Ubuntu 24.04 - PostgreSQL 16. Более новые версии доступны из официального репозитория PostgreSQL (apt.postgresql.org).

### Чем pg_dump отличается от pg_dumpall?

`pg_dump` сохраняет одну базу данных, а `pg_dumpall` - весь кластер PostgreSQL, включая роли. Удобная схема: `pg_dump -Fc` для каждой базы и `pg_dumpall --globals-only` для ролей.

### Сколько памяти выделить PostgreSQL под shared_buffers?

Общепринятый ориентир для shared_buffers - около 25% оперативной памяти сервера, например 1 ГБ на сервере с 4 ГБ. Если на том же VPS работает приложение, значение берут меньше.

### PostgreSQL в Docker или через apt?

Через apt проще обновления безопасности и стандартные пути к настройкам; в Docker удобнее, когда всё приложение описано в compose.yaml. В Docker публикуйте порт PostgreSQL только на `127.0.0.1`, потому что Docker открывает порты в обход UFW.

---

Обновлено 2026-10-05 · https://tihost.io/blog/postgresql-on-vps
