Главное при переезде — сначала полностью поднять сайт на новом сервере и проверить его, а уже потом переключать DNS. Старый хостинг не отключайте, пока не убедитесь, что трафик пошёл на новый.
План
- 01За сутки до переезда снизьте TTL A-записей домена до 300 секунд.
- 02Установите на новом сервере то же окружение: веб-сервер, версию PHP, Node.js или Python, СУБД.
- 03Скопируйте файлы и базу данных.
- 04Проверьте сайт на новом сервере через файл hosts.
- 05Переведите сайт на старом хостинге в режим обслуживания и сделайте финальную синхронизацию.
- 06Смените A-запись на новый IP и выпустите сертификат.
- 07Через несколько дней верните обычный TTL и отключите старый хостинг.
Копирование файлов
rsync копирует только изменения, поэтому повторный запуск перед переключением пройдёт быстро. Выполняйте на новом сервере, если на старом есть доступ по SSH:
$ rsync -avz --progress user@old.example.net:/var/www/example.com/ /var/www/example.com/Слэш в конце исходного пути важен: копируется содержимое каталога, а не сам каталог. Если на старом хостинге только FTP или панель управления, скачайте архив сайта и загрузите его по SFTP.
Перенос базы данных
$ mysqldump --single-transaction --routines --triggers -u USER -p DBNAME | gzip > db.sql.gz$ scp user@old.example.net:db.sql.gz .$ gunzip -c db.sql.gz | mariadb -u USER -p DBNAME$ pg_dump -Fc -U USER DBNAME > db.dump$ pg_restore --no-owner -U USER -d DBNAME db.dumpПроверка до переключения DNS
Добавьте строку в файл hosts на своём компьютере — браузер будет открывать домен с нового сервера, пока для всех остальных он работает по-старому. В macOS и Linux это /etc/hosts, в Windows — C:\Windows\System32\drivers\etc\hosts (Блокнот от имени администратора).
203.0.113.10 example.com www.example.comСертификата на новом сервере ещё нет — проверяйте по HTTP или примите предупреждение браузера. После проверки удалите строку из hosts.
Переключение
$ # финальная синхронизация после заморозки старого сайта$ rsync -avz --delete user@old.example.net:/var/www/example.com/ /var/www/example.com/$ # после смены A-записи$ dig @1.1.1.1 +short example.com$ certbot --nginx -d example.com -d www.example.comЧастые ошибки
- Забыли перенести задачи cron и фоновые процессы — сайт работает, но письма и отчёты не формируются.
- Кодировка базы изменилась при импорте — используйте utf8mb4 и для базы, и для дампа.
- Старый хостинг отключили в день переезда: посетители с закэшированным DNS видели ошибку.
- Почта домена была на старом хостинге — перенесите MX-записи отдельно, до отключения.