Установка PostgreSQL 11 и pgAdmin4 на CentOS 7
Важно: следуйте командам под пользователем с правами sudo. Для боевых серверов применяйте дополнительные меры безопасности и регулярные обновления.
Что такое PostgreSQL и pgAdmin4
PostgreSQL — это объектно-реляционная система управления базами данных с открытым исходным кодом, подходящая для больших и нагруженных баз. Кратко: надежная, расширяемая, поддерживает сложные типы данных и транзакции.
pgAdmin4 — веб-ориентированная графическая админка для PostgreSQL. Она написана на Python и JavaScript и может работать как десктопное приложение или как веб-приложение под httpd/Apache.
Краткое определение терминов:
- ORDBMS: СУБД с возможностями объектно-реляционных расширений (коротко — PostgreSQL).
- SELinux: Механизм безопасности ядра Linux для контроля привилегий и доступа.
Оглавление
- Шаг 1 — Установка зависимостей
- Шаг 2 — Добавление репозитория и установка PostgreSQL 11
- Шаг 3 — Настройка пользователя postgres и метода аутентификации
- Шаг 4 — Установка pgAdmin4
- Шаг 5 — Конфигурация pgAdmin4 и создание администратора
- Шаг 6 — Настройка SELinux
- Шаг 7 — Настройка firewalld
- Шаг 8 — Проверка и добавление сервера в pgAdmin4
- Критерии приёмки
- Чек-листы и ролевая ответственность
- Подсказки, типовые ошибки и устранение неполадок
- Краткая сводка и ссылки на документацию
Шаг 1 — Установка зависимостей
Сначала обновим пакеты и установим базовые утилиты. Это важно для совместимости репозиториев и инструментов управления.
Выполните:
sudo yum update
sudo yum -y install epel-releaseЗатем установите пакеты, которые понадобятся дальше: управление политиками SELinux, firewalld, редактор vim и сетевые утилиты.
sudo yum -y install policycoreutils-python firewalld vim net-toolsЭти пакеты обеспечивают:
- policycoreutils-python — утилиты для управления контекстами SELinux (semanage и др.).
- firewalld — динамическая конфигурация сетевого брандмауэра.
- net-tools — ifconfig, netstat и прочие классические утилиты.

Важно: для систем без доступа в интернет или с контролируемыми репозиториями используйте внутренние зеркала пакетов.
Шаг 2 — Добавление репозитория PostgreSQL и установка PostgreSQL 11
Добавьте официальный репозиторий PostgreSQL для CentOS 7 и установите пакеты сервера и утилит.
sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum repolistПосле добавления репозитория установите PostgreSQL 11:
sudo yum -y install postgresql11 postgresql11-server postgresql11-contribИнициализируйте кластер базы данных (создание каталога данных, системных таблиц и др.):
/usr/pgsql-11/bin/postgresql-11-setup initdbЗапустите сервис и добавьте его в автозагрузку:
systemctl start postgresql-11
systemctl enable postgresql-11Проверка статуса сервиса:
systemctl status postgresql-11
Примечание: если вы используете SELinux или нестандартные пути для данных, учтите это при инициализации.
Шаг 3 — Настройка пользователя postgres и аутентификации
По умолчанию в PostgreSQL есть системный пользователь postgres. Настроим пароль и переключим метод аутентификации с ident на md5, чтобы разрешить подключение по паролю.
Войдите под пользователем postgres и откройте psql:
su - postgres
psqlУстановите пароль для пользователя postgres:
\password postgres
# Введите новый пароль и подтвердите егоВыйдите из psql:
\q
exitТеперь изменим метод аутентификации в файле pg_hba.conf. Откройте его в редакторе:
cd /var/lib/pgsql/11/data/
vim pg_hba.confНайдите строку для локальных подключений 127.0.0.1/32 и замените ident на md5:
host all all 127.0.0.1/32 md5Сохраните и перезапустите сервис:
systemctl restart postgresql-11Проверка подключения с хоста:
psql -h 127.0.0.1 -U postgres
# Введите пароль, который вы задали
Важно: если планируете удалённые подключения, отредактируйте также postgresql.conf параметр listen_addresses и добавьте соответствующие ACL в pg_hba.conf.
Шаг 4 — Установка pgAdmin4
Теперь установим pgAdmin4 из доступных пакетов. Пакет автоматически подтянет зависимости, включая httpd и вспомогательные модули.
sudo yum -y install pgadmin4Запустите Apache (httpd) и включите автозагрузку:
systemctl start httpd
systemctl enable httpdpgAdmin4 после установки доступен как веб-приложение под Apache по умолчанию.

Замечание: в некоторых сборках pgAdmin4 пакет называется pgadmin4-web или содержит дополнительные зависимости. Убедитесь, что установлен компонент веб-интерфейса.
Шаг 5 — Конфигурация pgAdmin4 и создание администратора
Подготовим директории для данных и логов, настроим конфигурацию и создадим пользователя-администратора.
Переименуйте поставляемый конфиг при необходимости и создайте каталоги:
cd /etc/httpd/conf.d/
mv pgadmin4.conf.sample pgadmin4.conf
mkdir -p /var/log/pgadmin4/
mkdir -p /var/lib/pgadmin4/{sessions,storage}Отредактируйте основной файл конфигурации pgAdmin4 (местоположение для пакетов Python2 указано в примере пакета):
vim /usr/lib/python2.7/site-packages/pgadmin4-web/config.pyДобавьте в конец файла следующие строки, чтобы задать пути для логов и хранилища:
LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
STORAGE_DIR = '/var/lib/pgadmin4/storage'Создайте администратора pgAdmin4 через скрипт настройки:
python /usr/lib/python2.7/site-packages/pgadmin4-web/setup.pyСледуйте подсказкам, введите email администратора и пароль. После успешного создания перезапустите Apache:
systemctl restart httpdИзмените владельца каталогов на пользователя Apache, чтобы веб-сервер имел права записи:
chown -R apache:apache /var/lib/pgadmin4/
chown -R apache:apache /var/log/pgadmin4/
Совет: для production-серверов храните базу данных pgAdmin4 (по умолчанию SQLite) на отдельном разделе или используйте внешний сервер баз данных для большей надежности.
Шаг 6 — Настройка SELinux для pgAdmin4
Если SELinux включен в режиме Enforcing, нужно разрешить Apache подключаться к сети и установить корректные контексты безопасности для каталогов pgAdmin4.
Проверьте статус SELinux:
sestatus
Разрешите httpd делать сетевые соединения — это необходимо для подключения к localhost:5432:
setsebool -P httpd_can_network_connect 1Установите контекст httpd_sys_rw_content_t для директорий данных и логов, чтобы Apache мог читать и писать файлы:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/lib/pgadmin4(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/log/pgadmin4(/.*)?"Восстановите контексты:
sudo restorecon -R /var/lib/pgadmin4/
sudo restorecon -R /var/log/pgadmin4/После этого Apache сможет работать с файлами pgAdmin4 без отключения SELinux.

Важно: semanage может отсутствовать в минимальной установке; в таком случае установите пакет policycoreutils-python, как описано в шаге 1.
Шаг 7 — Настройка firewalld
Разрешим HTTP и HTTPS трафик, чтобы веб-интерфейс pgAdmin4 был доступен извне (если это требуется политикой безопасности).
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reloadПроверьте текущую конфигурацию зон и сервисов при необходимости:
firewall-cmd --list-all
Совет: если доступ должен быть ограничен по IP, используйте правила rich rules или настройку зон вместо глобального открытия портов.
Шаг 8 — Проверка и добавление сервера в pgAdmin4
Откройте браузер и перейдите по адресу сервера и пути /pgadmin4. Например:

Войдите под учетной записью администратора, созданной ранее. После входа вы попадёте на дашборд pgAdmin4.

Добавление PostgreSQL сервера в pgAdmin4:
- Нажмите Add New Server.
- На вкладке General укажите имя сервера.
- На вкладке Connection укажите Host/IP, порт (по умолчанию 5432), Username и Password.
- Нажмите Save.

После сохранения в левой панели вы увидите дерево вашего сервера и баз данных.

Поздравляем — установка и базовая конфигурация PostgreSQL 11 и pgAdmin4 завершены.
Критерии приёмки
- PostgreSQL 11 корректно установлен и сервис запущен: systemctl status postgresql-11 показывает active.
- Авторизация по паролю для локальных подключений работает: psql -h 127.0.0.1 -U postgres успешно авторизуется.
- Apache запущен и обслуживает pgAdmin4: systemctl status httpd -> active.
- Администратор pgAdmin4 создан и может войти через веб-интерфейс.
- SELinux настроен (если Enforcing) и директории имеют метку httpd_sys_rw_content_t.
- Firewall разрешает доступ по HTTP/HTTPS или доступ ограничён в соответствии с политикой безопасности.
Чек-листы и ролевая ответственность
Чек-лист для системного администратора:
- Обновить систему и установить EPEL.
- Добавить репозиторий PostgreSQL.
- Установить и инициализировать PostgreSQL.
- Настроить пароль postgres и pg_hba.conf.
- Установить pgAdmin4 и создать администратора.
- Настроить SELinux и права на директории.
- Настроить firewalld или сетевые правила.
- Проверить подключение через pgAdmin4 и psql.
DevOps / инженер по безопасности:
- Провести аудит открытых портов и политики доступа.
- Настроить резервное копирование базы данных.
- Рассмотреть использование TLS для веб-интерфейса pgAdmin4 и для подключений PostgreSQL.
Ролевая ответственность помогает избежать конфликтов при развертывании в продакшене.
Подсказки, типовые ошибки и устранение неполадок
- Ошибка: «psql: could not connect to server: Connection refused»
- Проверьте, что postgresql-11 запущен: systemctl status postgresql-11.
- Убедитесь, что listen_addresses в postgresql.conf настроен корректно.
- Для локального подключения используйте 127.0.0.1 и соответствующую строку в pg_hba.conf.
- Ошибка входа в pgAdmin4 через браузер
- Перезапустите httpd и проверьте логи /var/log/httpd/error_log и /var/log/pgadmin4/pgadmin4.log.
- Убедитесь, что директории принадлежат apache: apache и имеют корректные права.
- Если SELinux в Enforcing, проверьте контексты и политику: audit2why и audit.log помогут выяснить причину отказа.
- Проблемы с semanage отсутствует
- Установите policycoreutils-python: sudo yum -y install policycoreutils-python.
- Если pgAdmin4 показывает пустую страницу
- Проверьте конфигурацию Apache в /etc/httpd/conf.d/pgadmin4.conf.
- Убедитесь, что все зависимости Python установлены и соответствующих пакетов достаточно.
- Рекомендации по безопасности
- Включите TLS на Apache и принудите HTTPS для доступа к pgAdmin4.
- Ограничьте доступ к /pgadmin4 по IP, если необходимо.
- Регулярно обновляйте пакеты и следите за CVE в PostgreSQL и pgAdmin.
Быстрый cheat sheet команд
- Обновление и EPEL: sudo yum update && sudo yum -y install epel-release
- Установка PostgreSQL 11: sudo yum -y install postgresql11 postgresql11-server postgresql11-contrib
- Инициализация: /usr/pgsql-11/bin/postgresql-11-setup initdb
- Управление сервисом: systemctl start|stop|restart|status postgresql-11
- Установка pgAdmin4: sudo yum -y install pgadmin4
- Запуск Apache: systemctl start httpd && systemctl enable httpd
- SELinux: setsebool -P httpd_can_network_connect 1
- Метки контекстов: semanage fcontext -a -t httpd_sys_rw_content_t “/var/lib/pgadmin4(/.*)?”
Альтернативные подходы и масштабирование
- Если требуется высокая доступность, рассмотрите настройку кластеров с репликацией (Streaming Replication), Patroni или Pacemaker.
- Для больших нагрузок храните pgAdmin4 в контейнере или на отдельном сервере и используйте внешнюю СУБД для хранения настроек pgAdmin4.
- Для автоматизированных развертываний применяйте Ansible playbooks или Terraform для инфраструктуры и конфигурации.
Мини-методология развертывания для продакшена:
- Подготовка базовой ОС и обновление.
- Развёртывание PostgreSQL с резервной схемой (репликация).
- Настройка мониторинга и бэкапов.
- Развёртывание pgAdmin4 через контролируемый CI/CD с TLS.
- Тестирование доступа и политики безопасности.
Краткая сводка
Установить PostgreSQL 11 и pgAdmin4 на CentOS 7 можно за несколько шагов: добавить репозиторий, установить и инициализировать сервер, настроить пароль и аутентификацию, установить pgAdmin4, настроить SELinux и firewall, затем проверить доступ через браузер. Следуйте чек-листу и настройте резервное копирование и TLS для боевых систем.
Справочные ссылки
КОНЕЦ
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента