Задача: Проработать обновление 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
Шаг №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"
и нажимаю "Обновить сейчас"
Ожидаю и страницу (вкладку) не закрываю
через несколько минут получаю
Изменяю в файле сайта 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@
Запомнить меня: отмечаю галочкой
Язык: выбираю "Русский"
и нажимаю "Войти"
, вижу
и после успешно указания данных входа вижу обновленный Web
-интерфейс:
Шаг №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.