Задача: Развернуть Webсервис для администрирования баз Postgres на Ubuntu 20.04 Server.

В качестве удобного Web-приложения выступит пакет PhpPgAdmin для интерактивной работы с СУБД PostgreSQL. Через него можно управлять информацией базы данных, как в режиме встроенного меню, так и посредством SQL. Это как если бы вы использовали базу MySQL, но у нее Web-сервис именуется, как phpmyadmin. Ко всему этому, я покажу как настроить защиту к сервису если он выставлен в интернет.

ekzorchik@srv-us2004a:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-us2004a:~$ sudo apt-get update && sudo apt-get -y upgrade

Шаг №1: Устанавливаю PostgreSQL сервер из стандартных репозитариев:

ekzorchik@srv-us2004a:~$ sudo apt-get install -y postgresql net-tools

ekzorchik@srv-us2004a:~$ sudo systemctl restart postgresql && sudo systemctl status postgresql | head -n5

● postgresql.service - PostgreSQL RDBMS

Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)

Active: active (exited) since Fri 2021-11-12 10:34:39 UTC; 11ms ago

Process: 27260 ExecStart=/bin/true (code=exited, status=0/SUCCESS)

Main PID: 27260 (code=exited, status=0/SUCCESS)

ekzorchik@srv-us2004a:~$

ekzorchik@srv-us2004a:~$ sudo netstat -antup | grep 5432

tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 27242/postgres

Шаг №2: Создаю базу под Webсервис PhpPgAdmin:

Окончание строки команд обязательно с использованием символа точка с запятой «;»

ekzorchik@srv-us2004a:~$ sudo su - postgres

postgres@srv-us2004a:~$ pwd

/var/lib/postgresql

postgres@srv-us2004a:~$

postgres@srv-us2004a:~$ psql

psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1))

Type "help" for help.

postgres=# CREATE USER us_pgadmin WITH PASSWORD 'Aa1234567aA';

CREATE ROLE

postgres=# CREATE DATABASE db_pgadmin;

postgres=# CREATE DATABASE db_pgadmin;

CREATE DATABASE

postgres=#

postgres=# GRANT ALL PRIVILEGES ON DATABASE db_pgadmin to us_pgadmin;

GRANT

postgres=#

postgres=# quit

postgres@srv-us2004a:~$ exit

logout

ekzorchik@srv-us2004a:~$

Шаг №3: Устанавливаю PhpPgAdmin из стандартных репозитариев:

(в Качестве Web-сервиса используется по умолчанию apache2)

ekzorchik@srv-us2004a:~$ apt-cache show phppgadmin | grep Version

Version: 7.12.1+dfsg-1

ekzorchik@srv-us2004a:~$ sudo apt-get install -y phppgadmin

ekzorchik@srv-us2004a:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf

ekzorchik@srv-us2004a:~$ sudo unlink /etc/apache2/sites-available/000-default.conf

ekzorchik@srv-us2004a:~$ sudo unlink /etc/apache2/sites-available/default-ssl.conf

ekzorchik@srv-us2004a:~$ sudo rm /var/www/html/index.html

Шаг №4: Изменяю поведение сервиса, то доступ к нему не только с локального хоста:

ekzorchik@srv-us2004a:~$ sudo nano /etc/apache2/conf-available/phppgadmin.conf

# Only allow connections from localhost:

#Require local

Require all granted

После не забываем сохранить внесенные изменения.

ekzorchik@srv-us2004a:~$ sudo apache2ctl configtest

Syntax OK

ekzorchik@srv-us2004a:~$

ekzorchik@srv-us2004a:~$ sudo systemctl restart apache2 && sudo systemctl status apache2 | head -n5

● apache2.service - The Apache HTTP Server

Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)

Active: active (running) since Fri 2021-11-12 10:48:07 UTC; 14ms ago

Docs: https://httpd.apache.org/docs/2.4/

Process: 37061 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)

ekzorchik@srv-us2004a:~$

Шаг №5: Произвожу первоначальную настройку через Webинтерфейс путем обращения к оснастке PhpPgAdmin через URL адрес вида: http://IP&DNS/phppgadmin (http://172.33.33.117/phppgadmin)

  • Language: English
  • Theme: Default

Нажимаю на Servers – (Server) PostgreSQL, авторизуюсь в PostgreSQL

Нажимаю на Servers – (Server) PostgreSQL, авторизуюсь в PostgreSQL

  • Username: указываю созданный выше аккаунт us_pgadmin
  • Password: указываю на созданный выше аккаунт пароль Aa1234567aA

И нажимаю Login

Авторизуюсь в PhpPgAdmin

И я успешно подключился к сервису PostgreSQL на текущем сервере:

Я успешно авторизован в PhpPgAdmin

Шаг №6: Но вот так если нужно выставлять в интернет доступ к оснастке управления ни в коем случае нельзя, нужно доступ к странице http://IP&DNS/phppgadmin защитить Basic аутентификацией:

ekzorchik@srv-us2004a:~$ sudo htpasswd -c /usr/share/phppgadmin/.htpasswd ekzorchik

New password: Aa1234567@!#

Re-type new password: Aa1234567@!#

Adding password for user ekzorchik

ekzorchik@srv-us2004a:~$

ekzorchik@srv-us2004a:~$ sudo nano /etc/apache2/sites-available/phppgadmin.conf

ekzorchik@srv-us2004a:~$ sudo apache2ctl configtest

Syntax OK

ekzorchik@srv-us2004a:~$ sudo a2ensite phppgadmin.conf

ekzorchik@srv-us2004a:~$ sudo systemctl restart apache2 && sudo systemctl status apache2 | head -n5

● apache2.service - The Apache HTTP Server

Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)

Active: active (running) since Fri 2021-11-12 11:11:38 UTC; 14ms ago

Docs: https://httpd.apache.org/docs/2.4/

Process: 37438 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)

ekzorchik@srv-us2004a:~$

после чего при обращении на Web-интерфейс PhpPgAdmin у меня теперь появляется окно необходимой авторизации к Алиасу.

Доступ к PhpPgAdmin закрыт Basic Auth

Пройдя Basic Auth авторизацию путем указания правильных данных предопределенных в файле .htaccess получаем доступ к PhpPgAdmin Web-панели администрирования:

Пройдя Basic Auth авторизацию получаем доступ к PhpPgAdminИтого задача выполнена и можно двигаться дальше по одному кирпичику достигая поставленной цели. На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.