Joomla — одна з найпопулярніших CMS, і її перенесення має свою специфіку. Найнадійніший спосіб — використати розширення Akeeba Backup, яке створює повний пакет для відновлення одним кліком.
Метод 1: Akeeba Backup (рекомендується)
Створення бекапу
- Встановіть Akeeba Backup із Joomla Extension Directory
- У панелі Joomla: Components → Akeeba Backup → Backup Now
- Завантажте створений
.jpaархів таkickstart.php
Відновлення на новому хостингу
# Завантажити через FTP на новий хостинг:
# - kickstart.php
# - backup.jpa
# Відкрити в браузері:
https://new-server/kickstart.php
Kickstart автоматично розпакує архів, відновить БД і налаштує configuration.php.
Метод 2: Ручне перенесення
Крок 1: Бекап файлів і БД
># Архівувати файли Joomla
tar -czf joomla-files.tar.gz /var/www/example.com/
# Експортувати БД
mysqldump -u joomlauser -p joomladb > joomla-backup.sql
Крок 2: Перенесення на новий сервер
>rsync -avz /var/www/example.com/ root@new-server:/var/www/example.com/
scp joomla-backup.sql root@new-server:/tmp/
# На новому сервері
mysql -u newuser -p newdb < /tmp/joomla-backup.sql
Крок 3: Оновлення configuration.php
># /var/www/example.com/configuration.php
public $host = 'localhost'; // Хост БД
public $db = 'newdb'; // Ім'я нової БД
public $user = 'newuser'; // Користувач нової БД
public $password = 'NewDBPass'; // Пароль нової БД
public $live_site = ''; // Залишити порожнім
public $log_path = '/var/www/example.com/administrator/logs';
public $tmp_path = '/var/www/example.com/tmp';
Оновлення URL у базі даних
># Якщо новий домен відрізняється від старого
# У phpMyAdmin виконати SQL:
UPDATE jos_domains SET domain = 'new-domain.com'
WHERE domain = 'old-domain.com';
# Або через Joomla: System → Global Configuration → Site URL
Чеклист після перенесення Joomla
- Увійти в /administrator — переконатися, що панель працює
- Перевірити головну сторінку та кілька категорій
- Перевірити зображення (media manager)
- Протестувати форми зворотного зв'язку
- Очистити кеш: System → Clear Cache
- Перевірити розширення на сумісність з версією PHP
.htaccess — Joomla використовує mod_rewrite для SEF URL. На Nginx потрібен аналогічний try_files у конфігу. Увімкніть SEF URLs у Joomla: System → Site → SEO Settings.
>find /var/www/example.com -type d -exec chmod 755 {} \;
find /var/www/example.com -type f -exec chmod 644 {} \;
chmod 640 configuration.php
Типові помилки при перенесенні Joomla
| Повідомлення | Причина |
|---|---|
| Kickstart: SQL error... Table already exists | Відновлення Akeeba запускали на базі, де вже залишилися таблиці від попередньої невдалої спроби — базу потрібно очистити перед повторним запуском |
| JFTP::write: Unable to write file (в адмінці) | Власник файлів після rsync або scp не збігається з користувачем PHP-FPM на новому сервері — часто файли залишаються від root замість www-data |
| Error 500 — Unable to load configuration file | configuration.php не скопіювався взагалі або втратив права на читання — FTP-клієнт іноді змінює права за замовчуванням при завантаженні |
| Білий екран після зміни домену | Старий домен закешований у таблиці #__extensions або в налаштуваннях SEF-компонента; звичайного редагування configuration.php недостатньо, потрібен точковий SQL-запит |
| Save failed with error: 3 при збереженні статті | Не вистачає прав на запис у каталог tmp, або невірно вказано tmp_path у configuration.php після перенесення на новий шлях |
Коли ручне перенесення Joomla не підходить
- Сайт великий, з десятками гігабайтів медіафайлів — ручні tar і rsync надійніші за Akeeba, яка на shared-хостингу впирається в ліміт памʼяті PHP при упаковці великого архіву
- Немає доступу по SSH, лише FTP і панель хостингу — тоді єдиний практичний варіант це Akeeba Backup з kickstart.php, ручний метод вимагає консолі
- Версія Joomla нижче 3.x із застарілими розширеннями — сучасні інструменти міграції частину з них не підтримують, перенесення роблять вручну з ручною перевіркою сумісності PHP
- Потрібно перенести лише частину контенту, наприклад одну категорію, а не весь сайт — і повний бекап Akeeba, і ручний tar переносять усе цілком, для часткового перенесення потрібен експорт через Joomla API або окреме розширення
Перевірка результату
Після будь-якого з двох методів звірте не лише зовнішній вигляд сайту, а й дані на рівні бази — загальний чек-лист після міграції розібрано у статті про перевірку після перенесення, а тонкощі самого перенесення бази — у статті про перенесення бази даних.
# Звірити кількість таблиць у старій і новій базі
mysql -u newuser -p -e "SHOW TABLES FROM newdb;" | wc -l
# Перевірити, що власник файлів відповідає користувачу веб-сервера
stat -c "%U:%G" /var/www/example.com/configuration.php
Часті питання
Чи потрібно зупиняти старий сайт на час перенесення, щоб дані не розійшлися?
Так, на час остаточного перенесення бази даних і файлів старий сайт краще тимчасово закрити для відвідувачів або принаймні вимкнути форми і редагування контенту — інакше нові записи, створені після експорту бази, не потраплять до перенесеної копії. Коротке вікно простою надійніше, ніж ризик втратити частину контенту через розсинхронізацію двох версій сайту.
Що робити, якщо після перенесення частина зображень не відображається, хоча файли на місці?
Найчастіше причина — неправильні шляхи до файлів медіа в базі даних, або самі файли скопіювалися не повністю під час перенесення через FTP з обривом з'єднання на великих архівах. Варто звірити структуру каталогу images на старому і новому сервері та перевірити, що посилання в базі вказують на реальні шляхи, а не на старий домен чи неіснуючу папку.
Чи можна перенести лише базу даних Joomla, залишивши файли на старому сервері?
Перенести окремо лише базу даних технічно можливо, але сайт не запрацює без файлів шаблону, розширень і завантажених медіа — Joomla зберігає частину налаштувань у файлах, а частину в таблицях бази, і без обох компонентів конфігурація буде неповною. На практиці завжди переносять обидва компоненти разом, навіть якщо фізично їх копіюють різними способами.
Як переконатися, що перенесений сайт не індексується пошуковиками як дублікат старого домену?
Поки перенесена копія доступна за тимчасовою адресою чи тестовим піддоменом, варто закрити її від індексації через файл robots.txt або метатег noindex, інакше пошуковик може визнати її дублем основного сайту. Після повного перемикання DNS і перевірки роботи сайту на новому сервері тимчасові обмеження на індексацію знімають.