Пакет phpmyadmin
буду ставить не из исходников, а из дефолтных репозитариев текущего LTS
релиза Ubuntu 20.04 Server
. Версию php-fpm
буду использовать 7.3
, т.к. у меня есть ресурс, на котором подрядчики развернули важный сервис компании, и он работает на связке: Ubuntu 20.04 + php7.3-fpm + mysql 8
, по-другому, т.е. на более новой версии портал не взлетает, все завязано на версии. А вот чтобы можно было управлять MYSQL
базами на сервере нужен Web
-интерфейс, в роли него и выступит пакет PhpMyAdmin.
Шаг №1:
Обновляем систему в рамках текущего LTS
релиза Ubuntu 20.04:
ekzorchik@srv-us2004a:~$ sudo nano /etc/update-manager/release-upgrades [DEFAULT] Prompt=never
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора).
ekzorchik@srv-us2004a:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@srv-us2004a:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y ekzorchik@srv-us2004a:~$ sudo reboot ekzorchik@srv-us2004a:~$ uname -a && lsb_release -a Linux srv-us2004a 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal ekzorchik@srv-us2004a:~$
Шаг №2:
Устанавливаем Locale:
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:
Смотрим какая версия пакета php-fpm
есть в дефолтных репозитариях Ubuntu 20.04 Server:
ekzorchik@srv-us2004a:~$ apt-cache search php-fpm php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default) php-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) (default) php7.4-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) ekzorchik@srv-us2004a:~$
так версия 7.4
, а мне нужно 7.3
значит будет подключать репозитарии
Шаг №4:
Подключаем сторонние репозитарии где присутствует версия 7.3:
ekzorchik@srv-us2004a:~$ sudo add-apt-repository ppa:ondrej/php
или же просто добавляем репозитарий путем самостоятельного редактирования/создания файла:
ekzorchik@srv-us2004a:~$ sudo nano /etc/apt/sources.list.d/ondrej-ubuntu-php-focal.list deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main # deb-src http://ppa.launchpad.net/ondrej/php/ubuntu focal main
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора).
ekzorchik@srv-us2004a:~$ sudo apt-get update ekzorchik@srv-us2004a:~$ apt-cache search php7.3-fpm php7.3-cgi - server-side, HTML-embedded scripting language (CGI binary) php7.3-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) ekzorchik@srv-us2004a:~$
Шаг №5:
Устанавливаю NGINX + PHP7.3-fpm:
ekzorchik@srv-us2004a:~$ sudo apt-get install -y nginx php7.3-fpm net-tools php7.3 curl ekzorchik@srv-us2004a:~$ nginx -V nginx version: nginx/1.18.0 (Ubuntu) built with OpenSSL 1.1.1f 31 Mar 2020 TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-lUTckl/nginx-1.18.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module ekzorchik@srv-us2004a:~$ ekzorchik@srv-us2004a:~$ sudo a2dismod php* ekzorchik@srv-us2004a:~$ ls /usr/bin/php php php7.3 php8.2 ekzorchik@srv-us2004a:~$ sudo update-alternatives --set php /usr/bin/php7.3 update-alternatives: using /usr/bin/php7.3 to provide /usr/bin/php (php) in manual mode ekzorchik@srv-us2004a:~$ ekzorchik@srv-us2004a:~$ php -v PHP 7.3.33-14+ubuntu20.04.1+deb.sury.org+1 (cli) (built: Sep 2 2023 08:02:05) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.33-14+ubuntu20.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies ekzorchik@srv-us2004a:~$ ekzorchik@srv-us2004a:~$ sudo nano /etc/php/7.3/fpm/php.ini date.timezone = Europe/Moscow
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора).
ekzorchik@srv-us2004a:~$ sudo nano /etc/php/7.3/cli/php.ini date.timezone = Europe/Moscow ;cgi.fix_pathinfo=1 cgi.fix_pathinfo=0
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора).
Шаг №6:
Производим настройку nginx:
ekzorchik@srv-us2004a:~$ sudo rm -f /var/www/html/index.nginx-debian.html ekzorchik@srv-us2004a:~$ sudo rm -f /usr/share/nginx/html/index.html ekzorchik@srv-us2004a:~$ sudo chown -R www-data:www-data /var/www/html/
Шаг №7:
Проверяем что скрипты на php
работают:
ekzorchik@srv-us2004a:~$ sudo nano /var/www/html/info.php <?php phpinfo(); ?>;
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора).
Шаг №8:
Устанавливаем mysql-server
и назначаем пароль на учетную запись Login:root
сервиса MYSQL:
ekzorchik@srv-us2004a:~$ sudo apt-get install -y mysql-server ekzorchik@srv-us2004a:~$ sudo mysql_secure_installation Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: Набираю на клавиатуре "No" Skipping password set for root as authentication with auth_socket is used by default. If you would like to use password authentication instead, this can be done with the "ALTER_USER" command. See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No): Набираю на клавиатуре клавишу "Y" Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No): Набираю на клавиатуре клавишу "Y" Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No): Набираю на клавиатуре клавишу "Y" - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No): Набираю на клавиатуре клавишу Y Success. All done! ekzorchik@srv-us2004a:~$ ekzorchik@srv-us2004a:~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] default-authentication-plugin=mysql_native_password user = mysql bind-address = 127.0.0.1 mysqlx-bind-address = 127.0.0.1 key_buffer_size = 16M myisam-recover-options = BACKUP log_error = /var/log/mysql/error.log skip-name-resolve = 1 key_buffer_size = 0 innodb_buffer_pool_size = 2G innodb_log_file_size = 16M innodb_buffer_pool_instances = 2 skip-log-bin
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора)
Проверяем внесенные изменения в mysqld.cnf
на предмет ошибок прежде чем перезапускать сервис:
ekzorchik@srv-us2004a:~$ sudo mysqld --validate-config ekzorchik@srv-us2004a:~$
вывод пуст, значит ошибок нет, после уже можно перезапускать сервис mysql:
ekzorchik@srv-us2004a:~$ sudo systemctl restart mysql ekzorchik@srv-us2004a:~$ sudo mysql -u root -e "alter user 'root'@'localhost' identified WITH mysql_native_password BY '712mbddr@';" ekzorchik@srv-us2004a:~$ sudo mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) ekzorchik@srv-us2004a:~$ sudo mysql -u root -p712mbddr@ -e "show databases;" mysql: [Warning] Using a password on the command line interface can be insecure. +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ ekzorchik@srv-us2004a:~$
Отлично, настроили конфигурационный файл mysql
, назначили пароль на учетную запись Login: root
сервиса mysql
Шаг №9:
Устанавливаю пакет phpmyadmin
через который при обращении на URL http://IP&DNS/phpmyadmin
можно будет взаимодействовать с базой посредством браузера:
ekzorchik@srv-us2004a:~$ apt-cache show phpmyadmin | grep Version Version: 4:4.9.5+dfsg1-2 ekzorchik@srv-us2004a:~$ sudo apt-get install -y phpmyadmin
На заметку: Web server to reconfigure automatically: OK
(не выбираем ни apache2
ни lighttpd
)
Configure database for phpmyadmin with dbconfig-common? Yes
MySQL application password for phpmyadmin: задаю пароль на phpmyadmin, делаю его отличным от Login: root, к примеру Aa1234567
Password confirmation: Aa1234567
Шаг №10:
Отключаю Apache2
, т. к. nginx & phpmyadmin
висят на одном порту:
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.service ekzorchik@srv-us2004a:~$ sudo systemctl is-active apache inactive ekzorchik@srv-us2004a:~$ sudo rm -f /var/www/html/index.html ekzorchik@srv-us2004a:~$
Шаг №11:
Настраиваю, что Web
—панель phpmyadmin
будет работать по адресу http://IP&DNS/pma
— я хочу без использования поддоменов сделать:
ekzorchik@srv-us2004a:~$ sudo chmod -R 775 /usr/share/phpmyadmin/ ekzorchik@srv-us2004a:~$ sudo chown -R root:www-data /usr/share/phpmyadmin/ ekzorchik@srv-us2004a:~$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/pma.conf ekzorchik@srv-us2004a:~$ sudo unlink /etc/nginx/sites-available/default ekzorchik@srv-us2004a:~$ sudo rm /etc/nginx/sites-enabled/default ekzorchik@srv-us2004a:~$ sudo nano /etc/nginx/sites-available/pma.conf server { listen 80 default_server; root /var/www/html; index index.php; server_name 172.33.33.124; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } location ^~ /pma/ { alias /usr/share/phpmyadmin/; index index.php index.html; location ~ /pma(/.*\.php) { include fastcgi_params; fastcgi_param SERVER_NAME localhost; fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$1; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_index index.php; } } }
После нажимаем Ctrl + O, Enter - Ctrl + X
(для выхода из редактора).
ekzorchik@srv-us2004a:~$ sudo ln -s /etc/nginx/sites-available/pma.conf /etc/nginx/sites-enabled/pma.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.3-fpm.service mysql
Шаг №12:
Проверяю, что получаю страницу авторизации PhpMyAdmin
через консоль:
ekzorchik@srv-us2004a:~$ curl http://172.33.33.124/pma/index.php -v * Trying 172.33.33.124:80... * TCP_NODELAY set * Connected to 172.33.33.124 (172.33.33.124) port 80 (#0) > GET /pma/index.php HTTP/1.1 > Host: 172.33.33.124 > User-Agent: curl/7.68.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 500 Internal Server Error < Server: nginx/1.18.0 (Ubuntu) < Date: Thu, 28 Dec 2023 08:01:22 GMT < Content-Type: text/html; charset=UTF-8 < Transfer-Encoding: chunked < Connection: keep-alive < * Connection #0 to host 172.33.33.124 left intact ekzorchik@srv-us2004a:~$ Разбираюсь ekzorchik@srv-us2004a:~$ sudo tail -f /var/log/nginx/error.log #0 /usr/share/phpmyadmin/libraries/classes/Url.php(206): PhpMyAdmin\Url::getArgSeparator() #1 /usr/share/phpmyadmin/libraries/classes/Url.php(169): PhpMyAdmin\Url::getCommonRaw(Array, '?') #2 /usr/share/phpmyadmin/libraries/classes/Core.php(749): PhpMyAdmin\Url::getCommon(Array) #3 /usr/share/phpmyadmin/libraries/classes/Core.php(330): PhpMyAdmin\Core::linkURL('https://secure....') #4 /usr/share/phpmyadmin/libraries/classes/Core.php(353): PhpMyAdmin\Core::getPHPDocLink('book.mbstring.p...') #5 /usr/share/phpmyadmin/libraries/classes/Core.php(973): PhpMyAdmin\Core::warnMissingExtension('mbstring') #6 /usr/share/phpmyadmin/libraries/common.inc.php(106): PhpMyAdmin\Core::checkExtensions() #7 /usr/share/phpmyadmin/index.php(27): require_once('/usr/share/phpm...') #8 {main} thrown in /usr/share/phpmyadmin/libraries/classes/Url.php on line" while reading response header from upstream, client: 172.33.33.124, server: 172.33.33.124, request: "GET /pma/index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.3-fpm.sock:", host: "172.33.33.124" ekzorchik@srv-us2004a:~$ sudo apt-get install php7.3-mbstring ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx php7.3-fpm.service mysql
и после выполнив запрос через curl
я увидел на консоль какой-то html
код, проверяю через Web
-интерфейс что вижу страницу авторизации:
phpMyAdmn - ошибка
Расширение mysqli не найдено. Пожалуйста, проверьте ваши настройки PHP.
ekzorchik@srv-us2004a:~$ apt-cache search php7.3-mysqli php7.3-mysql - MySQL module for PHP ekzorchik@srv-us2004a:~$ sudo apt-get install -y php7.3-mysql
После нажал "F5"
в браузере, и я увидел страницу авторизацию в phpMyAdmin:
Пробую авторизоваться:
Пользователь: root
Пароль: 712mbddr@
и нажимаю "Вперед"
, после чего вижу, как провалился в интерфейс администрирования управления:
Итого, я сделал себе пошаговую заметку и опираясь на нее применил ее к боевой VPS
системе компании где, как и говорил в самом начале подрядчики перенесли сервис с хостинга DataLine
на AdminVPS.
На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.