Перенос сайта на другой хостинг

Выбор нового хостинга

Переезд — это копия, проверка и переключение DNS, а не гонка. Начните с тарифа, который выдержит сайт в текущем виде: та же или более новая версия PHP, те же расширения, достаточно места на диске с запасом под резервные копии и доступ по SSH. Без SSH остаются файловый менеджер панели и FTP: медленнее и легче сломать переезд на половине. Инструменты, которые понадобятся: wget для проверки состояния страниц на новом сервере.

Что сравнить до оплаты: цена за год, дисковая квота, число баз данных, доступные версии PHP и можно ли переключать их для сайта, SSH, cron, резервные копии и входит ли почта. Как выбирать: Какой хостинг выбрать и, если нужен собственный сервер, VPS хостинг.

Сначала измерьте то, что переносите. Из папки с сайтом:

find . -type f | wc -l

du -sh .

Запишите оба числа: это база для сравнения после копирования. Меньшее число файлов на новом сервере означает, что часть файлов не скопировалась, и обычно причина — скрытая папка или права доступа.

Перенос файлов

Способов три, и их можно сочетать. Файловый менеджер панели — запасной вариант: упаковать сайт в один архив, загрузить, распаковать на сервере. Архив сохраняет права, пустые папки и скрытые файлы, а одна загрузка намного быстрее тысячи мелких.

tar czf site-backup.tar.gz site

ls -lh site-backup.tar.gz

-rw-rw-r-- 1 user user 274 Nov 6 18:45 site-backup.tar.gz

tar сам ничего не печатает; строку выше выводит ls, и она показывает, что архив есть и сколько он весит. Загляните внутрь до загрузки:

tar tzf site-backup.tar.gz

site/
site/index.php
site/web/
site/web/page.html
site/.htaccess

Имя и размер будут вашими; важен один файл, а список показывает, что скрытый .htaccess внутри. Загрузите архив через панель и распакуйте в новом корне сайта:

tar xzf site-backup.tar.gz --strip-components=1

--strip-components=1 отбрасывает верхнюю папку архива, поэтому site/index.php оказывается index.php в текущей папке. Без этого ключа сайт ложится на уровень глубже и главная страница отдаёт 404. Подробнее об архивах: Архивы в Linux.

При доступе по SSH копируйте через SFTP или SCP с ключом SSH: создать ключ ed25519, положить его открытую половину в панель, затем загружать. В интерактивной сессии строки с sftp> — это то, что вы вводите:

sftp user@new-host.example

sftp> cd /home/user/site/public_html

sftp> put -r web

sftp> put index.php

SSH даёт ещё и rsync — самый безопасный способ синхронизировать папку: он передаёт только отличия и умеет сначала показать план. Здесь между двумя локальными папками, чтобы можно было повторить:

rsync -avn site/ public_html/

sending incremental file list
.htaccess
index.php
web/
web/page.html

sent 171 bytes received 29 bytes 400.00 bytes/sec
total size is 48 speedup is 0.24 (DRY RUN)

Та же команда на новый сервер:

rsync -avn -e ssh site/ user@new-host.example:/home/user/site/public_html/

-n — это пробный прогон: прочитайте список, затем повторите команду без -n. Замыкающая косая черта в источнике важна: site/ копирует содержимое, site создаёт папку site внутри приёмника. Скрытые файлы вроде .htaccess переносятся обоими инструментами; проверьте их после копирования:

ls -la /home/user/site/public_html

Не забудьте то, чего нет в архиве: загруженные файлы, логи, кеши и всё, что сайт пишет во время работы. Этим папкам нужна отдельная копия и правильные права: папки 755, файлы 644, и 775 только там, где PHP должен писать.

Перенос базы данных

У статического сайта базы нет — этот раздел можно пропустить. У CMS, магазина или форума она есть. Выгрузите базу на старом сервере, создайте пустую базу и пользователя с той же кодировкой на новом, затем загрузите дамп.

mysqldump --single-transaction --routines --triggers -u old_user -p old_db > old_db.sql

mysql -u new_user -p new_db < old_db.sql

MySQL спросит пароль после каждой команды, поэтому пароль не попадает в историю команд. Без SSH то же самое делает phpMyAdmin: выбрать базу, Экспорт, формат SQL, сохранить файл; на новом сервере — Импорт файла в новую базу.

После импорта настройки CMS должны указывать на новую базу (имя, пользователь, пароль, хост) и на новый адрес сайта. У WordPress адрес хранится в базе, поэтому менять его нужно инструментом, а не текстовым редактором:

wp search-replace 'https://old.example.com' 'https://www.example.com' --dry-run

Повторите без --dry-run, когда пробный прогон покажет только ожидаемые таблицы. Слепая замена в SQL-файле ломает сериализованные значения.

Настройки и пути

Файлы, в которых остался старый сервер, — обычная причина белой страницы или неверных ссылок после переезда. Проверьте:

Меняйте пути в конфигурации, а не в содержимом страниц. Если старый домен встречается в тексте страницы, исправьте это в CMS или поиском по базе, а старый домен оставьте рабочим с редиректом на время.

Проверка до смены DNS

Домен всё ещё указывает на старый сервер, поэтому новый проверяют по адресу. Проще всего через файл hosts на своей машине: он подменяет DNS только для этого имени. В Linux и macOS это /etc/hosts, в Windows — C:\Windows\System32\drivers\etc\hosts, и редактор нужно запускать от администратора. Добавьте строку:

203.0.113.10 www.example.com example.com

Как устроен файл: etc/hosts. Теперь браузер на этой машине видит новый сервер, а все остальные — ещё старый. Запросите строку состояния важных страниц:

wget -qS --spider https://www.example.com/ 2>&1 | head -4

HTTP/1.1 200 OK
Date: Fri, 06 Nov 2026 16:22:03 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked

Так выглядит здоровый ответ; у вас будет своя дата запроса. Проверьте главную, внутреннюю страницу, страницу с обязательным редиректом и несуществующую (должен вернуться документ 404 сайта, а не стандартная страница хостинга). 500 обычно означает путь или права, 403 — нет индексного файла или папка закрыта, а цикл редиректов — правило HTTPS или www срабатывает дважды.

Уберите строку из hosts, когда проверка закончена, иначе вы будете смотреть на новый сервер и удивляться, почему старый не меняется.

Смена DNS

Записи DNS кешируются на время TTL, поэтому сначала снизьте TTL: за сутки до переключения поставьте 300 секунд для записей A (и AAAA) домена и www. Затем смените адрес на новый сервер.

nslookup www.example.com

Server: 192.0.2.1
Address: 192.0.2.1:53

Non-authoritative answer:
Name: www.example.com
Address: <new-server-ip>

Блок показывает, как выглядит ответ: две строки сверху — это ответивший DNS-сервер, а в последней строке должен быть адрес нового сервера вместо <new-server-ip>. Разные резолверы кешируют разное время, поэтому проверьте и из другой сети, например с телефона по мобильному интернету. Старый сервер держите включённым, пока не пройдут проверки из последнего раздела: часть посетителей ещё несколько часов будет попадать на него.

Сертификат и редиректы

Сертификат на новом сервере можно выпустить только после того, как имя указывает на него: бесплатные автоматические сертификаты проверяют домен по HTTP. Поэтому порядок такой: сначала DNS, потом сертификат, потом редиректы. Когда сертификат стоит, все адреса должны приходить к одному каноническому виду за один переход: http на https, а www на домен без www — или наоборот.

Проверяйте каждую форму отдельным запросом и смотрите первую строку состояния: правильный ответ — один 301 на конечный адрес, а два перехода или остановка на http — нет. Панели часто добавляют свой редирект: не держите два правила для одного случая.

Почта на домене

Почта и сайт — разные службы, которые связывает только имя домена. Смена веб-сервера не переносит почтовые ящики. Если на домене есть почта, записи MX должны по-прежнему указывать на почтового провайдера, а SPF, DKIM и DMARC — оставаться корректными, иначе письма перестанут приходить или начнут попадать в спам.

Меняйте запись MX только тогда, когда переезжают сами ящики, и делайте это отдельной небольшой задачей: создать ящики на новой стороне, перенести старую почту, проверить отправку и приём и лишь потом переключить запись. После переезда отправьте тестовое письмо на ящик на домене: эта проверка ловит сломанный MX.

Проверки и закрытие старого хостинга

Старый аккаунт держите одну-две недели. В это время сравнивайте два сервера и наблюдайте за новым:

ПроверкаКак
Все страницы отвечаютоткрыть по одной из каждого раздела; все отдают 200
Редиректы за один переходwget -qS --spider для нескольких старых адресов
Нет новых 404лог доступа нового сервера или отчёт 404 хостинга
Нет ошибок PHPлог ошибок нового сервера
HTTPS и wwwобе формы открываются на каноническом адресе
Продление сертификатав панели видна дата автоматического продления
Почтатестовое письмо доходит до ящика на домене
Резервные копииновый хостинг их делает, и одно восстановление проверено

Когда всё это проходит, снимите последнюю копию старых логов и того, что было только там, и отменяйте старый тариф. Если дата продления близко, отменяйте после неё: большинство провайдеров не возвращает деньги за часть периода.

Короткая версия: снизить TTL, скопировать файлы и базу, поправить настройки, проверить через hosts, переключить DNS, выпустить сертификат, проверить редиректы и почту, подождать неделю, закрыть старый аккаунт. Доменная часть переезда — регистратор и код переноса — в статье Перенос сайта: домен и хостинг.

Автор статьи: Arthur Isaev