Перейти к содержимому

Перенос сайта на VPS: пошаговое руководство

Обновлено 5 мин чтенияКоманда DNSPeek

Чтобы перенести сайт на VPS, сначала подготовьте сервер: обновления, SSH-ключи, файрвол и тот же веб-стек, на котором сайт работает сегодня. Скопируйте файлы и базу данных, настройте виртуальный хост для своего домена и проверьте сайт на IP VPS под настоящим доменом до смены DNS. Переключите с коротким TTL, выпустите сертификат, а почту держите у отдельного провайдера, а не на VPS.

Что меняется, когда вы уходите с виртуального хостинга

На виртуальном хостинге провайдер отвечает за веб-сервер, PHP, базу данных, почту, резервные копии и обновления безопасности. На неуправляемом VPS всё это теперь ваше. Преимущество — контроль и предсказуемые ресурсы; цена — ничего не настроено, пока вы это не настроите. Планируйте переезд как два проекта: сначала соберите сервер, затем перенесите на него сайт.

Виртуальный хостинг в сравнении с неуправляемым VPS
ЗадачаВиртуальный хостингНеуправляемый VPS
Обновления безопасностиХостингВы (или автоматические обновления)
Веб-сервер, PHP, база данныхПредустановленыВы устанавливаете и настраиваете их
Хостинг почтыОбычно входитЛучше держать у отдельного провайдера
Резервные копииЧасто входятВы настраиваете их, желательно вне сервера
СертификатыАвтоматическиCertbot или похожий ACME-клиент

Подготовьте сервер

Начните с поддерживаемого выпуска Linux. Команды ниже приведены для Ubuntu или Debian; для других дистрибутивов адаптируйте названия пакетов.

Терминал (на VPS)
# Updates and a non-root user with sudo
apt update && apt upgrade -y
adduser deploy && usermod -aG sudo deploy

# Firewall: SSH, HTTP and HTTPS only
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

# Automatic security updates
apt install -y unattended-upgrades

Войдите по SSH-ключу, а затем отключите вход по паролю для SSH. Установите стек, нужный сайту, например nginx или Apache, PHP-FPM той же версии и с теми же расширениями, что и на старом хостинге, и MySQL или MariaDB. Одинаковая версия PHP убережёт от сюрпризов; обновите её позже отдельным шагом.

Перенос сайта шаг за шагом

  1. Шаг 1: Понизьте TTL

    За день до переключения установите для A-записей TTL 300 секунд. Текущее значение проверьте с помощью проверки TTL.

  2. Шаг 2: Защитите VPS и установите стек

    Примените обновления, создайте пользователя с sudo, включите SSH-ключи и файрвол, а затем установите нужные сайту версии веб-сервера, PHP и базы данных.

  3. Шаг 3: Скопируйте файлы

    Скопируйте сайт командой rsync -avz через SSH или скачайте архив со старого хостинга и загрузите его на VPS. Назначьте владельцем пользователя веб-сервера.

  4. Шаг 4: Импортируйте базу данных

    Экспортируйте её на старом хостинге, создайте базу данных и пользователя на VPS, импортируйте дамп и обновите конфигурацию приложения новыми учётными данными.

  5. Шаг 5: Настройте виртуальный хост

    Добавьте блок server для домена и www, перепишите правила .htaccess и перезагрузите веб-сервер.

  6. Шаг 6: Проверьте на IP VPS до смены DNS

    Создайте ссылку-превью с доменом и IP VPS и, пока не установлен сертификат, используйте режим «Только HTTP» или «Пропускать проверку». Пройдитесь по сайту, отправьте формы, войдите в аккаунт.

  7. Шаг 7: Запустите QA-отчёт

    Просканируйте превью с помощью QA-отчёта, чтобы найти стандартные страницы веб-сервера, ошибки 502 от PHP-FPM, отсутствующие правила rewrite и ошибки PHP.

  8. Шаг 8: Переключите DNS и выпустите сертификат

    Выполните финальную синхронизацию файлов и базы данных, направьте A-записи на VPS, затем выпустите сертификат и следите за распространением с помощью проверки распространения DNS.

Настройте виртуальный хост

Веб-сервер выбирает сайт по доменному имени в запросе. Настройте блок server сразу для example.com и www.example.com:

/etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com/public;
    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;
    }
}

Если на старом хостинге сайт полагался на правила .htaccess, перепишите их для nginx: человекопонятные URL, редиректы и ограничения доступа сами не переносятся. Измените путь к сокету PHP-FPM в соответствии с установленной версией. Проверяйте конфигурацию командой nginx -t перед каждой перезагрузкой и проверьте настройки пула PHP-FPM: стандартное число рабочих процессов невелико, и нагруженный сайт, которому не хватает процессов, отвечает ошибками 502 или 504.

HTTPS до переключения

Обычная HTTP-проверка Let’s Encrypt работает только тогда, когда домен уже указывает на VPS. Есть три варианта: выпустить сертификат сразу после переключения (несколько минут на обычном HTTP или с самоподписанным сертификатом), воспользоваться DNS-проверкой, которая работает до переключения, если у вашего DNS-провайдера есть API, или скопировать существующий сертификат со старого хостинга.

Для проверки новый VPS без какого-либо сертификата работает с превью DNSPeek в режиме Только HTTP: посетители всё равно открывают превью по HTTPS, а DNSPeek общается с сервером по обычному HTTP. Сначала настройте приложение доверять HTTPS прокси, иначе редирект на принудительный HTTPS зациклится. Настройки PHP и nginx приведены в документации: Сервер без SSL.

Почта: не переносите её на VPS

Если старый виртуальный хостинг обслуживал и вашу почту, переезд — хороший повод их разделить. Качественно поддерживать почтовый сервер (фильтрация спама, репутация, DKIM, списки блокировки) — отдельная работа, а многие облачные провайдеры по умолчанию блокируют исходящий порт 25. Перенесите ящики к отдельному почтовому провайдеру, обновите MX, SPF, DKIM и DMARC, а транзакционные письма сайта отправляйте через SMTP-сервис с аутентификацией. Проверьте записи с помощью проверки MX-записей, проверки SPF-записи и проверки DMARC-записи.

После переключения

  • Выпустите или проверьте сертификат с помощью проверки SSL.
  • Настройте резервные копии, которые хранятся вне сервера: дампы базы данных и файлы — в объектное хранилище или на другую машину, и проверьте восстановление.
  • Добавьте базовый мониторинг: проверки доступности, места на диске и срока действия сертификата.
  • Воссоздайте cron-задачи со старого хостинга.
  • Пройдите чек-лист после переезда.

Чек-лист переноса на VPS

VPS

  • Обновления применены, автоматические обновления включены
  • Пользователь с sudo вместо root, SSH-ключи, вход по паролю отключён
  • Файрвол разрешает только SSH, HTTP и HTTPS
  • Та же версия PHP и расширения, что и на старом хостинге
  • Файлы скопированы, владелец и права доступа установлены
  • База данных импортирована, конфигурация приложения обновлена
  • Виртуальный хост для домена и www; правила rewrite переписаны
  • Сайт проверен на IP VPS с помощью ссылки-превью
  • QA-отчёт без критичных замечаний
  • Почта перенесена к отдельному провайдеру; MX, SPF, DKIM, DMARC настроены
  • Финальная синхронизация, DNS переключён, сертификат выпущен
  • Резервные копии вне сервера и проверенное восстановление
  • Мониторинг доступности и диска настроен

Частые вопросы

Быстрее ли VPS, чем виртуальный хостинг?

Часто да, потому что процессор и память зарезервированы для вас, а не разделены со многими другими сайтами. Но скорость всё равно зависит от настройки: параметры PHP-FPM, кеширование и база данных важны не меньше, чем железо.

Можно ли получить SSL-сертификат на VPS до смены DNS?

Да, через DNS-проверку, если ваш DNS-провайдер её поддерживает, или скопировав существующий сертификат со старого хостинга. Стандартная HTTP-проверка работает только тогда, когда домен уже указывает на VPS.

Как проверить сайт на VPS до того, как направить на него домен?

Запрашивайте сайт с IP VPS под его настоящим доменом. Ссылка-превью делает это в любом браузере, и ею можно поделиться; запись в файле hosts делает это на вашем компьютере. Если открыть просто IP, обычно показывается стандартная страница веб-сервера.

Стоит ли размещать почту на своём VPS?

Обычно нет. Почтовые серверы требуют постоянного внимания к фильтрации спама, репутации и спискам блокировки, а многие облачные провайдеры блокируют исходящий порт 25. Отдельный почтовый провайдер плюс SMTP-сервис для сайта — проще и надёжнее.

Какая самая частая ошибка при переезде на VPS?

Забыть о работе, которую старый хостинг делал незаметно: резервные копии, обновления безопасности, почта и cron-задачи. Перед переездом составьте список всего, что предоставлял старый хостинг, и решите, кто будет отвечать за каждую часть на VPS.

Moving a site? Use the migration checklist

Every step from lowering the TTL to checking email after the switch, on one printable page. With a free account you keep your preview links in one place and run a QA report of the site on the new server.

Проверьте новый сервер до переключения

DNSPeek даёт вам одну HTTPS-ссылку, которая показывает ваш сайт с нового сервера, пока DNS ещё указывает на старый. Открывайте её на любом устройстве, делитесь ею с командой или клиентом и запускайте QA-сканирование по той же ссылке.

Создать бесплатную ссылку-превью