Типова картина: файли залиті, база імпортована, вводите домен і бачите білий екран. Або відкривається головна, але без жодної картинки, а адмінка віддає помилку 500. Сам процес перенесення OpenCart нескладний, магазин складається з файлів і однієї бази MySQL. Проблеми майже завжди ховаються у двох конфігах і в дрібницях, про які згадують уже після переїзду.
Що саме переносимо
Дві речі: усі файли з кореня сайту та дамп бази даних. Більше нічого. Ліцензій, прив'язок до сервера чи прихованих залежностей у стандартному OpenCart немає. Інша річ платні модулі: кожен ліцензується по-своєму, десь прив'язка до домену, десь до сервера, десь її нема взагалі. Якщо такі модулі у вас стоять, напишіть розробнику кожного ще до переїзду й уточніть, чи потрібно переоформити ліцензію. Це індивідуально для кожного модуля, універсального правила тут немає.
Перед стартом зафіксуйте версії на старому сервері: версію OpenCart (видно в футері адмінки) та версію PHP (просто файл із phpinfo()). Друга цифра критична: переїзд, скажімо, з PHP 7.4 на 8.1 разом зі зміною хостингу перетворює пошук проблеми на лотерею. Ви не зрозумієте, що зламалося: сервер, конфіг чи несумісний модуль. Спершу переїжджайте на ту саму версію PHP, а вже потім, на новому місці, експериментуйте з підвищенням.
Крок 1. Резервні копії
Файли зручніше пакувати архівом на сервері, а не тягнути 40 тисяч дрібних файлів по FTP. Якщо є SSH:
tar -czf shop-files.tar.gz -C /var/www/mysite/public_html . mysqldump -u db_user -p db_name > shop-db.sql
Без SSH підійде phpMyAdmin для бази й архіватор у файловому менеджері панелі. На великій базі phpMyAdmin може обрубати експорт по таймауту, тоді просіть підтримку хостингу зробити дамп або скористайтеся скриптом на кшталт Sypex Dumper.
Копії зробіть до будь-яких дій і не видаляйте старий сайт, поки новий не пропрацює хоча б тиждень.
Крок 2. Файли та база на новому сервері
Розпакуйте архів у корінь сайту, створіть у панелі нову базу та користувача, імпортуйте дамп. Тут одна засідка: кодування. Якщо стара база була в utf8, а нова створена як utf8mb4 (чи навпаки), після імпорту кирилиця може перетворитися на знаки питання. Перевірте кодування дампа в перших рядках файлу і створюйте базу з тим самим.
Крок 3. config.php і admin/config.php
Ось де зарито більшість білих екранів. У корені лежить config.php, в папці адмінки другий такий самий, і правити треба обидва. Всередині два блоки: шляхи до папок і доступи до бази.
Неправильно (шляхи лишилися від старого сервера):
define('DIR_APPLICATION', '/home/olduser/public_html/catalog/');
define('DB_USERNAME', 'olduser_shop');
Правильно (актуальний шлях і нові доступи):
define('DIR_APPLICATION', '/var/www/mysite/public_html/catalog/');
define('DB_USERNAME', 'newuser_shop');
Повний шлях до кореня на новому сервері підкаже панель або команда pwd у потрібній папці. В admin/config.phpшляхів більше, там окремо прописані DIR_CATALOG і HTTP_CATALOG, не пропустіть їх. В OpenCart 3.x зверніть увагу ще на DIR_STORAGE: якщо на старому сервері папку storage виносили за межі public_html (движок сам це пропонує), на новому її треба покласти так само і вказати коректний шлях.
Якщо після правки конфігів сайт мовчить, не гадайте. Відкрийте system/storage/logs/error.log або лог PHP у панелі: там буде точний файл і рядок, зазвичай це недописаний шлях або старий пароль бази.
Крок 4. Права доступу і PHP
На більшості хостингів достатньо 755 для папок і 644 для файлів; виставляти 777 не треба, це не лікує проблему, а лише відкриває дірку.
Перевірте в панелі версію PHP і ліміти: max_input_vars від 10000 (інакше не збережуться великі модулі й меню), memory_limit від 256M, upload_max_filesize під ваші імпорти. Якщо магазин жив на Apache з .htaccess, а новий сервер на NGINX, правила ЧПУ доведеться переписати під формат NGINX, інакше всі SEO-адреси віддадуть 404 при тому, що головна працює як ні в чому не бувало.
Крок 5. Після переїзду
Зайдіть в адмінку і оновіть кеш модифікаторів: Розширення → Модифікатори → кнопка «Оновити». Без цього OCMOD-правки можуть підхопитися зі старого кешу з чужими шляхами. В OpenCart 3.x додатково очистіть кеш теми та SASS через іконку шестерні на головній сторінці адмінки.
Далі пройдіться по живому магазину: категорія, картка товару, пошук, додавання в кошик, оформлення замовлення до кінця. Окремо перевірте пошту: якщо стояв SMTP старого хостингу, лист про замовлення тихо перестане доходити, і ви дізнаєтесь про це від клієнта через тиждень. І погляньте в error.log наступні кілька днів, дрібні недопереносини спливають саме там.
Домен перемикайте на новий сервер після всіх перевірок (тестувати можна через файл hosts на своєму комп'ютері). TTL DNS-запису варто заздалегідь знизити до 300–600 секунд, тоді перемикання пройде за хвилини, а не за добу.
Чек-лист перенесення
- Зафіксовано версію OpenCart і версію PHP старого сервера
- Написано розробникам платних модулів щодо переоформлення ліцензій
- Зроблено архів файлів і дамп бази, копії збережено локально
- База створена з тим самим кодуванням, що й дамп
- Виправлено шляхи та доступи в
config.phpіadmin/config.php - Для OC 3.x: перевірено
DIR_STORAGEі розташування папки storage - Права: 755 на папки, 644 на файли
- PHP тієї самої версії,
max_input_vars≥ 10000 - Переписано правила ЧПУ, якщо змінився вебсервер (Apache → NGINX)
- Оновлено кеш модифікаторів, для OC 3.x очищено кеш теми
- Пройдено шлях покупця до оформлення замовлення, перевірено пошту
- Знижено TTL, домен перемкнуто, старий сервер живе ще тиждень про запас