Восстановление и обновление сайта на Joomla 3.2 -> 3.9
Задача: есть сайт, который был создан в 2013 году на Joomla 3.2.4. Работы по обновлению и сопровождению сайта с того времени не проводилось. После обновления хостером PHP до версии 7.2, сайт начал открываться с ошибкой 500 (Internal Server Error, внутренняя ошибка сервера). Необходимо восстановить работу сайта и обновить его до последней версии Joomla.
Анализ логов сервера показал, что ошибка возникает в компоненте sh404sef.
PHP Fatal error: Cannot use $this as parameter in /virt/homes/test.com/upg.htdocs/administrator/components/com_sh404sef/sh404sef.class.php on line 2093 Status: 500 Internal Server Error
Этот компонент платный и предоставляется по подписке, которая на момент проведения работ истекла. Следовательно, обновить его не представлялось возможным. Плюс ко всему, для корректного обновления компонента необходимо, чтобы сайт корректно работал.
После анализа ситуации принят следующий план действий:
- Скопировать сайт и поднять его копию на локальном LAMP-сервере с версией PHP 5.
- Корректно обновить Joomla и все компоненты до новых версий.
- Удалить компонент sh404sef и включить SEO-модуль, встроенный в Joomla. Настроить 301 редирект со старых страниц на новые. Настроить meta-тэги.
- Перенести обновленный сайт обратно на хостинг.
Копируем сайт на локальный сервер и настраиваем
Итак, у нас есть локальный сервер CentOS 7 с рабочими AMP-пакетом (Apache + MariaDB + PHP) и phpMyAdmin. Инструкци в сети достаточно: 1, 2, 3. Имеется дамп БД сайта и полное содержимое папки сайта.
Создадим VirtualHost test.com и скопируем файлы сайта по пути: /var/www/html/test.com/public_html/
# /etc/httpd/conf.d/vhost.conf ServerName www.test.com ServerAlias test.com DocumentRoot /var/www/html/test.com/public_html/ ErrorLog /var/www/html/test.com/logs/error.log CustomLog /var/www/html/test.com/logs/access.log combined DirectoryIndex index.php
Сменим владельца и дадим права 777 папкам tmp и logs:
chown -R apache:apache /var/www/html/test.com/public_html/* chmod -R 0777 /var/www/html/test.com/public_html/logs chmod -R 0777 /var/www/html/test.com/public_html/tmp
С помощью phpmyadmin загрузим дамп БД (вкладка «Импорт«):
Отредактируем файл «configuration.php» и исправим настройки подключения к БД и пути к папкам:
/* configuration.php */ public $host = 'localhost'; public $user = 'bd_user'; public $password = 'bd_pass'; public $log_path = '/var/www/html/test.com.ua/public_html/logs'; public $tmp_path = '/var/www/html/test.com.ua/public_html/tmp';
После проведенных манипуляций, сайт начинаем работу. Открываются основная часть и панель администратора:
Однако, пароль от суперадминистратора был утерян. Воспользуемся инструкцией для восстановления. С помощью phpMyAdmin в таблице «jos_users» сбросим пароль на «password«:
Обновляем Joomla
Обновление до версии 3.6.5
Текущая версия Joomla — 3.2.4. После входа в панель управления сайтом сразу предлагается обновление до 3.2.7. Согласимся.
Если присмореться, то вместо версии 3.2.7 нам предлагается сразу версия 3.6.5.
В процессе обновления несколько раз просит авторизоваться:
После чего мы успешно обновились до версии 3.6.5.
Обновление модулей
Переходим в Расширения -> Менеджер расширений -> Update и обновляем модули по одному:
Обновление до версии 3.9.3
Продолжаем обновление Joomla. Оно проходит без проблем.
Удаление sh404sef
Перед удалением sh404sef необходимо сохранить информацию про старые адреса страниц сайта и, при необходимости, meta-данные (если они задавались через sh404sef).
Следуя инструкции по удалению, переходим Расширения -> Менеджер расширений -> Управление. Выделяем только компонент sh404sef и деинсталлируем его. Все связанные компоненты будут удалены автоматически.
После чего необходимо включить встроенный в Joomla SEF-компонент:
301 редирект
Теперь необходимо установить 301 редирект со старых адресов страниц на новые. Для этого нужно добавить в файл .htaccess записи переадресации. В сети есть несколько генераторов, позволяющих упростить работу. Вот пример одной из записей:
#301 Redirect http://www.test.com/contacts.html -> http://www.test.com/contacts Redirect 301 /contacts.html http://www.test.com/contacts
Мета-теги
При необходимости, meta-теги keywords и description прописываем в пункты меню или статьи.
Исправляем программные ошибки
Теперь необходимо пройтись по всем страницам сайта и посмотреть на консоль JavaScript. Вот, к примеру, «улов» на одной из страниц:
Судя по всему, библиотека jQuery.js загружается после библиотеки boxplus.js, что приводит к ошибкам. Загрузка jQuery происходит из самописного шаблона сайта. Для решения проблемы используем плагин jQuery easy.
После активации плагина, укажем в его настройках загрузку jQuery. При необходимости, можно выбрать нужную версию.
Сайт использует плагин галерей изображений sigPlus, который тоже необходимо обновить. Это удобно сделать, установив последнюю версию этого плагина из встроенного в Joomla каталога «JED«.
Перенос на хостинг
После устранения всех ошибок, сайт и БД можно переносить обратно на хостинг. Необходимо обязательно исправить файл configuration.php (настройки подключения в БД и пути к папкам logs и tmp).
- Проверить 301 редирект. Поискать в Google проиндексированные страницы и убедиться что по ним отдается правильный контент;
- Проверить title и meta-тег description;
- При необходимости, отключить регистрацию;
- Проверить права на папки и файлы.