Гид по технологиям

PostgreSQL и phpPgAdmin на Fedora 34

• 7 min read • Databases • Обновлено 22 Nov 2025
PostgreSQL и phpPgAdmin на Fedora 34
PostgreSQL и phpPgAdmin на Fedora 34

Главная иллюстрация: PostgreSQL и phpPgAdmin

Цель и варианты использования

Эта статья показывает, как развернуть 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-contrib

contrib содержит дополнительные расширения и утилиты. На тестовой машине можно не устанавливать, но на продакшене часто полезно.

Шаг 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.

Главная страница phpPgAdmin

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

Панель phpPgAdmin

Шаг 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]

Краткая методология развёртывания

  1. Подготовьте сервер и сетевые правила.
  2. Установите PostgreSQL и инициализируйте кластер.
  3. Создайте пользователей с минимально необходимыми правами.
  4. Настройте удалённый доступ аккуратно через pg_hba.conf.
  5. Разверните Nginx и PHP-FPM, обеспечьте корректность прав и владельцев.
  6. Подключите SSL и резервное обновление сертификатов.
  7. Включите мониторинг и бэкапы.

Короткий глоссарий

  • Роль — учётная запись в PostgreSQL, отвечает за аутентификацию и права.
  • Кластер — набор баз данных, управляемый одним сервером PostgreSQL.
  • pg_hba.conf — файл управления методами аутентификации и доступом по IP.
  • listen_addresses — параметр, указывающий интерфейсы для прослушивания соединений.

Заключение

Эта инструкция покрывает полный цикл установки PostgreSQL и phpPgAdmin на Fedora 34: от установки и инициализации кластера до настройки веб-интерфейса и HTTPS. Для продакшена уделите особое внимание безопасности: минимальные привилегии, ограничение доступа и использование SSL.

Важно: всегда проверяйте бэкапы и тестируйте восстановление. Если возникнут вопросы по конкретной ошибке — опишите симптомы, логи и конфигурации, и вы получите более точные рекомендации.

Сводка:

  • Инициализируйте кластер перед стартом сервера.
  • Настройте pg_hba.conf аккуратно.
  • Не оставляйте 5432 открытым в Интернет без защиты.
  • Используйте HTTPS для phpPgAdmin.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро