# Перенесення сайту 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/uk/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/uk/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/uk/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/uk/kb/migratsia-proverka-posle/).

---

Джерело: https://www.zevshost.net/uk/kb/migratsia-drupal/
