PostgreSQL настройка подключения и удаленного доступа | DBeaver | AdminWiki

PostgreSQL настройка подключения: полное руководство для разработчиков и DevOps

17 декабря 2025 8 мин. чтения #dbeaver #devops #postgresql #базы данных #настройка подключения #удаленный доступ
Содержание статьи

Представь, что ты развернул PostgreSQL на сервере, но не можешь к нему подключиться. Знакомая ситуация? Давай разберем по косточкам все аспекты настройки подключения PostgreSQL — от базовой конфигурации до тонкостей удаленного доступа и работы с графическими клиентами.

Основы: как PostgreSQL управляет подключениями

PostgreSQL использует два ключевых файла для управления подключениями:

  • postgresql.conf — основные настройки сервера
  • pg_hba.conf — контроль доступа (Host-Based Authentication)
Важно: После изменения конфигурационных файлов необходимо перезагрузить сервис: sudo systemctl reload postgresql или выполнить SELECT pg_reload_conf(); из psql.

Шаг 1: Базовая настройка подключения в postgresql.conf

Начнем с основного конфигурационного файла. Найди его расположение командой:

bash
sudo -u postgres psql -c "SHOW config_file;"
# Обычные пути:
# Ubuntu/Debian: /etc/postgresql/{version}/main/postgresql.conf
# CentOS/RHEL: /var/lib/pgsql/{version}/data/postgresql.conf

Критические параметры для подключения:

config
# Слушать все интерфейсы (для удаленного подключения)
listen_addresses = '*'  # или конкретные IP через запятую

# Порт по умолчанию
port = 5432

# Максимальное количество соединений
max_connections = 100

# Разрешить SSL соединения
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

Проверка текущих настроек

sql
-- Из psql выполни:
SHOW listen_addresses;
SHOW port;
SHOW max_connections;

-- Или посмотреть все параметры:
SELECT name, setting, unit FROM pg_settings 
WHERE name IN ('listen_addresses', 'port', 'max_connections');

Шаг 2: Настройка удаленного подключения к PostgreSQL

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

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

2.1. Редактируем postgresql.conf

config
# Разрешаем слушать все сетевые интерфейсы
listen_addresses = '*'  # вместо 'localhost'

# Проверяем порт
port = 5432

2.2. Настраиваем pg_hba.conf

Этот файл определяет, кто и как может подключаться. Формат записей:

Тип База Пользователь Адрес Метод
host all all 0.0.0.0/0 md5

Примеры записей для разных сценариев:

config
# Разрешить всем с любого IP (НЕ БЕЗОПАСНО для продакшена!)
host    all             all             0.0.0.0/0               md5

# Разрешить конкретной сети
host    all             all             192.168.1.0/24          md5

# Разрешить конкретному пользователю из конкретной сети
host    mydb            myuser          10.0.0.0/8              scram-sha-256

# SSL соединения
hostssl all             all             0.0.0.0/0               md5

# Локальные подключения (Unix socket)
local   all             all                                     peer
# или для паролей:
local   all             all                                     md5

2.3. Настройка фаервола

bash
# Для ufw (Ubuntu/Debian)
sudo ufw allow 5432/tcp
sudo ufw reload

# Для firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload

# Для iptables
sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
# Сохраняем правила в зависимости от дистрибутива

Шаг 3: Настройка подключения DBeaver к PostgreSQL

DBeaver — популярный графический клиент для работы с базами данных. Давай разберем настройку подключения DBeaver к PostgreSQL шаг за шагом.

3.1. Создание нового подключения

  1. Открой DBeaver и нажми Database → New Database Connection
  2. Выбери PostgreSQL из списка
  3. Заполни параметры подключения:

Основные параметры:

  • Host: IP адрес или домен сервера
  • Port: 5432 (или кастомный порт)
  • Database: Имя базы данных (по умолчанию postgres)
  • Username: Имя пользователя PostgreSQL
  • Password: Пароль пользователя

3.2. Дополнительные настройки DBeaver

Во вкладке Driver Properties можно настроить:

properties
# Таймауты и лимиты
connectTimeout=30
socketTimeout=300
loginTimeout=20

# SSL настройки
ssl=true
sslmode=verify-full  # или require для самоподписанных сертификатов

# Кодировка
charset=UTF8

3.3. Тестирование подключения

Нажми Test Connection для проверки. Если есть ошибки — DBeaver обычно показывает понятное описание проблемы.

Совет: Сохрани настройки подключения как шаблон, чтобы использовать для других серверов с аналогичной конфигурацией.

Шаг 4: Решение частых проблем с подключением

Проблема 1: "Connection refused"

Возможные причины и решения:

bash
# 1. Проверяем, слушает ли порт
sudo netstat -tlnp | grep 5432
# Должно быть: tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN

# 2. Проверяем статус службы
sudo systemctl status postgresql

# 3. Проверяем фаервол
sudo ufw status  # или firewall-cmd --list-all

Проблема 2: "No pg_hba.conf entry"

Ошибка означает, что в pg_hba.conf нет правила для твоего подключения:

bash
# Смотрим текущие правила
sudo cat /path/to/pg_hba.conf | grep -v "^#" | grep -v "^$"

# Добавляем правило для своей сети
# Например, для сети 192.168.1.0/24:
echo "host all all 192.168.1.0/24 md5" | sudo tee -a /path/to/pg_hba.conf

Проблема 3: Аутентификация не работает

Проверь метод аутентификации в pg_hba.conf и убедись, что у пользователя есть пароль:

sql
-- Создаем пользователя с паролем
CREATE USER myuser WITH PASSWORD 'strong_password';

-- Даем права на базу
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

-- Или меняем пароль существующему пользователю
ALTER USER postgres WITH PASSWORD 'new_password';

Шаг 5: Продвинутые настройки подключения

5.1. Настройка пула соединений с PgBouncer

Для production-среды рекомендуется использовать пулер соединений:

config
# /etc/pgbouncer/pgbouncer.ini
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb

[pgbouncer]
listen_addr = 127.0.0.1
listen_port = 6432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 100
default_pool_size = 20

5.2. SSL/TLS настройка

bash
# Генерация самоподписанного сертификата
sudo openssl req -new -x509 -days 365 -nodes -text \
  -out /var/lib/pgsql/data/server.crt \
  -keyout /var/lib/pgsql/data/server.key \
  -subj "/CN=your-server-name"

# Устанавливаем правильные права
sudo chmod 600 /var/lib/pgsql/data/server.key
sudo chown postgres:postgres /var/lib/pgsql/data/server.*

5.3. Мониторинг активных подключений

sql
-- Просмотр активных подключений
SELECT 
    pid,
    usename,
    application_name,
    client_addr,
    client_port,
    backend_start,
    state,
    query
FROM pg_stat_activity 
WHERE state = 'active';

-- Количество подключений по пользователям
SELECT usename, count(*) 
FROM pg_stat_activity 
GROUP BY usename;

-- Завершение проблемного подключения
SELECT pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE pid = 12345;  -- замени на нужный PID

Быстрая шпаргалка по командам

Полезные команды для диагностики:

  • sudo systemctl status postgresql — статус службы
  • sudo journalctl -u postgresql -f — логи в реальном времени
  • sudo netstat -tlnp | grep 5432 — проверка открытого порта
  • psql -h localhost -U postgres -d postgres — тестовое подключение
  • sudo tail -f /var/log/postgresql/postgresql-*.log — просмотр логов
Производительность: Не устанавливай max_connections слишком высоким значением. Каждое соединение потребляет память. Лучше использовать пулер соединений (PgBouncer) для высоконагруженных систем.

Часто задаваемые вопросы (FAQ)

Как проверить, что удаленное подключение настроено правильно?

Используй команду telnet или nc с другого сервера: telnet ваш_сервер 5432. Если соединение устанавливается — порт открыт. Затем проверь подключение через psql: psql -h ваш_сервер -U пользователь -d база.

Почему DBeaver не подключается, хотя psql работает?

Частые причины: разные методы аутентификации в pg_hba.conf для localhost и сетевых подключений, проблемы с SSL, или DBeaver использует устаревший драйвер. Проверь настройки SSL во вкладке "Driver Properties" и обнови драйвер PostgreSQL в DBeaver.

Как безопасно настроить удаленный доступ?

1. Используй SSL/TLS шифрование. 2. Ограничь доступ по IP через pg_hba.conf (только доверенные сети). 3. Настрой фаервол. 4. Используй сложные пароли и регулярно их меняй. 5. Рассмотри использование VPN или SSH туннеля вместо прямого доступа.

Как изменить порт PostgreSQL?

В postgresql.conf измени параметр port = 5433 (например), затем обнови pg_hba.conf и правила фаервола для нового порта. Не забудь перезагрузить службу.

Итог

Настройка подключения PostgreSQL — многоуровневый процесс: от базовой конфигурации сервера до тонкой настройки прав доступа. Главное — понимать логику работы pg_hba.conf и последовательно проверять каждый этап: служба → конфигурация → фаервол → аутентификация. С опытом эти действия станут рутиной, а проблемы с подключением будут решаться за минуты.

Помни: безопасность важнее удобства. Никогда не оставляй PostgreSQL открытым для всего интернета без надлежащей защиты.

Поделиться:
Сохранить гайд? В закладки браузера