VPSРейтинг
WordPressФевраль 2026 · 14 мин чтения

Как перенести сайт с хостинга на VPS: пошаговый гайд

Shared-хостинг удобен на старте, но рано или поздно становится тесно: лимиты по PHP-процессам, медленная БД, невозможность установить нужный софт. VPS даёт полный контроль — но нужно правильно перенести сайт, не потеряв данные и не уронив доступность. Разберём по шагам.

1. Что подготовить до переноса

Перенос сайта — плановая операция. Если сделать всё заранее, DNS-переключение занимает пару минут, а сайт недоступен не более часа (обычно меньше).

Что нужно заранее

  • • VPS с Ubuntu 22.04, доступ по SSH
  • • Доступ к панели управления хостингом (cPanel, ISPmanager, Plesk)
  • • Доступ к DNS-записям домена (у регистратора или в панели хостинга)
  • • FTP/SFTP доступ к файлам сайта
  • • Данные подключения к БД (логин, пароль, имя БД)

До смены DNS

  • • Понизьте TTL у A-записи домена до 300 с (5 минут) — за 24–48 ч до переезда
  • • Запишите все DNS-записи (MX, TXT, CNAME) — они понадобятся
  • • Убедитесь что VPS уже полностью настроен и сайт открывается по IP
  • • Сделайте финальный бэкап непосредственно перед DNS-переключением

Стратегия: сначала настраиваем VPS, потом меняем DNS

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

2. Экспорт файлов сайта

Нужно скачать все файлы сайта: PHP-скрипты, изображения, темы, плагины, загруженные пользователями файлы. Обычно это директория public_html или www.

Вариант A — через панель хостинга (проще)

В cPanel: File Manager → выделить всю папку public_html → Compress → скачать ZIP. В ISPmanager/Plesk аналогично. Архив удобно скачать одним файлом и потом распаковать на VPS.

Вариант B — через SSH на хостинге (быстрее)

Если хостинг даёт SSH — заархивируйте прямо там и передайте сразу на VPS, минуя локальный компьютер:

На хостинге: упаковать сайт в архив
# Зайти на хостинг по SSH
ssh user@shared-hosting.ru

# Архивировать public_html
cd ~
tar -czf site_backup.tar.gz public_html/

# Узнать IP VPS (понадобится для rsync)
# Проверить размер архива
ls -lh site_backup.tar.gz
Передать архив напрямую с хостинга на VPS
# Запустить с хостинга — скопировать архив на VPS
scp site_backup.tar.gz root@ВАШ_VPS_IP:/tmp/

# Или rsync (если большой архив — rsync надёжнее)
rsync -avz site_backup.tar.gz root@ВАШ_VPS_IP:/tmp/

Вариант C — через FTP

Если SSH нет, используйте FileZilla или WinSCP: скачайте файлы на локальный компьютер, затем загрузите на VPS. Для больших сайтов (сотни МБ медиафайлов) это медленнее, но работает.

Для WordPress

Самые тяжёлые папки — wp-content/uploads/ (медиафайлы) и wp-content/plugins/. Если сайт большой, плагины можно не переносить — они переустанавливаются из репозитория. Uploads — обязательно.

3. Экспорт базы данных

База данных — самая важная часть. Файлы сайта можно перекачать заново, данные — нет.

Через phpMyAdmin (в панели хостинга)

Войдите в phpMyAdmin через панель хостинга → выберите базу данных → вкладка Экспорт → метод Быстрый, формат SQL → кнопка Экспортировать. Скачается файл dbname.sql.

Для больших баз данных (более 100 МБ)

phpMyAdmin может завершиться по таймауту. Лучше использовать mysqldump через SSH или попросить хостинг-провайдера предоставить дамп напрямую.

Через SSH на хостинге

На хостинге: дамп базы данных
# Узнать данные БД из wp-config.php (для WordPress)
grep -E "DB_(NAME|USER|PASSWORD|HOST)" ~/public_html/wp-config.php

# Создать дамп
mysqldump -u DB_USER -pDB_PASSWORD DB_NAME > ~/db_backup.sql

# Проверить размер
ls -lh ~/db_backup.sql

# Упаковать (для скорости передачи)
gzip ~/db_backup.sql
Скопировать дамп на VPS
scp ~/db_backup.sql.gz root@ВАШ_VPS_IP:/tmp/

Совет: финальный бэкап перед DNS-переключением

За несколько минут до смены DNS сделайте ещё один дамп БД — именно его загружайте на VPS последним. Так вы не потеряете новые записи, комментарии и заказы, появившиеся пока вы настраивали VPS.

4. Настройка VPS: Nginx + PHP + MySQL

Установим стек для WordPress и большинства PHP-сайтов. Если ваш сайт на другой технологии — смотрите блок ниже.

Подключиться к VPS и обновить систему
ssh root@ВАШ_VPS_IP

apt update && apt upgrade -y

Nginx

Установка Nginx
apt install nginx -y
systemctl enable --now nginx

# Проверить — должен открываться в браузере по IP
curl -I http://ВАШ_VPS_IP

PHP 8.3

Установка PHP-FPM и расширений для WordPress
apt install software-properties-common -y
add-apt-repository ppa:ondrej/php -y
apt update

apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring   php8.3-xml php8.3-zip php8.3-intl php8.3-bcmath php8.3-imagick -y

# Проверить версию
php -v

MySQL 8.0

Установка MySQL
apt install mysql-server -y
systemctl enable --now mysql

# Базовая защита (задайте пароль root и ответьте Y на все вопросы)
mysql_secure_installation
Создать базу данных и пользователя для сайта
mysql -u root -p

-- Внутри MySQL:
CREATE DATABASE site_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site_user'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON site_db.* TO 'site_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Nginx: конфиг виртуального хоста

/etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html;

    # WordPress — красивые URL
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Передать PHP на обработку PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Скрыть .htaccess и прочие скрытые файлы
    location ~ /\. {
        deny all;
    }

    # Кэшировать статику
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    client_max_body_size 64M;
}
Активировать конфиг
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Если сайт не на WordPress

Laravel/Bitrix/OpenCart — тот же стек, но в root указывайте папку public/ (Laravel) или корень сайта. Статический сайт — Nginx без PHP. Python — Nginx как прокси перед Gunicorn/Uvicorn. Node.js — Nginx как прокси перед PM2/Node.

5. Загрузка файлов и базы на VPS

Разместить файлы сайта

На VPS: создать директорию и распаковать архив
# Создать директорию для сайта
mkdir -p /var/www/example.com

# Распаковать архив (если передавали tar.gz)
tar -xzf /tmp/site_backup.tar.gz -C /var/www/example.com --strip-components=1

# Или если скачивали zip
apt install unzip -y
unzip /tmp/site_backup.zip -d /var/www/example.com

# Проверить структуру
ls /var/www/example.com
Выставить правильные права
# Владелец — www-data (пользователь Nginx/PHP-FPM)
chown -R www-data:www-data /var/www/example.com

# Права: 755 для директорий, 644 для файлов
find /var/www/example.com -type d -exec chmod 755 {} ;
find /var/www/example.com -type f -exec chmod 644 {} ;

Импортировать базу данных

Импортировать дамп в MySQL
# Если дамп был сжат gzip
gunzip /tmp/db_backup.sql.gz

# Импортировать
mysql -u site_user -p site_db < /tmp/db_backup.sql

# Проверить — посчитать таблицы
mysql -u site_user -p -e "USE site_db; SHOW TABLES;" | wc -l

Обновить wp-config.php

На старом хостинге в wp-config.php были данные его базы данных. Теперь нужно указать данные новой БД на VPS.

/var/www/example.com/wp-config.php — изменить данные БД
/** Имя базы данных */
define( 'DB_NAME', 'site_db' );

/** Пользователь базы данных */
define( 'DB_USER', 'site_user' );

/** Пароль пользователя базы данных */
define( 'DB_PASSWORD', 'СЛОЖНЫЙ_ПАРОЛЬ' );

/** Адрес сервера базы данных */
define( 'DB_HOST', 'localhost' );

Проверить сайт по IP (до смены DNS)

Добавьте запись в файл hosts на своём компьютере и откройте сайт в браузере:

На локальном компьютере: /etc/hosts (Linux/Mac) или C:\Windows\System32\drivers\etc\hosts (Windows)
# Добавить строку (заменить IP и домен)
1.2.3.4 example.com www.example.com

Откройте example.com в браузере — должен открыться сайт с VPS. Проверьте: главная страница, внутренние ссылки, форма входа в админку, загрузка медиафайлов. Если всё работает — можно переключать DNS.

Не забудьте убрать запись из hosts после переноса

После смены DNS удалите строку из hosts — иначе браузер будет принудительно открывать сайт по старому IP даже после переноса.

6. Смена DNS и SSL

Сменить A-запись домена

Войдите в панель регистратора (или куда делегирован домен) и обновите A-запись:

ЗаписьТипЗначениеTTL
@AIP адрес VPS300 с
wwwAIP адрес VPS300 с
@MXВаш почтовый сервер300 с
Проверить распространение DNS (через 5–15 минут после смены)
# Спросить DNS напрямую у публичного резолвера
dig @8.8.8.8 example.com A +short

# Или через nslookup
nslookup example.com 8.8.8.8

# Должен вернуть IP вашего VPS

Получить SSL-сертификат

После того как DNS обновился (IP домена стал указывать на VPS):

Let's Encrypt через Certbot
apt install certbot python3-certbot-nginx -y

# Получить сертификат и автоматически настроить Nginx
certbot --nginx -d example.com -d www.example.com

# Проверить автообновление (должно быть без ошибок)
certbot renew --dry-run

Certbot сам добавит блок с HTTPS в конфиг Nginx и настроит редирект с HTTP. Сертификат автоматически обновляется раз в 60 дней.

Сайт на WordPress: обновить URL в БД

Если на старом хостинге был HTTP, а теперь HTTPS — обновите адрес сайта в БД:

mysql -u site_user -p site_db -e "
UPDATE wp_options
SET option_value = 'https://example.com'
WHERE option_name IN ('siteurl', 'home');"

7. Проверка после переезда

Когда DNS переключился и сертификат получен — пройдитесь по чеклисту:

Открывается ли сайт по HTTPS

Браузер должен показывать замок. Не должно быть предупреждения о сертификате. Проверьте оба варианта: example.com и www.example.com.

Редирект с HTTP на HTTPS

Откройте http://example.com — должен автоматически перенаправить на https://. Certbot настраивает это автоматически.

Работают ли внутренние страницы

Пройдитесь по нескольким страницам сайта. Для WordPress: главная, архив, отдельная запись, страница, категория.

Загружаются ли изображения

Откройте страницу с медиафайлами. Если картинки не грузятся — проверьте права на папку wp-content/uploads/ (chown www-data:www-data).

WordPress: войти в админку

/wp-admin/ должен открываться. Проверьте, что плагины активны, настройки на месте, медиабиблиотека доступна.

Нет ли mixed content

Если часть ресурсов (картинки, скрипты) грузится по HTTP — браузер покажет предупреждение. Для WordPress установите плагин Really Simple SSL или вручную обновите URL в БД.

Диагностика проблем

Основные логи для отладки
# Логи Nginx
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log

# Логи PHP-FPM
tail -f /var/log/php8.3-fpm.log

# Проверить права на файлы (всё должно быть www-data)
ls -la /var/www/example.com/

# Проверить статус сервисов
systemctl status nginx php8.3-fpm mysql
WordPress: включить режим отладки (временно)
# В wp-config.php добавить перед строкой "/* That's all, stop editing! */"
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );   # сохранять в wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); # не показывать ошибки на сайте

# Смотреть лог
tail -f /var/www/example.com/wp-content/debug.log

Когда всё работает — отключить хостинг

Не спешите сразу отказываться от старого хостинга. Подождите 1–2 недели — убедитесь, что всё стабильно работает на VPS, нет скрытых проблем с редкими страницами. После этого спокойно отменяйте подписку.

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

Нужен VPS для WordPress? Рекомендуем от 2 ГБ RAM с NVMe

VPS для WordPress →

Смотрите также