Задача: Проработать обновление WordPress 5.0.2 на самую последнюю версию. Операционная система, на которой все установлено это Ubuntu 22.04 Server.

Предисловие к задумке, у меня есть мой основной блог https://www.ekzorchik.ru который сейчас на мощностях AdminVPS, теперь уже ось Ubuntu 22.04 Server, но вот версия движка для моих заметок CMS WordPress 5.0.2 — это не дело, нужно произвести обновление:

  • https://lin.ekzorchik.ru — 5.2.20 с темой оформления Admiral
  • https://win.ekzorchik.ru — 5.2.20 с темой оформления Admiral
  • https://net.ekzorchik.ru — 5.2.20 с темой оформления Admiral
  • https://home.ekzorchik.ru — 6.4.3 с темой оформления Newsup
  • https://voip.ekzorchik.ru — 6.4.3 с темой оформления Newsup

Из этого всего напрашивается действо, нужно привести свои ресурсы к наиболее полному обновлению, чтобы все было в самом актуальном виде, чтобы все работало и ничего не пострадало. Как же этого добиться, да все просто, создать тестовую систему на домашних мощностях с характеристиками как у боевой VPS системы, развернуть бекап и проработать процедуру обновления до WordPress 6.4.3.

Шаг №1: Вспоминаем что есть сейчас на VPS системе боевого ресурса под управлением Ubuntu 22.04 Server

ekzorchik@ekzorchik:~$ update-alternatives --list php
/usr/bin/php.default
/usr/bin/php7.0 - это для WordPress 5.0.2
/usr/bin/php8.1 - это для WordPress 6.4.3
ekzorchik@ekzorchik:~$

Шаг №2: Опираюсь на заметку: "Полное руководство по настройке WordPress on Ubuntu 22.04 Server"

произвожу преднастройку Ubuntu 22.04 Server, но установку WordPress использую версии 5.0.2 (https://ru.wordpress.org/wordpress-5.0.2-ru_RU.tar.gz), а раз так-то версия php мне нужна 7.0. Потому:

ekzorchik@srv-home:~$ apt-cache search php7.0
ekzorchik@srv-home:~$ sudo apt-get install -y software-properties-common
ekzorchik@srv-home:~$ sudo add-apt-repository ppa:ondrej/php -y
ekzorchik@srv-home:~$ sudo apt-get install php7.0-cli nginx mysql-server mysql-client php7.0-fpm php-common php7.0-mbstring php-xmlrpc php-soap php7.0-gd php7.0-xml php-intl php7.0-mysql php7.0-cli php7.0-zip php7.0-curl -y
ekzorchik@srv-home:~$ sudo php-fpm7.0 --test
[01-Mar-2024 14:11:23] NOTICE: configuration file /etc/php/7.0/fpm/php-fpm.conf test is successful
ekzorchik@srv-home:~$
ekzorchik@srv-home:~$ update-alternatives --list php
/usr/bin/php7.0
/usr/bin/php8.3
ekzorchik@srv-home:~$ php -v
PHP 8.3.3-1+ubuntu22.04.1+deb.sury.org+1 (cli) (built: Feb 15 2024 18:38:52) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.3, Copyright (c) Zend Technologies
with Zend OPcache v8.3.3-1+ubuntu22.04.1+deb.sury.org+1, Copyright (c), by Zend Technologies
ekzorchik@srv-home:~$

Итого версию PHP7.0 я установил в систему Ubuntu 22.04 Server, но автоматически еще установилась версия 8.3 (входит в поставку с системой по умолчанию из дефолтных репозитариев)

Шаг №3: Изменяю схему авторизации и назначаю пароль на системную учетной запись root сервиса MySQL:

ekzorchik@srv-home:~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
default-authentication-plugin=mysql_native_password

Шаг №4: Задаем пароль на системную учетную запись Login:root сервиса MySQL:

ekzorchik@srv-home:~$ sudo mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '712mbddr@';"
ekzorchik@srv-home:~$

Шаг №5: Перезапускаю сервис mysql:

ekzorchik@srv-home:~$ sudo systemctl restart mysql && sudo systemctl status mysql | head -n5
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-03-01 11:30:13 MSK; 14ms ago
Process: 26162 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 26170 (mysqld)
ekzorchik@srv-home:~$

Шаг №6: Выполняем базовую безопасность:

ekzorchik@srv-home:~$ sudo mysql_secure_installation

Шаг №7: Создаем базу под сервис wordpress если не существует:

sudo mysql -u root -p712mbddr@ -e "drop database if exists db_wp"
sudo mysql -u root -p712mbddr@ -e "create database db_wp character set utf8 collate utf8_general_ci";
sudo mysql -u root -p712mbddr@ -e "drop user if exists 'us_wp'@'localhost'"
ekzorchik@srv-home:~$ sudo mysql -u root -p712mbddr@ -e "create user 'us_wp'@'localhost' identified by '612mbddr@'"
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1819 (HY000) at line 1: Your password does not satisfy the current policy requirements

На предмет этой ошибки стоит ознакомиться с заметкой и многое прояснится: "Плагин validate_password в mysql-server на Ubuntu 22.04"

после нее уже:

sudo mysql -u root -p712mbddr@ -e "drop database if exists db_wp"
sudo mysql -u root -p712mbddr@ -e "create database db_wp character set utf8 collate utf8_general_ci";
sudo mysql -u root -p712mbddr@ -e "drop user if exists 'us_wp'@'localhost'"
sudo mysql -u root -p712mbddr@ -e "create user 'us_wp'@'localhost' identified by '612mbddr@A'"
sudo mysql -u root -p712mbddr@ -e "grant all on db_wp.* to 'us_wp'@'localhost'";

Шаг №8: Скачиваю WordPress версии 5.0.2 и помещаю в директорию /var/www/html:

ekzorchik@srv-home:~$ wget -c https://ru.wordpress.org/wordpress-5.0.2-ru_RU.tar.gz
ekzorchik@srv-home:~$ tar zxf wordpress-5.0.2-ru_RU.tar.gz
ekzorchik@srv-home:~$ sudo mv wordpress /var/www/html/
ekzorchik@srv-home:~$ sudo chown -R www-data:www-data /var/www/html/
ekzorchik@srv-home:~$ sudo chmod -R 755 /var/www/html/

Шаг №9: Создаю конфигурацию описывающую поведение nginx для работы с CMS сервисом WordPress:

ekzorchik@srv-home:~$ sudo nano /etc/nginx/sites-available/wordpress.conf
server {
listen 80;
server_name 172.33.33.117;
root /var/www/html/wordpress;
index index.php;
access_log /var/log/access-wp.log;
error_log /var/log/error-wp.log;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
gzip on; #
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

location ~ /\. {
deny all;
}

location ~ /.well-known {
allow all;
}

location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}

location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires max;
}
}
}
ekzorchik@srv-home:~$ sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/wordpress.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

Шаг №10: Произвожу настройку CMS WordPress на работу с базой, пользователем и паролем MySQL:

ekzorchik@srv-home:~$ sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
ekzorchik@srv-home:~$ sudo nano /var/www/html/wordpress/wp-config.php
define('DB_NAME', 'db_wp');
define('DB_USER', 'us_wp');
define('DB_PASSWORD', '612mbddr@A');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY',         '1впишите сюда уникальную фразу');
define('SECURE_AUTH_KEY',  '2впишите сюда уникальную фразу');
define('LOGGED_IN_KEY',    '3впишите сюда уникальную фразу');
define('NONCE_KEY',        '4впишите сюда уникальную фразу');
define('AUTH_SALT',        '5впишите сюда уникальную фразу');
define('SECURE_AUTH_SALT', '6впишите сюда уникальную фразу');
define('LOGGED_IN_SALT',   '7впишите сюда уникальную фразу');
define('NONCE_SALT',       '8впишите сюда уникальную фразу');
$table_prefix  = 'wp_cms_db';
ekzorchik@srv-home:~$ sudo chown -R www-data:www-data /var/www/html/wordpress/
ekzorchik@srv-home:~$ sudo systemctl restart nginx php7.0-fpm

Шаг №11: Затем обращаюсь через браузер с основной системы к системе где развернут WordPress и произвожу окончательную настройку:

http://IP&DNS/wp-admin/install.php

Установленный CMS WordPress 5.0.2 на Ubuntu 22.04 Server

Шаг №12: Делаю бекап развернутого блога:

за основу беру скрипт

ekzorchik@srv-home:~$ sudo mkdir -p /etc/scripts
ekzorchik@srv-home:~$ sudo mkdir -p ~/backups
ekzorchik@srv-home:~$ sudo nano /etc/scripts/backupblog
#!/bin/bash
#mysql root: 712mbddr@
bfile=$(date +%d%m%y_%H_%M_%S)
efile=$(date +%d%m%y_%H_%M_%S)
BKPDIR=/home/ekzorchik/backups
TIME_DATE=$(date +"%d-%m-%Y")
[ ! -d "$BKDIR/$TIME_DATE" ] &&  mkdir -p  "$BKPDIR/$TIME_DATE"
CURRENT="$BKPDIR/$TIME_DATE"
$CURRENT

tar -czvPf $CURRENT/blog_$bfile.tgz /var/www/html/wordpress

#Backup Cron
tar -czvPf $CURRENT/crontab_$bfile.tgz /var/spool/cron/crontabs

#Backup Nginx Conf
tar -czvPf $CURRENT/nginxconf_$bfile.tgz /etc/nginx/sites-available

#wordpress mysql backup
mysqldump db_wp -u root -p'712mbddr@' | gzip -9 > $CURRENT/Alldb-dump_$efile.sql.gz
echo "Backup size:"
du -sh $CURRENT
find /home/ekzorchik/backups -type f -mtime +7 -exec rm -f {} \;
exit

ekzorchik@srv-home:~$ sudo chmod +x /etc/scripts/backupblog
ekzorchik@srv-home:~$ sudo /etc/scripts/backupblog
Backup size:
11M     /home/ekzorchik/backups/01-03-2024

Шаг №13: После того как сделали бекап авторизуется в админке WordPress и деактивируем все плагины так они могут не заработать в новой версии:

http://IP&DNS/wp-login.php - login&pass - Плагины - (Установленные/Активные)

и отмечаем плагин и нажимаем "Деактивировать"

Шаг №14: Устанавливаю пакеты php8.3:

sudo apt-get install php8.3-cli php8.3-fpm php-common php8.3-mbstring php-xmlrpc php-soap php8.3-gd php8.3-xml php-intl php8.3-mysql php8.3-cli php8.3-zip php8.3-curl -y

Шаг №15: Обновляю, авторизовавшись в WordPress 5.0.2 административной части с административным аккаунтом:

http://IP&DNS/wp-login.php - login&pass - Консоль - Главная — и нажимаю "Обновить до 6.4.3"

Через консоль WordPress обновляю WordPress до 6.4.3

и нажимаю "Обновить сейчас"

Нажимаю "Обновить сейчас".

Ожидаю и страницу (вкладку) не закрываю

через несколько минут получаю

Wordpress успешно обновлен до версии 6.4.3

Изменяю в файле сайта wodpress.conf работу fastcgi_pass уже не через php7.0-fpm.sock, а через php8.1-fpm.sock

ekzorchik@srv-home:~$ sudo nano /etc/nginx/sites-available/wordpress.conf
include snippets/fastcgi-php.conf;
#fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;

Проверяю конфигурационные файлы nginx на ошибки:

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:~$

Ошибок нет, перезапускаю Web-сервис nginx & php8.3-fpm:

ekzorchik@srv-home:~$ sudo systemctl restart nginx php8.3-fpm && sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-03-01 15:13:57 MSK; 20ms ago
Docs: man:nginx(8)
Process: 6691 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 6692 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 6697 (nginx)
Tasks: 3 (limit: 4558)
Memory: 3.9M
CPU: 42ms
CGroup: /system.slice/nginx.service
├─6697 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─6699 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
└─6700 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
Mar 01 15:13:57 srv-home systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 01 15:13:57 srv-home systemd[1]: Started A high performance web server and a reverse proxy server.
ekzorchik@srv-home:~$

Все запустилось без ошибок, проверяю, что могу открыть Web-интерфейс CMS системы WordPress

http://172.33.33.117/wp-login.php

  • Имя пользователя или email: ekzorchik
  • Пароль: 712mbdbdr@
  • Запомнить меня: отмечаю галочкой
  • Язык: выбираю "Русский"

и нажимаю "Войти", вижу

Подтверждаю текущий email администратора: "Адрес email верен"

и после успешно указания данных входа вижу обновленный Web-интерфейс:

Wordpress успешно обновлен до версии 6.4.3

Шаг №16: Перехожу в "Плагины" и активирую все те которые перед процедурой обновления WordPress деактивировал и если нужно обновляю их под версию моего теперешнего WordPress если разработчиком плагина такой функционал предусмотрен.

Шаг №17: Также если нужно поменять в конфигурационном файле сайта версию php7.0-fpm на php8.1-fpm то порядок следующий:

деактивировать все установленные плагины

ekzorchik@ekzorchik:~$ sudo nano /etc/nginx/sites-available/home.ekzorchik.ru.conf
#fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
ekzorchik@ekzorchik:~$ sudo systemctl reload nginx php7.0-fpm.service php8.1-fpm.service

После уже в поддомене блога активировать плагины если нужно обновляю, а при использовании php8.1 уже нужно точно.

этот шаг я применил на блоге https://home.ekzorchik.ru — все прошло успешно.

Итого: с учетом данной заметки которую я на тестовом окружении приближенном к боевому раскатал, все моменты и нюансы учел и применил все проработанное к VPS системе для своих ресурсов https://*.ekzorchik.ru, теперь у меня связка: Ubuntu 22.04 Server + nginx + php8.1-fpm + WordPress 6.4.3 остается лишь привести все используемые плагины к единому и поднастроить тему для удобства навигации.

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