# Перенос сайта Drupal на новый сервер без потерь

> Перенос сайта Drupal на новый сервер: копирование файлов, экспорт базы данных и настройка settings.php.

Перенос Drupal на новый сервер требует переноса трёх частей: файлов ядра и тем, каталога `sites/default/files` с загруженным контентом и базы данных MySQL. Если пропустить хотя бы одну часть, сайт откроется с ошибками или без изображений.

## Когда нужен перенос Drupal на новый сервер

Типичные причины: старый хостинг не поддерживает PHP 8.3, который требует Drupal 10 и 11, нужен переход с shared-хостинга на VDS из-за роста нагрузки, или заканчивается срок аренды текущего сервера. Перед переносом проверьте версию Drupal командой `drush status` и зафиксируйте версию PHP, MySQL и список включённых модулей.

## Что подготовить перед переносом

На новом сервере должны быть установлены PHP 8.3 с расширениями gd, pdo\_mysql, mbstring, xml, opcache, а также MySQL 8 или MariaDB 10.6 и Composer 2. Проверьте таблицу минимальных требований:

| Компонент | Минимальная версия | Рекомендуемая |
| --- | --- | --- |
| PHP | 8.1 | 8.3 |
| MySQL / MariaDB | 5.7 / 10.3 | 8.0 / 10.6 |
| Composer | 2.0 | 2.7 |
| Drush | 11 | 12 |

Создайте на новом сервере пустую базу данных и пользователя с полными правами на неё — это понадобится на этапе импорта дампа.

## Как перенести файлы сайта

Файлы переносите через rsync — он сохраняет права доступа и переносит только изменения при повторном запуске, что удобно при финальной синхронизации перед переключением DNS. Подробный разбор rsync, SCP и FTP есть в статье [перенос файлов сайта](https://www.zevshost.net/ru/kb/migratsia-failov-rsync-scp/).

```
rsync -avz --progress -e "ssh -p 22" /var/www/drupal/ user@newserver:/var/www/drupal/
```

После копирования проверьте права: каталог `sites/default/files` должен принадлежать пользователю веб-сервера и иметь права 755 на директории и 644 на файлы. Файл `sites/default/settings.php` временно сделайте доступным для записи командой `chmod 644 sites/default/settings.php`, чтобы отредактировать параметры подключения к базе.

## Как экспортировать и импортировать базу данных

Экспорт делайте через drush — он корректно обрабатывает кеш-таблицы Drupal и не переносит временный мусор:

```
drush sql-dump --result-file=../drupal_backup.sql --gzip
```

На новом сервере создайте базу и импортируйте дамп:

```
mysql -u drupal_user -p drupal_db < drupal_backup.sql
```

Если дамп сжат, сначала распакуйте его: `gunzip drupal_backup.sql.gz`. Общие принципы переноса MySQL, включая большие базы и репликацию, описаны в статье [перенос базы данных MySQL](https://www.zevshost.net/ru/kb/perenesti-bazu-dannykh/).

## Настройка settings.php после переноса

В файле `sites/default/settings.php` обновите массив `$databases`: имя базы, пользователя, пароль и хост. Также проверьте параметр `$settings['trusted_host_patterns']` — если он ограничен старым доменом, Drupal вернёт ошибку 500 при первом открытии сайта на новом сервере.

```
$databases['default']['default'] = [
  'database' => 'drupal_db',
  'username' => 'drupal_user',
  'password' => 'новый_пароль',
  'host' => 'localhost',
  'driver' => 'mysql',
];
```

После правки восстановите права: `chmod 444 sites/default/settings.php`. Затем очистите кеш и импортируйте синхронизированную конфигурацию:

```
drush cr
drush config:import -y
```

## Как проверить сайт и переключить DNS без простоя

Перед переключением домена откройте сайт на новом сервере по IP-адресу с подменой хоста в файле `/etc/hosts` локальной машины — так вы проверите работу без риска для действующего сайта. Убедитесь, что открывается главная страница, работает вход в админку `/user/login` и корректно отдаются изображения из `sites/default/files`.

Когда тест пройден, уменьшите TTL у A-записи домена заранее до 300 секунд, а после переключения проверьте распространение через `dig +short example.com` с нескольких DNS-серверов. Подробная схема безопасного переключения без простоя — в статье [смена хостинга без простоя](https://www.zevshost.net/ru/kb/migratsia-dns-bez-prostoya/).

## Чек-лист миграции Drupal

- Версии PHP, MySQL и модулей совпадают с требованиями Drupal.
- Каталог sites/default/files скопирован полностью, права 755/644.
- Дамп базы импортирован без ошибок, таблицы на месте.
- Массив $databases и trusted\_host\_patterns в settings.php обновлены.
- Команды drush cr и config:import выполнены без предупреждений.
- Сайт проверен по IP перед переключением DNS.

Финальную проверку после переключения домена проведите по общему чек-листу из статьи [чеклист проверки сайта после миграции](https://www.zevshost.net/ru/kb/migratsia-proverka-posle/).

---

Источник: https://www.zevshost.net/ru/kb/migratsia-drupal/
