Как перенести сайт на VPS без простоя
Переезд с виртуального хостинга на VPS пугает словом «простой». На деле грамотный перенос проходит незаметно для посетителей: сначала вы поднимаете точную копию сайта на новом сервере, тестируете её по IP, и только потом переключаете домен.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Стратегия «сначала копия, потом домен»
Главный принцип нулевого простоя — не трогать боевой домен, пока новая площадка не готова. Вы разворачиваете сайт на VPS, проверяете его по IP или временному поддомену, и лишь затем меняете DNS. Старый хостинг продолжает обслуживать посетителей всё это время.
За сутки до переезда снизьте TTL A-записи домена до 300 секунд у регистратора. Тогда после переключения кэш DNS у провайдеров обновится за 5 минут, а не за сутки.
На VPS MAATRIX (AMD EPYC + NVMe) распаковка дампа и импорт базы идут в разы быстрее, чем на shared-хостинге, — окно синхронизации сокращается до минут.
Перед стартом соберите чек-лист: доступы к старому хостингу (SSH или FTP), доступы к панели DNS у регистратора домена, IP нового VPS и список движков и версий PHP, на которых работает сайт. Чем меньше сюрпризов на этапе переключения, тем короче окно риска. Отдельно проверьте, какие внешние сервисы завязаны на текущий сервер: почта на домене, вебхуки платёжных систем, API-интеграции — их тоже нужно будет перенастроить.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для переноса сайтаШаг 1. Готовим сервер
Обновляем систему и ставим веб-стек — nginx, PHP-FPM и клиент MySQL:
apt update && apt upgrade -y
apt install -y nginx php-fpm php-mysql php-gd php-mbstring php-xml php-curl mysql-server unzip
systemctl enable --now nginx php8.2-fpm mysql
Проверяем, что nginx отвечает по IP сервера — в браузере должна открыться дефолтная страница.
Шаг 2. Переносим файлы
На старом хостинге упаковываем корень сайта в архив и забираем его на VPS через rsync или scp — так сохранятся права и не потеряются точечные файлы:
# на новом сервере
mkdir -p /var/www/site
rsync -avz -e ssh user@old-host:/home/user/public_html/ /var/www/site/
chown -R www-data:www-data /var/www/site
Если SSH на старом хостинге нет — качаем архив по FTP и распаковываем: unzip site.zip -d /var/www/site.
Шаг 3. Переносим базу данных
Снимаем дамп на старом сервере и заливаем его на новый:
# дамп на старом хостинге
mysqldump -u olduser -p olddb > dump.sql
# на VPS: создаём БД и импортируем
mysql -u root -p -e "CREATE DATABASE site CHARACTER SET utf8mb4;"
mysql -u root -p -e "CREATE USER 'site'@'localhost' IDENTIFIED BY 'СИЛЬНЫЙ_ПАРОЛЬ';"
mysql -u root -p -e "GRANT ALL ON site.* TO 'site'@'localhost'; FLUSH PRIVILEGES;"
mysql -u root -p site < dump.sql
Пропишите новые доступы к БД в конфиге движка (для WordPress — wp-config.php, поля DB_NAME/DB_USER/DB_PASSWORD).
Шаг 4. Конфиг nginx + PHP
Создаём server-блок. Для теста укажите IP или временный поддомен в server_name:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/site;
index index.php index.html;
location / { try_files $uri $uri/ /index.php?$args; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Проверьте сайт до переключения домена: временно добавьте строку IP example.com в свой локальный файл /etc/hosts — увидите новую копию, посетители пока на старом хостинге.
Шаг 5. Переключаем домен и SSL
Когда копия проверена, меняем A-запись домена на IP вашего VPS. Пока обновляется DNS, часть трафика ещё идёт на старый сервер — поэтому его не выключаем 2–3 дня.
После того как домен «смотрит» на VPS, выпускаем бесплатный SSL:
apt install -y certbot python3-certbot-nginx
certbot --nginx -d example.com -d www.example.com
Certbot сам добавит редирект на HTTPS и настроит автопродление. Готово — переезд завершён без единой секунды даунтайма для посетителей.
Частые ошибки при переносе
- Забыли про TTL — домен переключается сутками. Снижайте TTL заранее.
- Кодировка базы — импорт в latin1 вместо utf8mb4 ломает кириллицу. Создавайте БД с
utf8mb4. - Права на файлы — 500-я ошибка из-за неверного владельца. Выставляйте
www-data. - Старые ссылки в БД — для WordPress прогоните
wp search-replaceпри смене домена.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для переноса сайтаОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Сколько длится простой при правильном переносе?
Ноль. Посетители всё время обслуживаются либо старым хостингом, либо уже новым VPS — переключение домена происходит после полной проверки копии.
Обязательно ли снижать TTL заранее?
Да, за 12–24 часа. Иначе после смены A-записи часть пользователей будет попадать на старый сервер до суток, пока не истечёт кэш DNS.
Что делать со старым хостингом после переезда?
Держите его активным ещё 2–3 дня, пока DNS полностью не обновится по всему миру, затем можно отключать.