Приветствую вас, Уважаемые Читатели!
Сначала немного истории. Совсем недавно мы начали изучать такой интересный сервис как WWW. И с целью этого изучения на отдельный хост установили сервер Apache2, который в данном случае реализует протокол HTTP, который является частью сервиса WWW. Это мы сделали в статье "0043.Apache2.Устанавливаем, настраиваем, проверяем.Строим маленький интернет.". Предварительно мы подготовили хост как описано в статье "0004.Готовим тестовый стенд. Устанавливаем Debian 10 на виртуальную машину.". Следующим шагом мы решили установить на этот сервер замечательный форум phpBB3, для чего собрали необходимы сведения и пакеты, это было с статье "0044.Создаём форум на основе phpBB3.Строим маленький интернет.". Далее мы установили PHP необходимой для установки phpBB3 версии на тот же хост, на котором был установлен Apache2, и это было в статье "0045.Установка PHP на сервер Apache2. Строим маленький интернет.".
Теперь займёмся сервером базы данных. В качестве реализации такого сервера выберем великолепный PostgreSQL. Как следует из требований версия такого сервера должна быть не ниже версии 8.3. В нашем случае на сервере Debian10 доступна версия PostgreSQL11, что вполне удовлетворяет требованиям phpBB3. Сервер базы данных вообще вещь очень серьёзная и интересная. И такой сервер вполне достоен для установки отдельного хоста. Кроме того такой сервер может понадобится для каких-нибудь других целей. Т.е. в нашей сети появляется ещё один хост.
Новому хосту назначим адрес 192.168.1.160, и сразу пропишем его в файлы DNS-сервера deb-lan1-bind-prim. Потом обязательно вспомним, что нужно в файлах прописать новый серийник и перезапустить сервера и их базу данных. Работа с DNS серверами описана ранее в статьях.
Скажу сразу установка сервера мне далась не легко. Сервер достаточно остро и непонятно реагирует на ошибки в файле конфигурации и на другие настройки.
Для нашей задачи необходимо установить сервер БД и запустить его. Следующим шагом необходимо настроить доступ к серверу с нашего Web-сервера deb-lan1-apache, с помощью клиентсткой утилиты psql. Завершающем этапом будет необходимо убедиться, что новый сервер БД будет доступен из кода PHP. Вот такой в общем не затейливый план действий.
Установка и настройка PostgreSQL на локальном хосте.
Итак всё начинается с установки. Этот этап самый простой. Подключаем архивные репозитории, что описано в одной из предыдущих статей. Убеждаемся что интернет доступен для нашего хоста. И выполняем привычные уже команды
apt update
apt install postgresql-11
Сервер сразу стартует, и можно проверить его статус.
Это пожалуй самый простой шаг, дальше начинается магия.
Всё начинается с того, что во время установки сервисом автоматически создаются три разных сущности с именем postgres. Точнее наверное сущностей создаётся значительно больше, но на данном этапе нас будут интересовать следующие три:
- учётная запись операционной системы postgres используется для запуска утилит обслуживания сервера;
- внутренний пользователь (роль) самой БД postgres, является супер пользователем для этой БД;
- экземпляр БД postgres, который привязан собственно к одноимеённому пользователю.
Вновь созданные пользователи создаются с пустым паролем, и по этой причине сразу после создания не доступны. Поэтом сразу после установки необходимо настроить сначала учётку ОС postgres, а потом учётку БД postgres.
Учётке ОС сначала зададим пароль командой passwd postgres.
Потом добавим в группу root, командой gpasswd -M postgres root.
Потом проверим что пользователь postgres соостоит в группах root и ssl-cert в файле /etc/group.
Здесь нужно уточнить относительно группы ssl-cert. Не знаю что это за группа, но у меня возникали проблемы с запуском сервера по причине отсутствия привязки учётки postgres к этой группе. О чём было сказано в логах. Т.е. возможно почему-то либо учётка не добавилась в группу, либо была исключена. Во всяком случае лучше проверить, и в случае отсутствия учётки postges в группе ssl-cert добавить учётку в группу командой
gpasswd -M postgres ssl-cert (либо другим способом).
Теперь на сервере deb-lan1-postgresql перелогиниваемся под учёткой postgres. И запускаем psql, это клиентская утилита PostgreSQL. Здесь мы зададим пароль учётной записи БД postgres.
И пока нам там ничего не надо, перелогиниваемся обратно под root.
Настройка удалённого доступа к серверу БД.
Теперь необходимо настроить удалённый доступ к нашему серверу БД. Для этой цели у нас есть два файла:
- центральный конфиг postgresql.conf;
- конфиг настройки доступа и аутентфикации pg_hba.conf.
Пути к файлам можно узнать выполнив запросы под пользователем postgres в утилите psql.
В файле postgresql.conf раскоментируем инструкцию слушать внешние адреса
В файле pg_hba.conf необходимо прописать строку, определяющую способ подключения от внешнего источника.
На рисунке выше можно увидеть, что несмотря на то, что требовалось допустить только один адрес (192.168.1.150), строка определяет для доступа целую сеть. Это не результат невнимательности. Дело в том что на практике сервер не запускал удалённый доступ, ссылаясь на неправильно прописанный адрес сети. Мне так и не удалось понять как прописывать конкретный адрес. Пока я не прописал всю сеть 192.168.1.0/24 запустить удалённый доступ так и не удалось.
После настройки конфигов перезапускаем сервер, и на всякий проверяем статус. И сразу можно проверить включился доступ или нет командой
ss -tunelp
На скрине можно видеть, что команда ss -tunelp показывает два открытых и прослушиваемых порта 5432. Номер которого является стандартным для этого сервера. Однако на практике не каждый раз можно будет наблюдать эти порты открытыми. Это означает что удалённый доступ не включился. В этом случае приходится просматривать логи, и разбираться почему это произошло. Обычно сервер указывает в логах те или иные замечания по поводу настроек в конфах. Путь к файлу лога сервера можно увидеть в общем логе получаемом командой journalctl -e, или ещё он указывается в процессе установки сервера.
Во всяком случае в процессе настроек необходимо добиться, чтобы мы получили по команде ss-tunelp отрытые и прослушиваемые порты 5432 (или те, которые выставлены в центральном конфиге).
Проверка удалённого доступа к серверу
Теперь, когда у нас на сервер БД прослушиваются порты 5432 можно проверить подключение к серверу с нашего рабочего Web-сервера. Для этого используется утилита psql. Чтобы ей воспользоваться необходимо предварительно установить на сервер deb-lan1-apache клиентскую часть postgresql. Сложностей тут никаких нет.
И сразу после установки можно попробовать подключение
На скрине выше можно видеть несколько не удачных попыток логина в процессе настройки доступа в файле pg_hba.conf. Когда изменялась очередная настройка, перегружался сервер postgresql и выполнялась очередная попытка логина. После входа в утилиту командой \l можно просмотреть наличествующие базы данных, командой \dt список таблиц в текущей базе и командой \q выйти из утилиты.
Теперь создадим тестового пользователя и тестовую базу данных. Для этого на сервере PostgreSQL deb-lan1-postgresql залогинимся под пользователем postgres. Далее первая команда создаёт нового пользователя, вторая команда создаёт новую базу и назначает нового пользователя владельцем этой базы:
createuser one
createdb one_db -O one
И следующей командой задаём пароль вновь созданному пользователю.
pcql -c "alter user one with password='one';"
И после этих манипуляций возвращаемся обратно на сервер deb-lan1-apache. На этом Web-сервере заходим с утилитой psql под пользователем one в базу данных one_db, создаём новую таблицу и заполняем её данными. Если это удалось, можно командой select * from table_two; проверить что данные добавились и командой \q выйти из утилиты. Удалённый доступ у нас настроен и проверен.
Но это ещё не всё. Поскольку к базе данных подключаться будет PHP реализация форума имеет смысл проверить как база данных будет доступна из интерпретатора PHP. Для это напишем небольшой файлик с кодом доступа к БД. В коде пропишем все параметры доступа к серверу базы данных.
Получившийся файлик (pg_test.php) помещаем в корень Web-сервера /var/www/html/. И теперь просто вбиваем его в адресной строке браузера на тестовой рабочей станции.
На всякий случай уточню - полная адресная строка должна выглядеть так http://www.lan.loc/pg_test.php.
Т.е. в результате мы увидели, что запрос из кода PHP к нашему серверу БД вполне адекватно разрешается. Значит и форум phpBB3, который написан на этом языке теоретически так же должен адекватно работать. Цели статьи достигнуты, и теперь можно переходит непосредственно к установке форума на Web-сервер. Но это мы сделаем уже в следующей статье.
Конфы хостов сети вместе со схемой выложу как обычно в канал MAX.
Благодарю всех Уважаемых Читателей, дочитавших до этого места.
Желаю всем удачи в начинаниях и продолжениях, до новых встреч!!!)
PS
Статья не является учебным пособием, и представляет личный опыт автора.
Статья может содержать ошибки и не точности.
Приведённые данные необходимо проверять самостоятельно.
Текст написан автором лично без использования ИИ.
Картинка для превью статьи сгенерирована сетью Шедеврум, возможно с небольшими правками автора.
Канал MAX для всего того, что не поместилось на канал ДЗЕН.