Хочу адаптировать заметку: "Настройка связки Nginx + PhpPgAdmin on Ubuntu 20.04"
, но уже к использованию другого LTS
релиза Ubuntu(ы), а именно Ubuntu 22.04
, возможно появились какие-либо дополнительные нюансы о которых мне предстоит узнать, плюс это интересно и возможно пригодится в будущем. Напомню самому себе:
- phpPgAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД PostgreSQL.
- phpPgAdmin позволяет через браузер осуществлять администрирование сервера PostgreSQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Приложение пользуется большой популярностью у веб-разработчиков, так как позволяет управлять PostgreSQL без непосредственного ввода SQL команд.
Шаг №1:
Обновляю установленную систему до самого последнего релиза в рамках текущего LTS
релиза для Ubuntu 22.04 Server/Desktop:
ekzorchik@srv-home:~$ sudo nano /etc/update-manager/release-upgrades [DEFAULT] Prompt=never ekzorchik@srv-home:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@srv-home:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y ekzorchik@srv-home:~$ sudo reboot ekzorchik@srv-home:~$ uname -a && lsb_release -a Linux srv-home 5.15.0-101-generic #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy ekzorchik@srv-home:~$
Шаг №2:
Настройки локали прописываю следующим образом:
sudo rm -f /etc/localtime sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime sudo locale-gen en_US.UTF-8 echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale
Шаг №3:
Настройки синхронизации времени прописываем опираясь на заметку: "Настраиваем службу времени в Ubuntu 22.04 Server"
Шаг №4:
Устанавливаю PostgreSQL
сервис из дефолтных репозитариев текущей системы, а именно Ubuntu 22.04 Server:
ekzorchik@srv-home:~$ apt-cache show postgresql | grep Version Version: 14+238 ekzorchik@srv-home:~$ sudo apt-get install -y postgresql net-tools ekzorchik@srv-home:~$ 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 Wed 2024-03-20 08:45:25 MSK; 12ms ago Process: 3124 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 3124 (code=exited, status=0/SUCCESS) ekzorchik@srv-home:~$
Шаг №5:
Сейчас создадим базу под Web
—сервис PhpPgAdmin:
ekzorchik@srv-home:~$ cat /etc/passwd | grep postgres postgres:x:114:120:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash ekzorchik@srv-home:~$ ekzorchik@srv-home:~$ sudo su - postgres postgres@srv-home:~$ pwd /var/lib/postgresql postgres@srv-home:~$ postgres@srv-home:~$ psql psql (14.11 (Ubuntu 14.11-0ubuntu0.22.04.1)) Type "help" for help. postgres=# postgres=# CREATE USER us_pgadmin WITH PASSWORD 'Aa1234567aA'; CREATE ROLE postgres=# CREATE DATABASE db_pgadmin; CREATE DATABASE postgres=# GRANT ALL PRIVILEGES ON DATABASE db_pgadmin to us_pgadmin; GRANT postgres=# quit postgres@srv-home:~$ exit logout ekzorchik@srv-home:~$
Шаг №6:
Устанавливаю пакеты PHP
которые потребуются для PostgreSQL
при работе через Web
–интерфейс:
ekzorchik@srv-home:~$ sudo apt-get install -y php php-bz2 php-curl php-fpm php-gd php-mbstring php-pgsql php-xml php-zip curl ekzorchik@srv-home:~$ php -v PHP 8.1.2-1ubuntu2.14 (cli) (built: Aug 18 2023 11:41:11) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.2, Copyright (c) Zend Technologies with Zend OPcache v8.1.2-1ubuntu2.14, Copyright (c), by Zend Technologies ekzorchik@srv-home:~$
Шаг №7:
В процессе будет установлен по умолчанию Web
–сервис Apache2
, но я его использовать не буду:
ekzorchik@srv-home:~$ dpkg -l | grep apache2 ii apache2 2.4.52-1ubuntu4.8 amd64 Apache HTTP Server ii apache2-bin 2.4.52-1ubuntu4.8 amd64 Apache HTTP Server (modules and other binary files) ii apache2-data 2.4.52-1ubuntu4.8 all Apache HTTP Server (common files) ii apache2-utils 2.4.52-1ubuntu4.8 amd64 Apache HTTP Server (utility programs for web servers) ii libapache2-mod-php8.1 8.1.2-1ubuntu2.14 amd64 server-side, HTML-embedded scripting language (Apache 2 module) ekzorchik@srv-home:~$ ekzorchik@srv-home:~$ 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-home:~$ sudo systemctl stop apache2 ekzorchik@srv-home:~$
Шаг №8:
Т.к. Web
—сервис Apache2
я деактировал, то устанавливаю Web
—сервис Nginx:
ekzorchik@srv-home:~$ sudo apt-get install -y nginx ekzorchik@srv-home:~$ nginx -v nginx version: nginx/1.18.0 (Ubuntu) ekzorchik@srv-home:~$ sudo unlink /etc/nginx/sites-available/default ekzorchik@srv-home:~$ sudo unlink /etc/nginx/sites-enabled/default ekzorchik@srv-home:~$ sudo rm -f /var/www/html/{index.html,index.nginx-default.html} ekzorchik@srv-home:~$ sudo rm -f /usr/share/nginx/html/index.html ekzorchik@srv-home:~$ 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-home:~$ ekzorchik@srv-home:~$ sudo systemctl restart nginx
Шаг №9:
Перед последующими внесения изменений в конфигурационные файлы PHP
делаю бекап:
ekzorchik@srv-home:~$ sudo cp /etc/php/8.1/fpm/php.ini /etc/php/8.1/fpm/php.ini.backup ekzorchik@srv-home:~$ sudo nano /etc/php/8.1/fpm/php.ini date.timezone = Europe/Moscow ;display_errors = Off display_errors = On ekzorchik@srv-home:~$ sudo php-fpm8.1 --test [20-Mar-2024 09:05:22] NOTICE: configuration file /etc/php/8.1/fpm/php-fpm.conf test is successful
Шаг №10:
Устанавливаю PhpPgAdmin
из стандартных репозитариев:
На заметку: Обратите внимание что в качестве Web
-сервиса используется по умолчанию apache2
, и установка завершится не успешно, это нормально в текущем случаем при использовании Web
-сервиса Nginx
в качестве основного.
ekzorchik@srv-home:~$ apt-cache show phppgadmin | grep Version Version: 7.13.0+dfsg-2 ekzorchik@srv-home:~$ ekzorchik@srv-home:~$ sudo apt-get install -y phppgadmin
точнее если обратить внимание на вывод установки на консоль, то об неуспешно завершении свидетельствуют строки:
apache2_invoke: Enable configuration phppgadmin apache2.service is not active, cannot reload. invoke-rc.d: initscript apache2, action "reload" failed.
А все потому что сервис Apache2
через systemctl disable apache2
я деактивировал.
Шаг №11:
Изменяю поведение сервиса, то доступ к нему не только с локального хоста:
ekzorchik@srv-home:~$ sudo nano /etc/apache2/conf-available/phppgadmin.conf # Only allow connections from localhost: #Require local Require all granted
Шаг №12:
Создаю конфигурационный файл для nginx
на работу с phppgadmin:
ekzorchik@srv-home:~$ sudo nano /etc/apache2/conf-available/phppgadmin.conf ekzorchik@srv-home:~$ sudo ln -s /usr/share/phppgadmin/ /usr/share/nginx/db ekzorchik@srv-home:~$ sudo chown -R www-data:www-data /usr/share/phppgadmin/ ekzorchik@srv-home:~$ sudo chown -R www-data:www-data /usr/share/nginx/ ekzorchik@srv-home:~$ sudo nano /etc/nginx/sites-available/phppgadmin.conf server { listen 80; server_name 172.33.33.102; root /usr/share/nginx/db; index index.php; location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } } ekzorchik@srv-home:~$ sudo ln -s /etc/nginx/sites-available/phppgadmin.conf /etc/nginx/sites-enabled/phppgadmin.conf ekzorchik@srv-home:~$ 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-home:~$ ekzorchik@srv-home:~$ sudo systemctl restart nginx php8.1-fpm.service
Шаг №13:
Теперь запускаем браузер с другой системы и в строке адреса указываем URL
системы Ubuntu 22.04 Server
где устанавливали шагами выше связку nginx + PhpPgAdmin
, Т.е. Url
получается: http://172.33.33.102
Отлично, Web
-интерфейс поднят.
Шаг №14:
Но, чтобы Web
-интерфейс доступа для Администрирования Postgres
не святил всем, кто есть в сети, я бы доступ к нему ограничил банальной Auth Basic
аутентификацией, приступим:
На заметку: Если в качестве Web
-сервиса Вы используете Apache2
, то в Вашем случае есть пакет apache2-utils
с помощью которого создается файл .htpasswd
где указывается логин и зашифрованный пароль, но если как я сейчас Nginx
, то делаем через встроенные утилиты.
ekzorchik@srv-home:~$ cat /usr/share/nginx/.htpasswd ekzorchik: ekzorchik@srv-home:~$ sudo sh -c "openssl passwd -apr1 >> /usr/share/nginx/.htpasswd" Password: указываю к примеру пароль Aa1234567aA Verifying - Password: указываю к примеру пароль Aa1234567aA ekzorchik@srv-home:~$ cat /usr/share/nginx/.htpasswd ekzorchik:$apr1$4LTyKH64$q70xMrU1qgw6BjBP.gvHK/ ekzorchik@srv-home:~$ ekzorchik@srv-home:~$ sudo chown www-data:www-data /usr/share/nginx/.htpasswd ekzorchik@srv-home:~$ sudo chmod 600 /usr/share/nginx/.htpasswd ekzorchik@srv-home:~$ sudo nano /etc/nginx/sites-available/phppgadmin.conf server { listen 80; server_name 172.33.33.102; root /usr/share/nginx/db; index index.php; location / { auth_basic "now allowed"; auth_basic_user_file /usr/share/nginx/.htpasswd; try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } } ekzorchik@srv-home:~$ 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-home:~$ sudo systemctl restart nginx php8.1-fpm.service
Шаг №15:
Проверяю, что обратившись по URL
адресу http://172.33.33.102 у меня сперва отрабатывает Basic Auth
аутентификация, т.е. сперва нужно получить доступ, а уже потом предстанет Web
-интерфейс администрирования Postgres:
и нажимаю "Вход"
и передо мной Web
-интерфейс PhpPgAdmin.
Вот теперь точно отлично. Оснастка PhpPgAdmin
развернута при использовании nginx
+ защищена связкой логин + пароль.
На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.