В сотый раз возвращаемся к теме миграции сайта с Joomla 2.5 на Joomla 3. Сразу предупреждаю, что эта статья не для новичков, а для тех, кто имеет достаточный опыт работы с Joomla и веб-сервером Xampp. По большей части я пишу эту статью для себя, чтобы не держать в голове всех тонкостей и нюансов.

Когда-то я публиковал статью Переход с Joomla 2.5 на Joomla 3. Тонкости и нюансы, в которой описал свой первый опыт в выполнении этой задачи. С тех пор прошло много времени и многое поменялось. В частности, Роскомнадзором заблокированы сервера Амазона, на которых лежали дистрибутивы Joomla, используемые старыми версиями движка для обновления. Если раньше для обновления Joomla с 2.5 до 3 достаточно было отключить лишние плагины и включить поиск обновлений "с короткой поддержкой", то сейчас только вручную и только хардкор!

Я перевел с 2.5 на 3 уже не один десяток сайтов и почти каждый случай был по своему уникален, почти в каждом сайте были спрятаны свои грабли, а то и не одни. В этой статье я хочу рассказать о наиболее часто возникающих проблемах и том, как их решить.

Решили запустить обновление Joomla на "боевом" сервере и получили абсолютно нерабочий сайт

В лучшем случае Joomla 2.5 не увидит обновленную версию даже из своей линейки. К примеру, она будет версии 2.5.27 и будет утверждать, что обновлений нет, хотя отправной точкой для миграции является версия 2.5.28. Ладно, решили установить вручную - нашли с грехом пополам апдейт-пак с 2.5.27 до 2.5.28, запустили... Сервер на какое-то время задумался и радостно сообщил о том, что превышено время ожидания - по умолчанию оно составляет 30 секунд. Другой вариант - сервер вернул ошибку "502 - Bad Gateway". После этого сайт, как правило, приобретает довольно жалкий вид - отваливается админка, либо вообще вместо сайта мы получаем "простыню" из сообщений об ошибках.

Что делать? Прежде всего - перед тем как затевать миграцию, убедиться, что на сервере включено резервное копирование. У большинства хостинг-провайдеров оно включено по умолчанию, но лишний раз все-таки проверьте, когда последний раз была сделана "успешная копия", до которой можно в случае чего откатиться.

Если на сайте 10-20 страниц, то обновление, запущенное на "боевом" сервере, скорее всего, выполнится успешно. Если же на сайте сотни страниц - даже не пытайтесь это делать на удаленном хосте, сайт нужно "вытянуть" на локальный хост. 

Как проще и быстрее скачать сайт на Joomla на локальный веб-сервер?

Я не буду расписывать во всех подробностях, как установить Denwer или Xampp на свой компьютер. Для миграции Joomla с 2.5 на 3 версия PHP в должна быть 5.6. Не стоит устанавливать PHP7 - Joomla 2.5 под ним не заработает! С удаленного сервера нужно скопировать на локальный хост файлы сайта и дамп базы данных. Дамп базы данных делается экспортом из PhpMyAdmin и скачивается в файл с расширением .sql. Файлы движка можно скачать по FTP, но есть способ получше!

Заходим в админку хостинга и открываем "диспетчер файлов" - он есть наверно у всех хостинг-провайдеров. В "диспетчере" есть замечательная возможность - создать архив на сервере из указанной папки. Упаковываем в архив папку public_html, это займет несколько секунд, и скачиваем ее по ссылке - это тоже займет не больше минуты. Потом распаковываем архив в рабочую папку на локальном хосте. Это тоже, как правило, занимает немного времени. По FTP же мы будем копировать все пофайлово минут 15, а то и больше! 

Как подготовить Xampp к миграции Joomla?

Нужно сделать две вещи - снять лимиты на объем загружаемого файла (2 мегабайта) и на время выполнение скрипта (30 секунд). Я обычно ставлю 200 мегабайт и 30000 секунд соответственно. Делается это в php.ini.

Как быстро импортировать большую базу данных на локальный сервер MySQL?

Когда файлы распакованы, нужно импортировать базу данных из SQL-файла. Это можно сделать через PhpMyAdmin. Однако, как показывает практика, для баз данных большого объема этот способ также не всегда оптимален. Для импорта базы данных воспользуемся консолью, предварительно создав через PhpMyAdmin пустую базу с кодировкой utf-8. После этого копируем файл с базой данных из папки "Загрузки" в рабочий каталог сервера (например, c:\xampp\dump.sql).

Далее нужно вызвать консоль. Если вы используете Xampp, нажимаем кнопку Shell в окне программы Xampp Сontrol Panel:

Откроется подобие командной строки.

На скриншоте показано, как нам подключиться к базе данных. Набираем команду:

mysql -uroot -p

После этого сервер попросит нас еще раз ввести пароль. По умолчанию в Xampp пароль пользователя root пустой, так что просто нажимаем enter.

Дальше нам нужно ввести команду для выбора:

use myDatabase

myDatabase в данном случае - имя пустой базы данных. Если имя ввели правильно, сервер нам ответит - database changed.

Теперь нужно запустить импорт данных в базу из файла. Один из способов это сделать - ввести следующую команду.

source dump.sql

dump.sql - это файл, который мы выкачали с удаленного сервера при помощи экспорта из PhpMyAdmin. При нажатии Enter запустится процесс заполнения пустой базы данных из файла. 

Кому-то данный способ может показаться излишне мудреным, но он работает гораздо быстрее и надежнее, чем импорт данных через PhpMyAdmin.

Адаптируем конфигурационный файл Joomla для локального хоста

В корне сайта есть файл configuration.php, в котором содержатся базовые настройки конфигурации Joomla. Среди них есть две группы параметров, которые нам нужно изменить (предварительно сделав запасную копию файла configuration.php):

  • Настройки подключения к базе данных - имя базы, пользователь и пароль
  • Пути к каталогам для временных файлов и логов.

Если первое делают всегда, то второе часто забывают, из-за чего при попытке обновиться получают сообщение об ошибке типа "не найден XML-файл установки" или что-то подобное. Пропишите существующие именно на вашем локальном хосте каталоги: c:\xampp\htdocs\site\tmp и c:\xampp\htdocs\site\logs и вы избавитесь от большинства проблем с установкой компонентов.

Не забываем, что перед загрузкой на "боевой" сервер, данные в файле configuration.php нужно будет вернуть - именно для этого мы и сделали копию этого файла, прежде чем что-то в нем менять.

После всего того, что мы проделали, "подопытный" сайт должен запуститься на локальном хосте. 

Удаляем с сайта все лишние плагины и компоненты

Это делается через админку сайта. Сайт по возможности должен быть очищен от всех "левых" расширений лохматого года выпуска, так как они потом могут доставить нам много неприятностей, будучи не совместимыми с новой версией Joomla.

Делаем первый локальный бэкап локального сайта!

Просто копируем папку сайта и делаем дамп базы данных. Это, по сути наш первый "save game" в многоходовой партии. Имея под рукой "чистую" Joomlу 2.5, мы всегда сможем откатиться до этого состояния простым копированием и перезаливкой базы данных.

Убеждаемся, что Joomla имеет версию 2.5.28

Если это не так, идем на GitHub - https://github.com/joomla/joomla-cms/releases - и ищем обновление с нашей версии до 2.5.28, скачиваем его.

Обновление устанавливается через менеджер расширений как обычное расширение. Эта процедура может занять несколько минут, наберитесь терпения! Не перезагружайте страницу, не закрывайте браузер! 

После нескольких минут томительного ожидания версия Joomla "подрастет" до 2.5.28.

Следующий этап - миграция на Joomal 3.4

На том же Github ищем Joomla 3.4 и скачиваем пакет обновления с 2.5 до 3.4 - https://github.com/joomla/joomla-cms/releases/download/3.4.8/Joomla_3.4.8-Stable-Update_Package.zip

Устанавливаем этот апдейт также через менеджер расширений. Обновление скорее всего будет длиться очень долго! Сайт с базой данных весом 80 мегабайт обновлялся 3!!! часа. Я отслеживал индикаторы производительности ПК в диспетчере задач - все это время загруженность процессора была около 30%, а жесткого диска - около 100%. Не знаю, чем он (компьютер) столько времени занимался, но в конце концов на экране появилась картинка входа в админку Joomla 3. Ура!

Делаем второй промежуточный бэкап!

Мигрируем до версии 3.6.5

После того, как мы вошли в админку, обновленная Joomla нам выдала предупреждение, что версия старая и неплохо бы ее обновить до 3.6.5. Соглашаемся с этим и запускаем обновление, нажав кнопку "Обновить" в соответствующем диалоге. И опять долгое-долгое ожидание! Может быть час, может быть два! Не трогайте компьютер, на закрывайте браузер и не останавливайте процесс mysqld.exe, который так "напрягает" системные ресурсы.

Делаем финальный бэкап перед последним рывком до 3.8.3

Миграция до последней актуальной версии

В принципе, тут уже идем по накатанной тропе. Обновление с 3.6 до последней актуальной версии длится не очень долго и после этого выдыхаем с облегчением - мы это сделали! Теперь осталось скачать обновленные версии плагинов, которые мы удалили с исходного сайта и установить их на новый сайт. 

Теперь можно заливать сайт на боевой сервер.

Заливаем сайт на сервер

Категорически не рекомендую это делать "поверх" старого сайта в папку public_html! Создайте папку public_html_new и копируйте в нее. Когда копирование закончена, старый public_html переименовываем public_html_old, а public_html_new в public_html. Таким образом, мы полностью сохраняем старый сайт на случай непредвиденных ситуаций (об одной из них речь пойдет ниже).

Базу данных создаем новую и делаем импорт данных. Можно через PhpMyAdmin, можно через консоль SSH при помощи программы puTTY. 

Затем настраиваем файл configuration.php на соединение с новой базой данных. Не забываем прописать в нем пути к папкам логов и временных файлов!

На этом настройка боевого сервера завершена. Осталось обеспечить доступ к старому сайту, чтобы можно было в случае чего посмотреть "как оно было". Проще всего это сделать, создав поддомен old.mysite.ru и привязать его к папке public_html_old.

Открываем сайт, в идеале все должно заработать. Но бывает, что что-то пошло не так...

Рано радуемся - половина картинок не отображаются!

Тут причин может быть две:

  • Неправильная настройка SSL - подробнее об этом можно почитать здесь: При работе по HTTPS на сайте Joomla 3 разваливается верстка - как исправить?
  • Файлы, названные русскими буквами. При копировании их с сервера и заливке обратно элементарно могла сбиться кодировка и они в диспетчере файлов отображаются как знаки вопроса или черные ромбики. В этом случае заходим в диспетчер файлов в админке хостинга делаем следующее:
    • Удаляем папку, содержащую файлы с некорректными именами, например, images
    • Заходим в папку public_html_old и копируем папку images оттуда. При этом кодировка копируемых файлов сохранится какой нужно. проблема решена!

Вместо заключения

Не стоит думать, что приведенная выше инструкция является универсальной для всех случаев. Каждая миграция по своему уникальна и почти никогда не идет сразу как по маслу. Сейчас чтобы перевести сайт с Joomla 2.5 на 3.8 потребуется не менее одного дня. Операция проходит в несколько этапов. Большую часть времени будет занимать ожидание, пока компьютер выполняет задачу. Самое неприятное в этом - нет 100% вероятности, что каждый из этапов будет успешно завершен. При этом приходится пускать в ход смекалку и инженерную мысль.

Если вы не уверены в том, что сможете сделать миграцию самостоятельно, не убив при этом сайт, лучше обратитесь к профессионалам. Это стоит денег, причем чем сложнее сайт, тем выше будет стоимость. 

Мне иногда поступают просьбы помочь с обновлением Joomla на сайте. К сожалению, я сейчас этим пока не занимаюсь, так как у меня есть более интересная и творческая работа.

{crossposting}