Заметки · 31.10.2025

PostgreSQL под ключ

Внимание! Это пост годовой давности из архивов внеочередных пятничных переносов.

За всё время существования сайта я так ни разу и не коснулся PostgreSQL, хотя общения с этой СУБД мне более чем хватало. Началось всё с того, что большую часть своих проектов мне пришлось перетаскивать на эту СУБД.

В какой-то момент я даже начинал писать серверные компоненты для работы с файловой базой данных на SQLite, но это стало отнимать очень много времени и даже в рамках пет-проектов казалось мало оправданным методом. Пришлось воспользоваться готовой СУБД и проводить масштабирование проектов на уже готовых сетевых компонентах.

Отдельно про связку IDE Lazarus и PostgreSQL я расскажу в следующих постах. Сегодня же пост полностью посвящён установки СУБД и средства администрирования phpPgAdmin на Linux Mint 22.

Для установки PostgreSQL и модулей расширения СУБД можно воспользоваться командой:

sudo apt install postgresql postgresql-contrib -y

Как только установка будет завершена, проверим запущена ли служба postgresql:

sudo systemctl status postgresql

Включить службу и активировать её автозапуск можно заменив status на start или enable соответственно.

Теперь необходимо установить пароль пользователя postgres для подключения к серверу баз данных. Сначала запускаем оболочку от имени этого пользователя и уже в ней вызываем psql:

# Переходим в оболочку, запущенную от имени пользователя postgres
sudo -i -u postgres

# Запускаем psql
psql

В терминале должна запуститься утилита psql:

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

ALTER USER postgres PASSWORD 'VeryStrongPassword';

Само собой, конструкцию VeryStrongPassword нужно заменить на пароль, с которым Вы будете стучаться в двери PostgreSQL.

Все эти шаги можно сократить и до однострочной команды:

sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'VeryStrongPassword';"

При условии, что всё прошло успешно в консоль вернётся строка ALTER ROLE.

Покинуть psql и сессию пользователя postgres можно с помощью команды exit.

Если psql (версия версии рознь) проигнорирует команду exit — попробуйте \q.

Перезапускаем службу postgresql (действие не обязательное, но желательное):

sudo systemctl restart postgresql

Как только служба успешно рестартовала, отправляемся устанавливать phpPgAdmin.

Найти phpPgAdmin можно в менеджере приложений операционной системы и провести установку оттуда:

Или можно воспользоваться командой для установки phpPgAdmin из терминала:

sudo apt install phppgadmin -y

Важно понимать, что вместе с пакетом будет установлен веб-сервер Apache и интерпретатор языка php. В моём случае были установлены такие версии этих компонентов:

Пройдя весь этот витиеватый путь команд и установок, Вы неминуемо столкнётесь с двумя проблемами. Во-первых, phpPgAdmin не даст авторизоваться на сервере под пользователем postgres, а во-вторых, заветный url вида http://ip/phppgadmin будет доступен только в рамках localhost. Если последнее Вас устраивает — можете второй пункт вычеркнуть из списка проблем.

В любом случае, расскажу о том, как решить обе эти проблемы и начну с самого главного, а именно с авторизации.

Свою конфигурацию phpPgAdmin хранит в файле config.inc.php. Как правило, эта пхпшка размещена по пути /etc/phppgadmin. Прежде чем вносить изменения в этот файл, попробуем забэкапить конфигурацию по умолчанию:

sudo cp /etc/phppgadmin/config.inc.php /etc/phppgadmin/config.inc.php.bak

Уже вносить изменения в конфиг не так страшно. Итак, чтобы разрешить работу в phpPgAdmin от имени пользователя postgres, нужно отключить текущий режим защиты авторизации. Откроем файл конфигурации /etc/phppgadmin:

sudo nano /etc/phppgadmin/config.inc.php

Найдём строку:

$conf['extra_login_security'] = true;

Заменим true на false:

$conf['extra_login_security'] = false;

Сохраняемся и покидаем редактор nano. Для применения настроек перезапустим веб-сервер:

sudo systemctl restart apache2

После внесённых изменений, phpPgAdmin с радостью пропустит пользователя postgres.

Самое время открыть веб-доступ для сетевых устройств. Для этого потребуется файл конфигурации сервера Apache. По-прежнему рекомендую создать резервную копию конфига:

sudo cp /etc/apache2/conf-available/phppgadmin.conf /etc/apache2/conf-available/phppgadmin.conf.bak

Открываем файл:

sudo nano /etc/apache2/conf-available/phppgadmin.conf

В секции <Directory> находим:

# Only allow connections from localhost:
Require local

И заменяем конструкцию Require local на Allow from all. В идеале, чтобы можно было быстро вернуться к изначальной конфигурации веб-сервера предлагаю привести блок подключений в секции <Directory> к такому виду:

# Only allow connections from localhost:
# Require local

# Allow all connections:
Allow from all

Теперь любой компьютер в сети сможет получить доступ к phpPgAdmin.

Отдельно отмечу, что мною рассмотрена настройка среды phpPgAdmin для последующей разработки программных продуктов, а в полевых условиях рекомендуется использовать права доступа конкретного пользователя для конкретной базы данных.

Кроме того, форсирование исключительно локального доступа к средствам phpPgAdmin весьма удобная вещь, если используется сервер с графическим окружением и наличием браузера.

В условиях установленного phpPgAdmin на сервер без графической среды — требуется ограничить веб-доступ к сервису, разрешив загрузку страницы только определённым IP-адресам или подсетям.

Например, для доступа с определённых IP-адресов, в секции <Directory> можно прописать:

Require ip 192.168.1.100
Require ip 192.168.1.101

Разумеется, нужно указать корректные IP-адреса.

Для разрешения доступа из отдельных подсетей можно воспользоваться такой конструкцией:

Require ip 192.168.1.0/24
Require ip 10.0.0.0/8

И, само собой, при такой конфигурации требуется избавиться от предательского Allow from all.

Завершив редактирование конфигурации, не забудьте перезапустить веб-сервер Apache.