Коротка відповідь
Простій береться не з техніки, а з порядку дій: людина перемикає домен першим, а заливати файли починає після цього - і сайт лежить рівно стільки, скільки триває заливка. Порядок, який працює на будь-якій CMS - WordPress, OpenCart, Joomla, PrestaShop, Drupal:
- За добу знизити TTL DNS-записів до 300 секунд.
- Оформити тариф, отримати доступи.
- Скопіювати файли архівом, вивантажити базу MySQL.
- Розгорнути копію на новому сервері, виправити конфіг CMS.
- Перевірити її через файл hosts - до будь-яких змін у DNS.
- Зробити свіжий дамп бази у вікно заморозки і перемкнути DNS.
- Тримати старий хостинг оплаченим ще два тижні.
Самому це робити не обов'язково: переношу сайти сам, безкоштовно і в неробочі години - напишіть у підтримку. Звичайний сайт займає від 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 хв роботи + очікування |
| Пошта на домені | скриньки на старому сервері | Створити заново, листи - по IMAP | 20-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 грн/міс |
| Ядра CPU | 1 | 2 | 3 |
| RAM | 2 GB | 3 GB | 4 GB |
| NVMe-простір | 10 GB | 20 GB | 30 GB |
| Сайтів | 1 | 3 | 5 |
| Баз MySQL | 5 | 10 | 20 |
| Поштових скриньок | 15 | 25 | 50 |
| Кому під переїзд | візитка, лендінг, один сайт | блог або 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 | Файл із доступами до бази | Що ще править |
|---|---|---|
| WordPress | wp-config.php | нічого, якщо домен не змінюється |
| OpenCart 3.x | config.php і admin/config.php | абсолютні шляхи DIR_* у обох файлах |
| OpenCart 4.x | config.php і admin/config.php | DIR_STORAGE - тека storage поза public_html |
| Joomla | configuration.php | $log_path і $tmp_path - теж абсолютні шляхи |
| PrestaShop 1.7 / 8 | app/config/parameters.php | таблиця ps_shop_url, якщо міняється домен |
| Drupal | sites/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 хвилин:
- Увімкніть на старому сайті режим обслуговування (в OpenCart - Налаштування → Сервер, у WordPress - плагін). Заглушка має віддавати код 503 із заголовком Retry-After, а не 200: для пошукових систем 503 означає «тимчасові роботи», а 200 - «сторінка тепер така».
- Зробіть свіжий експорт бази.
- У новій базі видаліть усі таблиці (phpMyAdmin: виділити всі → Видалити) і залийте свіжий дамп. Імпорт поверх старого дасть дублі й конфлікти ID.
- Перемкніть 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. Тестовий лист із форми - обов'язково.
- Сайт «схуд» на пів гігабайта. Архів обірвався на таймауті: порівняйте розмір тек на обох серверах.
- Переїзд разом із редизайном. Щось ламається - і незрозуміло, винен сервер чи нова тема.
Чек-лист переїзду без простою
- TTL знижено до 300 секунд за добу до робіт, скриншот DNS-зони збережено.
- Тариф активовано заздалегідь, версія PHP виставлена така сама, як на старому сервері.
- Файли залито архівом,
.htaccessна місці, права 644/755. - База імпортована, конфіг CMS виправлено з префіксом акаунта.
- Копію перевірено через hosts: головна, внутрішні, адмінка, кошик, форми.
- Поштові скриньки створено до зміни NS, листи перенесено по IMAP.
- Свіжий дамп бази залито у вікно заморозки, старі таблиці попередньо видалено.
- DNS перемкнено, рядки з hosts прибрано.
- SSL випущено, Force HTTPS увімкнено, cron-завдання відтворено.
- IP оновлено в білих списках платіжок і зовнішніх API.
- Старий хостинг не вимкнено ще два тижні, 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: перенесення безкоштовне, роблю сам, за потреби вночі, і повертаю вже працюючий сайт із перевіреною поштою.