Внимание! Это пост годовой давности из архивов внеочередных пятничных переносов.
За всё время существования сайта я так ни разу и не коснулся 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.



