Переработать заметку чтобы в качестве Web-сервиса выступил Web-сервис Nginx, а не Apache2 это позволит не захломлять систему если сервис устанавливается на одной системе. По крайней мере в моих Pet-проектах это так. Я обычно если делаю какую либо задачу нахожу похожую, разбираю что сперва похожая работает, а после уже адаптирую ее к своей, т.к. не с первого раза погружаюсь в задачу а уже имея что-то.

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

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

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

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

Version: 12+214ubuntu0.1

Version: 12+214

ekzorchik@srv-us2004a:~$

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

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

Шаг №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: Устанавливаю пакеты PHP которые потребуются для PostgreSQL при работе через Webинтерфейс:

ekzorchik@srv-us2004a:~$ sudo sudo apt-get install -y php php-bz2 php-curl php-fpm php-gd php-mbstring php-pgsql php-xml php-zip curl

Шаг №4: В процессе будет установлен по умолчанию Webсервис Apache2, но я его использовать не буду:

ekzorchik@srv-us2004a:~$ sudo systemctl disable apache2.service

Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.

Executing: /lib/systemd/systemd-sysv-install disable apache2

Removed /etc/systemd/system/multi-user.target.wants/apache2.service.

ekzorchik@srv-us2004a:~$ sudo systemctl stop apache2

Шаг №5: Устанавливаю Nginx:

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

ekzorchik@srv-us2004a:~$ sudo unlink /etc/nginx/sites-available/default

ekzorchik@srv-us2004a:~$ sudo unlink /etc/nginx/sites-enabled/default

ekzorchik@srv-us2004a:~$ sudo rm -f /var/www/html/{index.html,index.nginx-debian.html}

ekzorchik@srv-us2004a:~$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx

Шаг №6: Перед последующими внесения изменений в конфигурационные файлы PHP делаю бекап:

ekzorchik@srv-us2004a:~$ sudo cp /etc/php/7.4/fpm/php.ini /etc/php/7.4/fpm/php.ini.bak

ekzorchik@srv-us2004a:~$ sudo cp /etc/php/7.4/cli/php.ini /etc/php/7.4/cli/php.ini.bak

ekzorchik@srv-us2004a:~$

ekzorchik@srv-us2004a:~$ sudo nano /etc/php/7.4/fpm/php.ini

;date.timezone = Europe/Moscow

date.timezone = Europe/Moscow

ekzorchik@srv-us2004a:~$ sudo sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.4/fpm/php.ini

Шаг №7: Устанавливаю 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

Setting up phppgadmin (7.12.1+dfsg-1) ...

apache2_invoke: Enable configuration phppgadmin

apache2.service is not active, cannot reload.

invoke-rc.d: initscript apache2, action "reload" failed.

ekzorchik@srv-us2004a:~$

ekzorchik@srv-us2004a:~$ dpkg -l | grep phppgadmin

ii phppgadmin 7.12.1+dfsg-1 all web-based administration tool for PostgreSQL

ekzorchik@srv-us2004a:~$

установка завершилась но не успешно, т.к. я деактивировал работу сервиса apache2.

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

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

# Only allow connections from localhost:

#Require local

Require all granted

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

Шаг №9: Создаю конфигурационный файл для nginx на работу с phppgadmin:

ekzorchik@srv-us2004a:~$ sudo ln -s /usr/share/phppgadmin/ /usr/share/nginx/db
ekzorchik@srv-us2004a:~$ sudo chown -R www-data:www-data /usr/share/phppgadmin/
ekzorchik@srv-us2004a:~$ sudo chown -R www-data:www-data /usr/share/nginx/
ekzorchik@srv-us2004a:~$ sudo nano /etc/nginx/sites-available/phppgadmin.conf
server {
  listen 80;
  server_name 172.33.33.117;
  root /usr/share/nginx/db;
  index index.php;
  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }
}
ekzorchik@srv-us2004a:~$ sudo ln -s /etc/nginx/sites-available/phppgadmin.conf /etc/nginx/sites-enabled/phppgadmin.conf
ekzorchik@srv-us2004a:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@srv-us2004a:~$ 
ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx php7.4-fpm

Шаг №10: Открываю браузер и в строке адреса указываю URL: http://172.33.33.117 и успешно открывается Webинтерфейс PhpPgAdmin

PhpPgAdmin успешно работает через Web-сервис Nginx

Отлично.

Шаг №11: Также как я сделал защиту на основе Auth Basic делаю и здесь к странице PhpPgAdmin:

Чтобы создавать связку логин и пароль через утилиту htpasswd в систему понадобится установить пакет apache2-utils, либо пойти по-другому пути.

ekzorchik@srv-us2004a:~$ sudo rm /usr/share/nginx/.htpasswd 
ekzorchik@srv-us2004a:~$ sudo sh -c "echo -n 'ekzorchik:' >> /usr/share/nginx/.htpasswd"
ekzorchik@srv-us2004a:~$ 
ekzorchik@srv-us2004a:~$ cat /usr/share/nginx/.htpasswd 
ekzorchik:ekzorchik@srv-us2004a:~$ 
ekzorchik@srv-us2004a:~$ openssl passwd -apr1
Password: Aa1234567aA
Verifying - Password: Aa1234567aA
$apr1$N9veejKK$8yl0XKwsW40M27FNvNS/A.
ekzorchik@srv-us2004a:~$
ekzorchik@srv-us2004a:~$ sudo sh -c "openssl passwd -apr1 >> /usr/share/nginx/.htpasswd"
Password: Aa1234567aA
Verifying - Password: Aa1234567aA 
ekzorchik@srv-us2004a:~$ cat /usr/share/nginx/.htpasswd 
ekzorchik:$apr1$D8GkNpgA$8gvGhRLpqIRgPJ3JVsHb8/
ekzorchik@srv-us2004a:~$ 
ekzorchik@srv-us2004a:~$ sudo chown www-data:www-data /usr/share/nginx/.htpasswd 
ekzorchik@srv-us2004a:~$ sudo chmod 600 /usr/share/nginx/.htpasswd
ekzorchik@srv-us2004a:~$ sudo nano /etc/nginx/sites-available/phppgadmin.conf
# Non-encrypted http traffic
server {
  listen 80;
  #listen [::]:80;
  server_name 172.33.33.117;
  root /usr/share/nginx/db;
  index index.php;

  # Root location
  location / {
    # Next two lines are the Apache http user/password authentication
    auth_basic "not allowed";
    auth_basic_user_file /usr/share/nginx/.htpasswd;
    try_files $uri $uri/ =404;
  }

  # Any calls for php files will be forwarded to PHP-FPM daemon process
  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }
}
ekzorchik@srv-us2004a:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx php7.4-fpm

Теперь доступ к PhpPgAdmin закрыт Basic Auth связкой: логин + пароль:

Теперь доступ к PhpPgAdmin закрыт Basic Auth связкой: логин + пароль

Вот теперь точно отлично. Оснастка PhpPgAdmin развернута при использовании nginx + защищена связкой логин + пароль.

На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.