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 и проверки работы сайта на новом сервере временные ограничения на индексацию снимаются.