PostgreSQL и phpPgAdmin на Fedora 34

Цель и варианты использования
Эта статья показывает, как развернуть PostgreSQL и phpPgAdmin на Fedora 34. Подойдёт для разработчиков, системных администраторов и тестовых стендов. Если вы на продакшене, прочитайте разделы по безопасности и SSL.
Ключевые варианты: установка локально для разработки, развёртывание на VPS для тестирования, подготовка к миграции с другой СУБД. Альтернативы для управления БД: pgAdmin, Adminer, psql CLI.
Предварительные требования
- Сервер на базе Fedora 34.
- Доступ к не-root пользователю с sudo.
- Поддерживаемая сеть, возможность открыть порты HTTP/HTTPS и PostgreSQL.
- Обновите систему перед началом:
$ sudo dnf updateВажно: на продакшене держите систему и пакеты в актуальном состоянии.
Шаг 1 — Установка PostgreSQL
Fedora 34 предоставляет несколько модулей PostgreSQL. Модуль — набор пакетов и зависимостей.
Сначала посмотрите доступные потоки (streams) модуля postgresql:
$ dnf module list postgresql
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL module
postgresql 10 client, server [d] PostgreSQL module
postgresql 11 client, server [d] PostgreSQL module
postgresql 12 client, server PostgreSQL module
postgresql 13 client, server PostgreSQL moduleВыберите нужный поток и включите его. В примере используем версию 13:
$ sudo dnf module enable postgresql:13Подтвердите вводом Y.
Далее установите сервер и опциональный пакет contrib:
$ sudo dnf install postgresql-server
$ sudo dnf install postgresql-contribcontrib содержит дополнительные расширения и утилиты. На тестовой машине можно не устанавливать, но на продакшене часто полезно.
Шаг 2 — Инициализация кластера PostgreSQL
Кластер PostgreSQL — это набор баз данных, управляемых одним экземпляром сервера. При инициализации создаются шаблонные базы template1 и postgres.
Инициализируйте кластер:
$ sudo postgresql-setup --initdbЗапустите и включите службу:
$ sudo systemctl start postgresql
$ sudo systemctl enable postgresqlПроверка статуса:
$ sudo systemctl status postgresqlЕсли служба не стартует, смотрите журнал через journalctl:
$ sudo journalctl -u postgresql --no-pagerШаг 3 — Роли и методы аутентификации
PostgreSQL использует понятие роли для аутентификации и прав доступа. Основные методы:
- Trust — подключение без пароля, при заданных условиях в /var/lib/pgsql/pg_hba.conf.
- Password — пароль (md5, scram-sha-256 или plain).
- Ident — проверяет имя ОС-клиента (для TCP).
- Peer — как ident, но только для локальных unix-сокетов.
По умолчанию используется peer, то есть роль PostgreSQL связывается с Linux-пользователем.
Установщик создаёт системного пользователя postgres. Переключитесь на него:
$ sudo -i -u postgresЗапустите psql:
$ psqlВыход из psql:
postgres-# \qИли вызвать psql без переключения аккаунта:
$ sudo -u postgres psqlЕсли psql не запускается, проверьте переменные окружения PATH и наличие пакета postgresql.
Шаг 4 — Создание ролей и баз данных
Мы создадим пользователя, которого затем будем использовать для входа в phpPgAdmin.
Подключитесь к psql как postgres:
$ sudo -u postgres psqlСоздайте роль с правами суперпользователя, созданием БД и входом:
postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';Проверьте список ролей:
postgres-# \duСоздайте базу данных для пользователя и выдайте права:
postgres-# CREATE DATABASE userdb;
postgres-# GRANT ALL PRIVILEGES ON DATABASE userdb TO username;Проверьте список баз:
postgres-# \lСоветы: для продакшен-профиля лучше не давать пользователю права SUPERUSER без крайней необходимости. Используйте явные гранты.
Шаг 5 — Включение удалённого доступа
По умолчанию PostgreSQL слушает только localhost. Чтобы разрешить подключения извне, отредактируйте /var/lib/pgsql/data/postgresql.conf:
$ sudo nano /var/lib/pgsql/data/postgresql.confНайдите секцию CONNECTIONS AND AUTHENTICATION и раскомментируйте строку listen_addresses:
#listen_addresses = 'localhost' # what IP address(es) to listen on;Измените на:
listen_addresses = '*' # what IP address(es) to listen on;Сохраните и закройте файл.
Далее настройте pg_hba.conf для управления доступом:
$ sudo nano /var/lib/pgsql/data/pg_hba.confПримеры правил:
# TYPE DATABASE USER ADDRESS METHOD
# Пользователь john может подключаться к любым БД с любого IP по md5
host all john 0.0.0.0/0 md5
# Пользователь john может подключаться только к базе johndb с любого IP по md5
host johndb john 0.0.0.0/0 md5
# Пользователь john может подключаться ко всем базам с доверенного IP без пароля
host all john 192.168.1.110 trustЕсли в файле стоят строки с ident, измените их при необходимости на md5, чтобы можно было войти по паролю через веб-интерфейс.
После правок перезапустите сервер:
$ sudo systemctl restart postgresqlПроверьте слушающие порты:
$ ss -nlt | grep 5432
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*Если порт не слушает на 0.0.0.0, перепроверьте listen_addresses и права на файлы конфигурации.
Важно: не открывайте 5432 в Интернет без дополнительных мер защиты (firewall, SSL, VPN, ACL).
Шаг 6 — Установка phpPgAdmin, Nginx и PHP
На Fedora 34 phpPgAdmin может быть недоступен в репозиториях. Установим вручную.
Скачайте релиз с GitHub (пример для версии 7.13.0):
$ wget https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gzРаспакуйте архив:
$ tar -zxvf phpPgAdmin-7.13.0.tar.gzСоздайте директорию для сайта и переместите файлы:
$ sudo mkdir /var/www/phppgadmin/html -p
$ sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/htmlУстановите Nginx и PHP-FPM с нужными модулями:
$ sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstringОткройте HTTP/S в firewall:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reloadНастройка PHP-FPM
Откройте /etc/php-fpm.d/www.conf:
$ sudo nano /etc/php-fpm.d/www.confУстановите пользователя и группу в nginx:
user = nginx
group = nginxСохраните и перезапустите php-fpm:
$ sudo systemctl restart php-fpmНастройка Nginx
Создайте конфигурацию сайта:
$ sudo nano /etc/nginx/conf.d/phppgadmin.confПример конфига:
server {
listen *:80;
server_name phppgadmin.example.com;
root /var/www/phppgadmin/html;
index index.php;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/phppgadmin.access.log;
error_log /var/log/nginx/phppgadmin.error.log;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}Проверьте конфигурацию и запустите Nginx:
$ sudo nginx -t
$ sudo systemctl start nginx
$ sudo systemctl enable nginxОткройте в браузере http://phppgadmin.example.com — вы должны увидеть стартовую страницу phpPgAdmin.

Нажмите на ссылку PostgreSQL в боковом меню и введите учётные данные пользователя, созданного ранее.

Шаг 7 — Подключение HTTPS с Let’s Encrypt
Установите Certbot для nginx:
$ sudo dnf install certbot-nginxЗапросите сертификат и настройте автоматическое перенаправление на HTTPS:
$ sudo certbot --nginx -d phppgadmin.example.comСледуйте подсказкам, укажите email и согласитесь с условиями. При выборе варианта редиректа выберите безопасный, чтобы весь трафик перенаправлялся на HTTPS.
Автообновление сертификатов
Добавьте задание в crontab для регулярного обновления:
$ EDITOR=nano sudo crontab -eДобавьте строку (пример):
25 2 * * * /usr/bin/certbot renew --quietСтрока запускает проверку обновления сертификатов каждый день в 02:25. Выберите удобное время.
Рекомендации по безопасности
- Используйте уникальные пароли и ограничьте привилегии ролей. Не давайте SUPERUSER без надобности.
- Закройте порт 5432 в публичном доступе. Разрешайте доступ по IP или через VPN.
- Включите SSL/TLS и требуйте HTTPS для phpPgAdmin.
- Ограничьте доступ к phpPgAdmin по IP в nginx или с помощью базовой аутентификации.
- В production добавьте двухфакторную аутентификацию на уровень панели управления (если возможно).
- Включите логирование и мониторинг (systemd, pg_stat_activity, pg_log).
Пример простого правила nginx для ограничения IP:
location / {
allow 192.0.2.0/24;
deny all;
try_files $uri $uri/ =404;
}Отладка и типичные проблемы
- Nginx не стартует: проверьте синтаксис
sudo nginx -tи логи/var/log/nginx/error.log. - phpPgAdmin показывает ошибку соединения: проверьте параметры доступа в pg_hba.conf и listen_addresses.
- psql отказывается входить: убедитесь, что используете правильный метод аутентификации и пароль.
- SELinux блокирует соединения: временно переключите в permissive для теста
sudo setenforce 0и проверьте. Для продакшена настройте необходимые контексты или используйте audit2allow.
Альтернативные подходы
- pgAdmin — полноценный GUI; удобен для сложных операций и визуализации.
- Adminer — лёгкий одностраничный интерфейс, поддерживает множество СУБД.
- Использовать psql и скрипты для автоматизации задач через CI/CD.
Выбор зависит от задач: для администрирования часто удобен pgAdmin; для быстрой работы из браузера — phpPgAdmin или Adminer.
Контроль качества развёртывания
Критерии приёмки:
- PostgreSQL запущен и слушает на нужных интерфейсах.
- Пользователь и БД созданы, и пользователь может зайти через phpPgAdmin.
- Nginx обслуживает phpPgAdmin и корректно обрабатывает PHP.
- HTTPS настроен, сертификат действителен и автообновляется.
- Вход с внешних IP ограничён или защищён.
Проверьте: подключение по psql с удалённого хоста, вход в phpPgAdmin, работа CRUD-операций.
Практические чеклисты
Чеклист для развёртывания на тестовом сервере:
- Обновить систему
- Включить модуль postgresql:13
- Установить postgresql-server и postgresql-contrib
- Инициализировать кластер
- Создать роли и базы
- Настроить pg_hba.conf и listen_addresses
- Установить nginx и php-fpm
- Развернуть phpPgAdmin
- Настроить firewall
- Проверить доступ и выполнить базовые операции
Чеклист для продакшена:
- Минимизировать привилегии ролей
- Ограничить доступ по IP или VPN
- Настроить HTTPS и автообновление сертификатов
- Включить резервное копирование баз
- Мониторинг, алерты, ротация логов
- Тест восстановления из бэкапа
Модель принятия решений
Если вам нужна лёгкая веб-админка для однотипных задач — phpPgAdmin подходит. Для сложного управления и визуализации выбирайте pgAdmin. Для автоматизации операций используйте psql и скрипты.
flowchart TD
A[Нужно управлять БД через браузер?] -->|Да| B{Нужна сложная визуализация?}
A -->|Нет| C[Использовать psql/скрипты]
B -->|Да| D[pgAdmin]
B -->|Нет| E[phpPgAdmin или Adminer]Краткая методология развёртывания
- Подготовьте сервер и сетевые правила.
- Установите PostgreSQL и инициализируйте кластер.
- Создайте пользователей с минимально необходимыми правами.
- Настройте удалённый доступ аккуратно через pg_hba.conf.
- Разверните Nginx и PHP-FPM, обеспечьте корректность прав и владельцев.
- Подключите SSL и резервное обновление сертификатов.
- Включите мониторинг и бэкапы.
Короткий глоссарий
- Роль — учётная запись в PostgreSQL, отвечает за аутентификацию и права.
- Кластер — набор баз данных, управляемый одним сервером PostgreSQL.
- pg_hba.conf — файл управления методами аутентификации и доступом по IP.
- listen_addresses — параметр, указывающий интерфейсы для прослушивания соединений.
Заключение
Эта инструкция покрывает полный цикл установки PostgreSQL и phpPgAdmin на Fedora 34: от установки и инициализации кластера до настройки веб-интерфейса и HTTPS. Для продакшена уделите особое внимание безопасности: минимальные привилегии, ограничение доступа и использование SSL.
Важно: всегда проверяйте бэкапы и тестируйте восстановление. Если возникнут вопросы по конкретной ошибке — опишите симптомы, логи и конфигурации, и вы получите более точные рекомендации.
Сводка:
- Инициализируйте кластер перед стартом сервера.
- Настройте pg_hba.conf аккуратно.
- Не оставляйте 5432 открытым в Интернет без защиты.
- Используйте HTTPS для phpPgAdmin.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента