Переработать заметку чтобы в качестве 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
Отлично.
Шаг №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
развернута при использовании nginx + защищена связкой логин + пароль.
На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.