Переход с общего хостинга (shared) на виртуальный выделенный сервер (VDS/VPS) — это закономерный шаг, когда сайт вырастает из ресурсных ограничений. VDS даёт полный root-доступ, независимые ресурсы CPU/RAM и возможность тонкой настройки под ваши нужды.
Когда пора переезжать с shared на VDS
| Симптом | Причина | Решение |
|---|---|---|
| Сайт тормозит в часы пик | Конкуренция за ресурсы с соседями | VDS с выделенными ресурсами |
| Ошибки 503 / превышение лимитов | CPU/RAM квоты shared | VDS без ограничений хостера |
| Нельзя установить нужный PHP/Python | Shared контролирует окружение | Полный root на VDS |
| Нужен cron каждую минуту | Shared запрещает частые задания | Любой cron на VDS |
| Несколько проектов | Дополнительные сайты стоят дорого | Неограниченное кол-во сайтов на VDS |
Подготовка VDS перед миграцией
# Обновить систему (Ubuntu/Debian)
apt update && apt upgrade -y
# Установить веб-стек
apt install nginx php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip mariadb-server -y
# Запустить сервисы
systemctl enable --now nginx php8.3-fpm mariadb
Шаг 1: Создание резервной копии на shared-хостинге
# Через cPanel: Backup Wizard → Full Backup
# Или вручную через SSH (если доступен)
tar -czf ~/backup-site.tar.gz ~/public_html/
mysqldump -u dbuser -p dbname > ~/backup-db.sql
Шаг 2: Перенос файлов на VDS
# Скачать архив с shared на локальный ПК, затем загрузить на VDS
scp backup-site.tar.gz root@YOUR-VDS-IP:/var/www/
# Или напрямую с shared на VDS через rsync
rsync -avz --progress user@shared-host:~/public_html/ root@YOUR-VDS-IP:/var/www/example.com/
# Распаковать
cd /var/www/
tar -xzf backup-site.tar.gz
Шаг 3: Восстановление базы данных
# Создать БД и пользователя
mysql -u root -p <<'SQL'
CREATE DATABASE mysite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPass123';
GRANT ALL ON mysite.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
SQL
# Импортировать дамп
mysql -u myuser -p mysite < backup-db.sql
Шаг 4: Настройка 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;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Шаг 5: Тестирование до смены DNS
# Добавить в /etc/hosts на вашем ПК для теста
YOUR-VDS-IP example.com www.example.com
# Проверить сайт в браузере без смены DNS
# После успешного теста — вернуть hosts и сменить DNS
Шаг 6: Смена DNS без простоя
Смените DNS-записи только после успешного тестирования сайта на VDS:
- Снизьте TTL A-записи до 300 секунд за 24 часа до миграции
- Убедитесь что сайт работает на VDS (через /etc/hosts)
- Обновите A-запись на IP вашего VDS
- Дождитесь распространения DNS (5–30 минут при TTL 300)
- Держите старый хостинг активным ещё 48 часов как запасной вариант
Нулевой простой: При правильном снижении TTL и тестировании через /etc/hosts переключение DNS происходит незаметно для пользователей — сайт доступен всё время.
Обновите конфиг приложения! После переноса обновите
wp-config.php (WordPress), .env или другие конфиги с новыми данными БД. Старые credentials от shared-хостинга работать не будут.