Міграція великого веб-сайту з Joomla! 1

Користувач Strumjan поділився своїм досвідом з міграції великого (близько 15 000 матеріалів) веб-сайту preminportal.com.mk з Joomla! 1.x до Joomla! 3.x. Нижче наведено переклад матеріалу. Сподіваємося, що ви почерпнете собі щось корисне і цілком можливо застосуйте це на практиці.

Отже, завдання було таке: є веб-сайт Joomla 1.0.13, з базою даних розміром 320 MB і кореневою папкою розмірів 3.5 GB. Все це потрібно було перекласти на Joomla 3.x.

Якщо бути дуже точним, то вміст бази даних на момент міграції був таким:

Щоб уникнути великої затримки на живому веб-сайті, моя ідея була повна міграція локально на комп'ютері і далі перенесення на веб-хостинг. При цьому я не переносив на локалку папки із зображеннями, музикою та іншими документами, тому що вирішив не змінювати їхнє розташування (наприклад, з images/stories в images) та уникнути зміни шляхів у всіх матеріалах.

Для локальної роботи використав USBWebServer. Для того, щоб імпортувати базу даних, мені довелося збільшити memory_limit, upload_max_filesize і post_max_size у php.ini та встановити їх значення більш ніж 400 MB.

У кореневій папці USBWebServer я створив папку 'oldsite', і я розпакував папки зі старого веб-сайту preminportal.com.mk (лише базові папки Joomla 1.0.x). Далі я створив у USBWebServer базу даних під назвою 'oldsite' і звичайно ж встановив collation в utf8_general_ci, оскільки веб-сайт на кирилиці.

У configuration.php я змінив наступні рядки:

Для локальної роботи з Joomla 1.0.x я використав USBWebSerever версію 8, яка постачається з PHP 5.3.2. Це старіша версія, але саме вона й потрібна, тому що в ній єmagic_quotes_gpc (магічні лапки), які мають бути включені для нормального відображення веб-сайту. У нових версіях PHP їх немає.

Тепер веб-сайт повністю реплікований локально (без зображень у матеріалах, але в кінці, коли веб-сайт запуститься на веб-сервері, вони знайдуть шляхи) і можна починати міграцію.

Далі в PHPMyAdmin я вибрав усі таблиці бази даних, у яких був overhead та оптимізував їх. У результаті не залишилося таблиць із overhead.

Наступний крок – встановлення компонента Migrator, який мігрує базу даних із Joomla 1.0 до 1.5. Він створює один SQL-файл, і цей файл повинен бути імпортований в чисту установку Joomla 1.5.

Тепер я переніс всі інсталяційні файли Joomla 1.5.26 до папки 'oldsite15' і створив нову базу даних під назвою 'oldsite15' і collation в utf8_general_ci.

Я спробував імпортувати міграційний файл під час інсталяції 1.5.26. За промовчанням пропонується кодування ISO-8859-1, але воно не підходить. Я спробував використати кодування utf-8, але весь час отримував таку помилку:

Рядок 873 у цьому helper.php:

Після невеликого розслідування у форумах про функцію iconv, я вирішив спробувати наступний варіант:

Я зробив це, тому що найпершою помилкою в повідомленнях була:

де в першому рядку Joomla читає слово 'Дома' нормально, але після цього змінює на дивні символи 'ÐÐÐÐÐа', тому я припустив, що проблемою є транслітерація.

Тепер міграція пройшла лише з двома повідомленнями, але наприкінці показала повідомлення про успішну міграцію. Нарешті я зміг побачити свій веб-сайт на Joomla 1.5 з нормальною кирилицею та читаним текстом.

У версії 1.5 я встановив Akeeba Backup 3.4.6 і зробив бекап на цьому кроці.

Тепер на новому USBWebServer 8.5 яповинен був встановити Joomla 3.3.6 (остання версія на момент написання матеріалу) та спробувати мігрувати веб-сайт із 1.5.26. Для цього необхідно, щоб бази даних 1.5.26 і 3.3.6 були на тому самому сервері, тому мені потрібно встановити 1.5.26 з бекапу.

Я створив нову папку з назвою 'newsite3', базу даних з назвою 'newsite3' з collation в utf8_general_ci, а також базу даних 'oldsite15' з utf8_general_ci для Joomla 1.5.26. На чистій установці Joomla 3.3.6 redMigrator. У налаштуваннях я вибрав мігрувати лише базу даних 'oldsite15'. Після 23% redMigrator завис, тому я спробував ще раз, змінюючи настройки. Але все було, як і раніше. Я спробував збільшити memory_limit, після цього redMigrator зумів обробити близько 3300 з 11296 матеріалів і знову застряг.

Далі я спробував компонент MigrateMe, який імпортує базу даних 1.5 та конвертує у версію 3. MigrateMe імпортував базу даних, почав її аналізувати, але потім застряг.

Я чув, що SPupgrade непогано справляється із завданням, тому я вирішив спробувати. Я знову почав зі свіжої установки Joomla 3.

Після встановлення SPUpgrade, я залишив усі параметри за замовчуванням. Я з'єднав її з базою даних 'oldsite15' і він працював більш ніж дві години. У цей час у Firefox єдиною ознакою того, що воно працює, була іконка, що крутиться, в панелі. Час від часу я перевіряв у PHPMyAdmin стан бази даних і бачив, що кількість рядків змінюється, що було добрим знаком. Через дві години сайт вилогінив мене та представив сторінку входу.

У базі даних таблиця ucm_history, де зберігаються версії матеріалів, була 316 MB. Я її очистив, оскільки матеріали в Joomla 1.0 не мали версій, тому що це було реалізовано лише Joomla 3.

Матеріали Joomla 1.0 не мали дружніх URL, тому я вирішив це виправити. Тільки врахуйте, що старі посилання з інших веб-сайтів на ваш сайт будуть втрачені.

Оскільки всі назви матеріалів були на Macedonian Cyrillic, я встановив македонську мову та активізував її на панелі управління. Це дало Joomla можливість автоматично транслітувати Macedonian Cyrillic на латинські символи. Але для цього потрібно було відкрити кожний матеріал та перезберегти його. Мені це не підходило, тому що в мене було занадто багато матеріалів, тому мені потрібно було швидше рішення.

Далі я приступив до вище описаного способу. Це працювало, але дуже повільно. Я вважав, що це займе занадто багато часу, тому вирішив знайти рішення для зміни безпосередньо в базі даних.

Я попросив допомоги на форумі Joomla. Користувач Manicakm порадив використати такий варіант:

і перевірити, чи підходить мені такий тип аліасу. Перевірка показала, що всі аліаси будуть на кирилиці.

Після цього я виконав такий запит:

Тепер усі аліаси були майже такими, якими мені потрібно було, але на кирилиці. Це було непогано, але чи можна зробити ще краще і перевести їх у латиницю?

pe7er запропонував таку перевірку:

Цей запит показав, що безліч аліасів мали недружні символи, типу +,.„“()!?

Тепер їх необхідно замінити на '-' або порожнечу в залежності від їх позиції і використання в назві матеріалу.

Я зробив це таким запитом:

Після заміни всіх проблематичних символів я використав такий самий метод для заміни всіх кириличних символів в аліасах на їхню латинську транслітерацію.

Після цього я скопіював усі зображення, музику та документи зі старого сайту, зберігаючишляхи. Встановив новий шаблон та змінив його. Встановив останню версію Akeeba Backup та відновив веб-сайт на живому сервері. Міграція пройшла успішно.