Установка и настройка PostgreSQL на CentOS
TL;DR
Кратко: этот подробный гид показывает, как установить и безопасно настроить PostgreSQL на CentOS, включая выбор версии, инициализацию, создание ролей и баз данных, базовый hardening и проверку работоспособности. Следуйте шагам, проверьте службу и настройте доступ для разработчиков и продакшн‑окружения.
PostgreSQL — надёжная и масштабируемая реляционная СУБД с поддержкой ACID‑транзакций, MVCC и журнала предзаписи (WAL). Подходит как для локальных серверов, так и для аналитических хранилищ. В этом материале вы найдёте пошаговую инструкцию установки на CentOS, советы по безопасности и эксплуатационные чеклисты.
Оглавление
- Введение и требования
- Как установить PostgreSQL в CentOS — пошагово
- Шаг 1: Обновление системы
- Шаг 2: Выбор/включение версии PostgreSQL
- Шаг 3: Установка сервера и инициализация БД
- Шаг 4: Конфигурация и запуск службы
- Шаг 5: Создание ролей и баз данных
- Безопасность и hardening
- Частые проблемы и устранение неполадок
- SOP / Плейбук для развёртывания
- Критерии приёмки и тесты
- Краткое резюме и полезные ссылки
Введение и требования
Короткое пояснение терминов:
- ACID — набор гарантий для транзакций (целостность и согласованность).
- MVCC — механизм многоверсионного контроля параллельного доступа.
- WAL — журнал предзаписи для восстановления и репликации.
Требования:
- Учетная запись с правами sudo или root.
- Подключение к интернету для загрузки пакетов.
- CentOS (Stream, 8, 7 и совместимые RHEL версии — нюансы ниже).
Важно: команды в инструкции предполагают работу в shell с правами администратора. Если вы используете контейнеры, облачные образы или управляемый хостинг, посмотрите раздел «Совместимость и миграция».
Как установить PostgreSQL в CentOS
CentOS может использовать dnf или yum в зависимости от версии. Ниже — последовательность из исходного материала, дополненная пояснениями и безопасными практиками.
Шаг 1: Обновление и обновление предустановленных пакетов
Переключитесь на root при необходимости:
suПроверьте доступные обновления:
sudo yum check-update.jpg?q=50&fit=crop&w=825&dpr=1.5)
Обновите пакеты:
sudo yum updateПосле обновления перезагрузите систему, чтобы применились все системные обновления:
sudo rebootПримечание: на CentOS Stream и новых релизах используйте dnf; команды yum обычно перенаправляют на dnf.
Шаг 2: Проверка и выбор версии PostgreSQL
Узнать модули PostgreSQL можно так:
dnf module list postgresql.jpg?q=50&fit=crop&w=825&dpr=1.5)
По умолчанию модуль может указывать на старую версию (в исходном материале — версия 10). Чтобы использовать конкретную версию (пример: 13), включите модуль:
sudo dnf module enable postgresql:13Альтернативный путь: использовать официальный репозиторий PostgreSQL (PGDG) если вам нужна версия, отсутствующая в модулях dnf. Для продакшна часто рекомендуют PGDG для получения новейших пакетов и патчей безопасности.
Когда версия выбрана, установите пакет сервера и клиентские утилиты.
Шаг 3: Установка пакета сервера PostgreSQL
sudo dnf install postgresql-serverИнициализируйте базу данных (создаст каталог данных и системные каталоги):
postgresql-setup --initdbПосле инициализации включите автозапуск службы и запустите её:
systemctl enable postgresql
systemctl start postgresqlПроверьте статус:
systemctl status postgresqlЕсли в выводе отображается Active, служба работает. Если нет — смотрите раздел устранения неполадок.
Шаг 4: Базовая конфигурация PostgreSQL
Установите пароль для системного пользователя postgres:
passwd postgresЗатем переключитесь на системную учётную запись postgres для выполнения администрирования:
su - postgresФайлы конфигурации, которые вы будете править:
- /var/lib/pgsql/data/postgresql.conf — основные параметры сервера (порт, listen_addresses, настройки буферов)
- /var/lib/pgsql/data/pg_hba.conf — правила аутентификации и доступа
Пример: разрешить удалённые подключения (внимательно с безопасностью):
- В postgresql.conf найти и изменить:
listen_addresses = 'localhost' -- изменить на '*' или конкретный IP- В pg_hba.conf добавить строку для IPv4 подключения по паролю (пример):
# host database user address method
host all all 192.168.0.0/24 md5После правок перезагрузите службу:
systemctl restart postgresqlВажно: при открытии listen_addresses убедитесь, что файрвол не пропускает трафик на порт 5432 посторонним пользователям.
Шаг 5: Создание роли пользователя и базы данных
Создать роль интерактивно можно так:
createuser --interactiveЕсли вы не хотите переходить в postgres‑учётку:
sudo -u postgres createuser --interactiveРекомендация: сделайте роли с наименьшими правами, дающими доступ только к нужным базам или схемам. Для паролей используйте команду psql:
psql -c "ALTER ROLE username WITH PASSWORD 'secure_password';"Создать системного пользователя (OS) под имя роли (если требуется):
sudo adduser test
sudo -i -u testСоздать базу данных:
createdb databasenameПример создания таблицы (через psql):
CREATE TABLE hotel (
hotel_id serial PRIMARY KEY,
star varchar(50) NOT NULL,
paint varchar(25) NOT NULL,
location varchar(25) CHECK (location in ('north','south','west','east','northeast','southeast','southwest','northwest')),
date date
);Добавление данных:
INSERT INTO hotel (hotel_id, star, paint, location, date) VALUES (DEFAULT, 'Five', 'Blue', 'northwest', '2018-08-16');Примечание: подгоняйте имена полей и типы данных под реальные требования приложений.
Безопасность и hardening
Важно минимизировать поверхность атаки перед выпуском в продакшн:
- Ограничьте listen_addresses до конкретных IP, если возможно.
- В pg_hba.conf используйте trust только для локальных административных каналов; для сетевых подключений — md5 или лучше scram-sha-256.
- Включите шифрование паролей SCRAM (если поддерживается версией сервера) и обновите роли: ALTER ROLE … ENCRYPTED PASSWORD.
- Настройте бэкапы (pg_basebackup, pg_dump/pg_dumpall) и проверьте восстановление на тестовом сервере.
- Настройте мониторинг состояния диска, I/O и задержек записи WAL.
- Ограничьте доступ через файрвол: открыть порт 5432 только для доверенных адресов.
Пример команды firewall-cmd (CentOS 7/8):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="5432" accept'
sudo firewall-cmd --reloadSELinux: если включён, возможны блокировки доступа к файловой системе данных. При проблемах смотрите журнал audit.log и используйте audit2allow.
Частые проблемы и устранение неполадок
- Служба не стартует:
- Просмотрите логи: journalctl -u postgresql -b
- Проверяйте права на каталог данных и владельца (обычно postgres:postgres).
- Ошибки инициализации:
- Убедитесь, что каталог данных пуст и у процесса есть доступ.
- Проблемы с подключением удалённо:
- Проверьте listen_addresses, pg_hba.conf, firewall и SELinux.
- Производительность:
- Проверьте настройки shared_buffers, work_mem, wal_buffers и autovacuum.
Важно: перед внесением изменений в production храните резервную копию конфигураций.
SOP / Плейбук для развёртывания PostgreSQL на сервере
Шаги «быстрой установки»:
- Подготовка ОС: обновить пакеты и перезагрузить.
- Выбрать версию PostgreSQL (dnf module или PGDG).
- Установить postgresql-server и инициализировать базу.
- Запустить и включить службу systemctl.
- Установить пароль для системного пользователя postgres.
- Создать роли и базы данных согласно требованиям приложения.
- Настроить pg_hba.conf и postgresql.conf, перезагрузить.
- Настроить файрвол и SELinux (при необходимости).
- Настроить регулярные бэкапы и проверку восстановления.
- Внедрить мониторинг и алертинг (например, проверка службы и задержек WAL).
Резервное копирование (кратко):
- Используйте pg_dump для логических дампов или pg_basebackup для физической реплики.
Критерии приёмки
Минимальные проверки перед переходом в продакшн:
- Служба PostgreSQL запущена и активна.
- Учетная запись postgres имеет надёжный пароль.
- Создана тестовая база и таблица, можно выполнить INSERT/SELECT.
- Настроены бэкапы и проверено восстановление на тестовом хосте.
- Файрвол закрывает порт 5432 для неавторизованных источников.
- Мониторинг собирает метрики доступности и задержек.
Пример тестов (см. раздел Тесты): запустить psql и выполнить простые SQL‑команды.
Тесты и критерии приёмки (acceptance)
- Проверка статуса службы:
systemctl is-active postgresql
# ожидается: active- Проверка подключения локально:
sudo -u postgres psql -c "SELECT version();"- Создать базу, таблицу, вставить и выбрать:
createdb testdb
psql -d testdb -c "CREATE TABLE t(id serial PRIMARY KEY, v text);"
psql -d testdb -c "INSERT INTO t(v) VALUES('ok');"
psql -d testdb -c "SELECT * FROM t;"Успешный результат — строка с ‘ok’.
Совместимость и миграция
- CentOS 7 использует sysvinit/systemd и может иметь старые модули; CentOS 8/Stream — dnf modules.
- При переходе между мажорными версиями PostgreSQL используйте pg_upgrade или logical dump/restore (pg_dump/pg_restore) — pg_upgrade быстрее, но требует совместимости форматов.
- Если вы используете сторонние модули (расширения), проверьте их совместимость с целевой версией PostgreSQL.
Шаблоны и чек-листы (быстрый доступ)
Чек-лист администратора перед релизом:
- Обновления ОС применены и сервер перезагружён
- Версия PostgreSQL подтверждена
- Данные и каталоги имеют владельца postgres
- Пароли ролей заданы и безопасны
- Файрвол и SELinux настроены
- Бэкапы настроены и проверены
- Мониторинг и алерты активны
Чек-лист разработчика для локального окружения:
- Локальный postgres доступен на 5432
- Создана тестовая база данных
- Миграции успешно применяются
Факты и модели принятия решений
Факт‑бокс:
- PostgreSQL — транзакционная СУБД с поддержкой ACID и MVCC.
- Порт по умолчанию: 5432.
- Основные файлы конфигурации: postgresql.conf, pg_hba.conf.
Модель принятия решения о выборе версии:
- Нужны последние фичи/оптимизации → используйте PGDG или последние модули dnf.
- Нужна максимальная стабильность → выберите LTS‑версию, протестированную в вашей среде.
Глоссарий (строчно)
- СУБД: система управления базами данных.
- ROLE: учетная запись/роль в PostgreSQL, объединяющая права.
- WAL: журнал предзаписи — ключ для восстановления и репликации.
Заключение
Этот материал даёт полный набор шагов для установки PostgreSQL на CentOS — от обновления системы до создания ролей, баз и базового hardening. Для продакшн‑окружения добавьте мониторинг, регулярные бэкапы и проверку восстановления. Если вам требуется миграция между версиями — планируйте тестовую процедуру с pg_upgrade или дамп/восстановление.
Важно
- Всегда тестируйте обновления и миграции на копии данных.
- Не открывайте порт 5432 публично без VPN или TLS‑туннеля.
Примечание
Если вы используете управляемые сервисы (RDS, Cloud SQL), большинство шагов по установке можно пропустить — но принципы конфигурации и безопасности остаются актуальными.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone