Коротка відповідь

Простій береться не з техніки, а з порядку дій: людина перемикає домен першим, а заливати файли починає після цього - і сайт лежить рівно стільки, скільки триває заливка. Порядок, який працює на будь-якій CMS - WordPress, OpenCart, Joomla, PrestaShop, Drupal:

  1. За добу знизити TTL DNS-записів до 300 секунд.
  2. Оформити тариф, отримати доступи.
  3. Скопіювати файли архівом, вивантажити базу MySQL.
  4. Розгорнути копію на новому сервері, виправити конфіг CMS.
  5. Перевірити її через файл hosts - до будь-яких змін у DNS.
  6. Зробити свіжий дамп бази у вікно заморозки і перемкнути DNS.
  7. Тримати старий хостинг оплаченим ще два тижні.

Самому це робити не обов'язково: переношу сайти сам, безкоштовно і в неробочі години - напишіть у підтримку. Звичайний сайт займає від 30 хвилин до 2 годин. Нижче - увесь процес по кроках, якщо хочете розуміти, що відбувається.

Звідки береться простій

За роки адміністрування я бачив рівно чотири причини, чому сайт зникає з ефіру під час переїзду, і всі чотири - помилки планування, а не збої заліза.

  • DNS перемкнули першим. Домен уже вказує на порожню теку, а файли тільки заливаються: сайт лежить не годину, а півдоби.
  • Старий хостинг вимкнули одразу. Корпоративні резолвери тримають стару адресу довше за TTL - частина аудиторії ще кілька днів бачить «сайт не знайдено».
  • Копію не перевірили. Забутий у архіві .htaccess помічають уже на живому домені.
  • Забули про пошту. Разом із NS переїжджає MX: сайт працює, а листи й заявки з форм зникають.

Крок 1. Інвентаризація: що саме переїжджає

«Перенести сайт» - це чотири незалежні переїзди, у кожного свій ризик і час.

ЧастинаДе лежить заразЯк переноситьсяСкільки часу
Файли сайтуpublic_html на старому хостингуАрхів .tar.gz або .zip через файловий менеджер10-40 хв
База MySQLокремо від файлів, доступ через phpMyAdminЕкспорт у .sql.gz, потім імпорт5-20 хв
Домен і DNSу реєстратора або на старих NSЗміна NS або правка A-записів15 хв роботи + очікування
Пошта на доменіскриньки на старому серверіСтворити заново, листи - по IMAP20-60 хв

Перші два рядки можна робити скільки завгодно довго: поки DNS не змінені, сайт працює на старому місці. Ризикований лише третій. Тоді ж збережіть скриншот поточної DNS-зони: A, MX, TXT (SPF, DKIM, DMARC), CNAME. Відновлювати SPF наосліп через тиждень - це день без пошти.

Крок 2. Підготовка за добу: TTL, доступи, тариф

TTL - час, який чужі DNS-сервери тримають стару адресу в кеші. У зонах DirectAdmin це 3600 секунд, у багатьох хостерів 14400. За добу до переїзду поставте всім записам домену TTL 300 секунд: розходження DNS скорочується з годин до 5-15 хвилин.

Одночасно зберіть доступи: панель або хоча б FTP і phpMyAdmin на старому хостингу, адмінку CMS, кабінет реєстратора домену. Подивіться версію PHP на старому сервері - переносити треба на неї, оновлювати вже після переїзду. Тариф оформляйте не в день робіт: оплата зараз проходить за реквізитами з підтвердженням вручну, онлайн-оплата карткою ще готується.

ПланСтартОптималБізнес
За місяць479 грн599 грн759 грн
За рік, у перерахунку142 грн/міс229 грн/міс350 грн/міс
Ядра CPU123
RAM2 GB3 GB4 GB
NVMe-простір10 GB20 GB30 GB
Сайтів135
Баз MySQL51020
Поштових скриньок152550
Кому під переїздвізитка, лендінг, один сайтблог або 2-3 сайтимагазин, корпоративний сайт

Дивіться на два числа: розмір файлів плюс база (видно в статистиці старого акаунта) і кількість сайтів. Виходить 12 GB - Старт із його 10 GB не підійде, беріть Оптимал. Піддомен теж рахується окремим сайтом: example.com і shop.example.com - це вже два. Помилитись у менший бік не критично, тариф підвищується без повторного переїзду. Усі шість планів - у таблиці тарифів, опис - на сторінці хостингу.

Крок 3. Копія файлів і бази на новому сервері

Файли

Не тягніть сайт по FTP файл за файлом: 20 000 дрібних файлів WordPress чи OpenCart ідуть годинами, і половина обривається. У файловому менеджері старого хостингу виділіть вміст public_html і натисніть Compress - архів на 500 MB перекачується за хвилини. У DirectAdmin він розпаковується кнопкою Extract, після чого перевірте права: файли 644, теки 755.

Головне - щоб у архів потрапили приховані файли з крапкою на початку. Там лежить .htaccess із правилами ЧПУ й редиректів, і саме він найчастіше «зникає» під час переїзду: головна відкривається, а внутрішні сторінки віддають 404.

База MySQL

У phpMyAdmin на старому хостингу: оберіть базу, вкладка Експорт → спосіб Звичайний → формат SQL → стиснення gzip. Файл .sql.gz виходить у 5-10 разів меншим за оригінал. На новому сервері - Account Manager → MySQL Management → Create new Database, далі phpMyAdmin → Імпорт → ваш .sql.gz, розпаковувати не треба. Бази понад 100-200 MB через браузер вивантажуються погано: експорт обривається на таймауті, імпорт впирається в ліміт. Тоді - mysqldump по SSH або пишіть мені, заллю з консолі.

Конфіг CMS

Далі - файл, через який сайт або запуститься, або віддасть «Error establishing a database connection». Врахуйте: DirectAdmin додає до імені бази й користувача префікс акаунта - ввели shop, реальне ім'я admin_shop, і в конфіг іде воно.

CMSФайл із доступами до базиЩо ще править
WordPresswp-config.phpнічого, якщо домен не змінюється
OpenCart 3.xconfig.php і admin/config.phpабсолютні шляхи DIR_* у обох файлах
OpenCart 4.xconfig.php і admin/config.phpDIR_STORAGE - тека storage поза public_html
Joomlaconfiguration.php$log_path і $tmp_path - теж абсолютні шляхи
PrestaShop 1.7 / 8app/config/parameters.phpтаблиця ps_shop_url, якщо міняється домен
Drupalsites/default/settings.php$settings['file_private_path']

Абсолютні шляхи - друга за частотою причина білого екрана. Було /home/olduser/public_html/, стало /home/newuser/domains/example.com/public_html/, і для OpenCart із Joomla це принципово: шлях зберігається текстом у конфігу. Свій точний шлях видно у верхньому рядку файлового менеджера. Для WordPress кожен крок розписаний окремо - перенести WordPress.

Крок 4. Перевірка копії через файл hosts

Це крок, який відрізняє спокійний переїзд від нервового: ви відкриваєте копію на новому сервері зі свого комп'ютера, поки для решти світу сайт працює на старому, а DNS ще ніхто не чіпав. У Windows відкрийте Блокнотом від імені адміністратора C:\Windows\System32\drivers\etc\hosts, у macOS і Linux - /etc/hosts через sudo, і додайте два рядки з IP нового сервера: 198.51.100.10 example.com і 198.51.100.10 www.example.com.

Тепер ваш браузер ходить на новий сервер, а всі інші - на старий. Пройдіться за списком: головна, дві-три внутрішні, картка товару, пошук, кошик і тестове замовлення, вхід в адмінку, завантаження картинки (перевірка прав на теку uploads), лист із форми, сторінка 404. Помилки шукайте в error.log у теці домену. Після перевірки обов'язково приберіть рядки з hosts - інакше через тиждень ви бачитимете один сайт, а клієнти зовсім інший.

Крок 5. Вікно заморозки: як не втратити замовлення

Поки ви переносили сайт, на старому могли з'явитись нові замовлення - після перемикання DNS вони залишаться в старій базі, до якої ніхто більше не зайде. Для візитки проблеми немає, контент статичний. Для магазину робиться коротке вікно заморозки, зазвичай 10-20 хвилин:

  1. Увімкніть на старому сайті режим обслуговування (в OpenCart - Налаштування → Сервер, у WordPress - плагін). Заглушка має віддавати код 503 із заголовком Retry-After, а не 200: для пошукових систем 503 означає «тимчасові роботи», а 200 - «сторінка тепер така».
  2. Зробіть свіжий експорт бази.
  3. У новій базі видаліть усі таблиці (phpMyAdmin: виділити всі → Видалити) і залийте свіжий дамп. Імпорт поверх старого дасть дублі й конфлікти ID.
  4. Перемкніть DNS і зніміть режим обслуговування.

Не намагайтесь долити в перенесену базу лише нові замовлення: у таблиць свої лічильники ID, і ручне зшивання закінчується тим, що два замовлення мають один номер.

Крок 6. Перемикання DNS і паралельна робота двох серверів

Далі - або зміна NS у реєстратора на ns1.hosturm.com і ns2.hosturm.com, або правка A-записів @ і www на IP нового сервера, якщо зона живе в Cloudflare. Різниця між способами і що буде з поштою в кожному - в окремій статті: як спрямувати домен на хостинг.

Через 15 хвилин перевірте результат командою nslookup example.com 8.8.8.8 і на whatsmydns.net, де видно, які країни вже бачать новий IP. Зі зниженим TTL більшість відвідувачів переходить за 5-15 хвилин, повне розходження - до доби.

Ключове правило кроку: старий хостинг не вимикайте ще щонайменше два тижні. Зайвий місяць оплати - найдешевша страховка у всій процедурі: поки обидва сервери віддають однаковий сайт, помилки не побачить ніхто. TTL поверніть на 3600 через добу.

Крок 7. Пошта, SSL і cron після перемикання

Пошта. Скриньки створіть до зміни NS: Email Manager → Email Accounts, ті самі адреси і паролі. Старі листи переносяться по IMAP - підключіть обидві скриньки в Thunderbird і перетягніть теки. Якщо пошта лишається у зовнішнього провайдера, пропишіть у зоні DirectAdmin старі MX, SPF, DKIM і DMARC.

SSL. Let's Encrypt перевіряє домен запитом на сервер, тому сертифікат випускається вже після перемикання DNS. Одразу зайдіть у SSL Certificates, випустіть його і увімкніть Force HTTPS - деталі в статті навіщо сайту SSL.

Cron і зовнішні сервіси. Заплановані завдання з файлами не переїжджають: розсилки, вивантаження прайсів, обмін із 1С відтворіть у Advanced Features → Cron Jobs. І окремо - білі списки IP: у платіжних шлюзів, API Нової Пошти й CRM часто прописана адреса сервера. Після переїзду вона інша - оновіть її, інакше оплата на сайті перестане проходити.

Якщо щось не працює - і чек-лист наостанок

Що ламається найчастіше

  • Білий екран. Версія PHP не та або в конфігу лишились старі шляхи. Дивіться error.log.
  • Головна працює, внутрішні - 404. У архів не потрапив .htaccess.
  • «Error establishing a database connection». В імені бази або користувача немає префікса акаунта.
  • Картинки не вантажаться в адмінці. Права на теку завантажень: 755, власник - ваш акаунт.
  • Пошта мовчить. У зоні немає MX. Тестовий лист із форми - обов'язково.
  • Сайт «схуд» на пів гігабайта. Архів обірвався на таймауті: порівняйте розмір тек на обох серверах.
  • Переїзд разом із редизайном. Щось ламається - і незрозуміло, винен сервер чи нова тема.

Чек-лист переїзду без простою

  1. TTL знижено до 300 секунд за добу до робіт, скриншот DNS-зони збережено.
  2. Тариф активовано заздалегідь, версія PHP виставлена така сама, як на старому сервері.
  3. Файли залито архівом, .htaccess на місці, права 644/755.
  4. База імпортована, конфіг CMS виправлено з префіксом акаунта.
  5. Копію перевірено через hosts: головна, внутрішні, адмінка, кошик, форми.
  6. Поштові скриньки створено до зміни NS, листи перенесено по IMAP.
  7. Свіжий дамп бази залито у вікно заморозки, старі таблиці попередньо видалено.
  8. DNS перемкнено, рядки з hosts прибрано.
  9. SSL випущено, Force HTTPS увімкнено, cron-завдання відтворено.
  10. IP оновлено в білих списках платіжок і зовнішніх API.
  11. Старий хостинг не вимкнено ще два тижні, TTL повернуто на 3600.

Підсумок

Переїзд без простою - не технічна майстерність, а дисципліна порядку: спершу повна копія, потім перевірка, і тільки останнім кроком DNS. Єдине по-справжньому вузьке місце - вікно заморозки на 10-20 хвилин, і те потрібне лише магазинам.

З мого боку всі плани для переїзду однакові: DirectAdmin із файловим менеджером і phpMyAdmin, PHP 8.3 із можливістю перемкнути версію під стару CMS, Apache 2.4, безкоштовний SSL Let's Encrypt, щоденні бекапи поза сервером, дата-центр у Франції. Доступність заявлена на рівні 99.9%, не «сто відсотків». Найдешевший план Старт - 1 ядро CPU, 2 GB RAM і 10 GB NVMe за 142 грн/міс при річній оплаті або 479 грн/міс помісячно: оформити - кілька хвилин.

А якщо часу розбиратись немає - напишіть у Telegram: перенесення безкоштовне, роблю сам, за потреби вночі, і повертаю вже працюючий сайт із перевіреною поштою.