До основного вмісту

Міграція зі shared-хостингу на VDS: покрокова інструкція

Міграція · 19.04.2026 · 4 хв читання
Ілюстрація до статті «Міграція зі shared-хостингу на VDS: покрокова інструкція»

Перехід із загального хостингу (shared) на віртуальний виділений сервер (VDS/VPS) — це закономірний крок, коли сайт переростає ресурсні обмеження. VDS дає повний root-доступ, незалежні ресурси CPU/RAM і можливість тонкого налаштування під ваші потреби.

Коли пора переїжджати з shared на VDS

СимптомПричинаРішення
Сайт гальмує в години пікКонкуренція за ресурси із сусідамиVDS з виділеними ресурсами
Помилки 503 / перевищення лімітівCPU/RAM квоти sharedVDS без обмежень хостера
Не можна встановити потрібний PHP/PythonShared контролює середовищеПовний 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:

  1. Знизьте TTL A-запису до 300 секунд за 24 години до міграції
  2. Переконайтеся, що сайт працює на VDS (через /etc/hosts)
  3. Оновіть A-запис на IP вашого VDS
  4. Дочекайтеся поширення DNS (5–30 хвилин при TTL 300)
  5. Тримайте старий хостинг активним ще 48 годин як запасний варіант
Нульовий простій: При правильному зниженні TTL і тестуванні через /etc/hosts перемикання DNS відбувається непомітно для користувачів — сайт доступний увесь час.
Оновіть конфіг застосунку! Після перенесення оновіть wp-config.php (WordPress), .env або інші конфіги з новими даними БД. Старі credentials від shared-хостингу працювати не будуть.

Shared-хостинг обмежує ресурси CPU/RAM, забороняє запуск фонових процесів і не дозволяє тонке налаштування PHP/MySQL. VDS дає повний контроль.

💡 Ознаки того, що пора на VDS: сайт падає в години пік, потрібні cron-завдання щохвилини, потрібен PHP 8.2+ або Redis.

Крок 1: Бекап через cPanel

cPanel → Backup Wizard → Full Backup. Завантажте архів (.tar.gz) із сервера.

Крок 2: Встановлення стеку на VDS

apt update && apt install -y nginx mysql-server php8.2-fpm   php8.2-mysql php8.2-gd php8.2-xml php8.2-mbstring php8.2-curl php8.2-zip

systemctl enable --now nginx mysql php8.2-fpm

Крок 3: Імпорт бази даних

mysql -u root -p -e "CREATE DATABASE mydb CHARACTER SET utf8mb4;"
mysql -u root -p -e "CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'pass';"
mysql -u root -p -e "GRANT ALL ON mydb.* TO 'myuser'@'localhost';"
mysql -u root -p mydb < backup.sql

Крок 4: Налаштування Nginx + PHP-FPM

server {
    listen 80;
    server_name mysite.com www.mysite.com;
    root /var/www/mysite;
    index index.php index.html;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Чекліст перед перемиканням DNS

ПеревіркаКоманда
Сайт відкривається за IPcurl http://NEW_IP
PHP працюєphp -r "echo phpinfo();" | head
MySQL доступнаmysql -u myuser -p mydb -e "SHOW TABLES;"
SSL налаштованоcertbot --nginx -d mysite.com
⚠️ Знизьте TTL DNS-запису до 300 секунд за 24 години до перенесення — це прискорить поширення після зміни A-запису.
Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці