BLACKBOXЦентр помощи

Перенос сайта на сервер BLACKBOX

План переноса от другого провайдера: копирование файлов и базы данных, тестирование и смена DNS без простоя.

общееОбновлено 2026-10-09~12 мин чтения
На этой странице

В этом руководстве описано, как перенести сайт от другого провайдера на сервер BLACKBOX с минимальным перерывом для посетителей: инвентаризация, копирование файлов и базы данных, проверка на вашем компьютере и смена DNS. Команды для серверов выполняются по SSH, а некоторые проверки — на вашем компьютере. Адрес нового сервера указан в панели app.blackbox.md на странице «Мои серверы» (app.blackbox.md/my-servers, боковое меню → «Инфраструктура» → «Мои серверы»), в поле «IP».

Доступно: всем, у кого есть root-доступ по SSH к серверу BLACKBOX и возможность менять DNS домена. Перенос силами команды BLACKBOX — по запросу через поддержку (см. последний раздел).

План вкратце

Этап Когда
1. Инвентаризация сайта до заказа сервера
2. TTL в DNS снижен до 300 не позже чем за 48 часов до переключения
3–5. Новый сервер, файлы, база данных после активации сервера
6. Проверка через файл hosts до переключения
7. Финальная синхронизация и смена DNS в день переключения
8. Проверка, старый сервер ещё работает в течение нескольких дней после переключения

До этапа 7 посетители работают со старым сервером. Перерыв будет только во время финальной синхронизации, пока старый сайт находится в режиме обслуживания.

Шаг 1. Проведите инвентаризацию

Что записать Как узнать и зачем это нужно
Файлы сайта папка (например, public_html) и её размер: выберите тариф с достаточным диском
Базы данных тип (MySQL/MariaDB или PostgreSQL), имя, пользователь, размер
Версии PHP или Node.js php -v, php -m (модули), node -v: установите те же версии
Веб-сервер nginx или Apache; nginx не читает .htaccess, поэтому правила оттуда переписывают в конфигурацию nginx
Файлы конфигурации wp-config.php, .env, config.php: адрес базы данных, пароли, пути
Задания cron crontab -l или раздел cron в панели старого хостинга
Почта где находятся почтовые ящики и куда указывает запись MX (раздел «Почта»)
SSL-сертификат Let's Encrypt или коммерческий; коммерческий копируют вместе с его закрытым ключом
DNS кто его обслуживает: там вы меняете TTL и адрес

На старом сервере, если есть доступ по SSH (СТАРЫЙ_ПУТЬ — папка сайта):

du -sh СТАРЫЙ_ПУТЬ
php -v
php -m
crontab -l

На виртуальном хостинге версия PHP сайта может отличаться от той, что показывает php -v: проверьте её и в панели хостинга.

На своём компьютере узнайте, кто обслуживает DNS (NS) и куда приходит почта (MX). Linux или macOS:

dig +short NS ДОМЕН
dig +short MX ДОМЕН

Windows:

nslookup -type=NS ДОМЕН
nslookup -type=MX ДОМЕН

Затем выберите тариф и операционную систему (Тарифы VPS: как выбрать, Доступные операционные системы). На диске должно хватить места и для файлов экспорта. Версия PHP в стандартных репозиториях:

Система PHP
Ubuntu 24.04 LTS / 22.04 LTS / 20.04 LTS 8.3 / 8.1 / 7.4
Debian 12 / Debian 11 8.2 / 7.4
AlmaLinux 9, CentOS Stream 9 8.0; более новые версии — в виде модулей (dnf module list php)

Шаг 2. Снизьте TTL за 48 часов

TTL определяет, сколько DNS-серверы по всему миру хранят ответ в кэше. Не позже чем за 48 часов до переключения установите TTL записей A (а также AAAA или CNAME, если они есть) для ДОМЕН и www равным 300 секундам. IP-адрес пока не меняйте. Проверьте результат на NS-сервере домена (NS_СЕРВЕР — одно из имён, которые вывела команда NS выше); число после имени — это TTL:

dig +noall +answer ДОМЕН A @NS_СЕРВЕР

В Windows найдите в выводе строку ttl =:

nslookup -debug -type=A ДОМЕН NS_СЕРВЕР
  • Если вы подключили аккаунт Cloudflare или GoDaddy на странице «DNS» панели, нажмите на карандаш («Изменить») в строке записи, выберите TTL из списка и нажмите «Сохранить»: в Cloudflare — 300, в GoDaddy минимальное значение в списке — 600 (10 минут). См. Управление DNS-записями из панели. У другого DNS-провайдера измените TTL в его панели.
  • В Cloudflare у записей «Proxied» (в панели — флажок «Прокси») TTL автоматический, и смена IP-адреса вступает в силу почти сразу. В режиме SSL «Full (strict)» новому серверу нужен действительный сертификат уже в момент переключения. Проще всего на время переноса перевести записи в «DNS only» и снова включить прокси, когда HTTPS заработает.

Важно Если пропустить этот шаг, часть посетителей ещё долго после переключения будет попадать на старый сервер — столько, сколько составлял прежний TTL, иногда 86400 секунд (сутки). За 48 часов DNS-серверы успевают получить TTL 300, и новый адрес доходит до посетителей примерно за 5 минут (за 10 минут при TTL 600).

Шаг 3. Подготовьте новый сервер

  1. Закажите сервер и подключитесь к нему: Подключение к серверу по SSH (Windows, macOS, Linux).
  2. Установите веб-сервер и среду для приложения: Веб-сервер с HTTPS: nginx или Apache и Let's Encrypt, WordPress на LEMP (nginx, MariaDB, PHP), Приложения Node.js, Python и другие сервисы: nginx как обратный прокси или Установка Docker и Docker Compose.
  3. Установите сервер баз данных и создайте базу и пользователя: Базы данных: MariaDB/MySQL и PostgreSQL. Если имена и пароли совпадут со старым сервером, менять в конфигурации придётся меньше.
  4. Создайте конфигурацию веб-сервера для ДОМЕН и www.ДОМЕН. Сертификат Let's Encrypt вы получите на шаге 7.

Сетевая фильтрация, которой управляет BLACKBOX, по умолчанию пропускает SSH (22), HTTP (80), HTTPS (443) и ping. Держите базу данных на том же сервере, что и сайт; чтобы открыть другие порты, напишите в поддержку (Файрвол: сетевая фильтрация и ufw/firewalld на сервере).

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

Напрямую со старого сервера (рекомендуется)

Новый сервер сам забирает файлы со старого. Подключитесь к новому серверу и запустите сеанс tmux, чтобы копирование продолжилось, даже если связь оборвётся:

tmux new -s migrare

Внутри сеанса запустите копирование; будет запрошен пароль старого сервера (при первом подключении сначала подтвердите подключение, введя yes):

mkdir -p /var/www/ДОМЕН
rsync -avzP root@IP_СТАРОГО_СЕРВЕРА:СТАРЫЙ_ПУТЬ/ /var/www/ДОМЕН/
  • Косая черта в конце СТАРЫЙ_ПУТЬ/ означает «скопировать содержимое папки», а не саму папку.

  • Если у старого провайдера вы не root, укажите пользователя, которого выдал провайдер.

  • Если SSH у старого провайдера работает не на порту 22 (ПОРТ), укажите порт через -e. Так же поступите с командами rsync из шага 5.

    rsync -avzP -e "ssh -p ПОРТ" root@IP_СТАРОГО_СЕРВЕРА:СТАРЫЙ_ПУТЬ/ /var/www/ДОМЕН/
  • Если на старый сервер вы входите по ключу со своего компьютера, загрузите ключ в ssh-agent (Создание SSH-ключа (Windows, macOS, Linux)) и подключитесь к новому серверу с -A: тогда rsync воспользуется вашим ключом, и копировать его на сервер не придётся.

    ssh -A root@IP_СЕРВЕРА
  • Выйти из сеанса можно сочетанием Ctrl + B, затем D; вернуться — командой tmux attach -t migrare. Если tmux или rsync не установлены, установите их, как описано в статье Передача файлов на сервер (scp, rsync, SFTP).

Через ваш компьютер

Если старый провайдер даёт только FTP или файловый менеджер, скачайте файлы (или архив из панели хостинга) на компьютер, а затем загрузите их на новый сервер через rsync, scp или SFTP-клиент, как описано в статье Передача файлов на сервер (scp, rsync, SFTP).

В конце передайте файлы пользователю веб-сервера. В Ubuntu и Debian:

chown -R www-data:www-data /var/www/ДОМЕН

В AlmaLinux и CentOS Stream это пользователь nginx или apache, а SELinux требует правильных меток: подробности — в той же статье о передаче файлов.

Шаг 5. Перенесите базу данных

MySQL или MariaDB

На старом сервере (--single-transaction создаёт согласованную копию, не останавливая сайт; если доступен только phpMyAdmin, воспользуйтесь его экспортом в формате SQL):

mysqldump --single-transaction --routines --triggers -u ПОЛЬЗОВАТЕЛЬ_БД -p ИМЯ_БД | gzip > ИМЯ_БД.sql.gz

На новом сервере, когда база и пользователь уже созданы, заберите файл из домашней папки пользователя на старом сервере и импортируйте его:

rsync -avP root@IP_СТАРОГО_СЕРВЕРА:ИМЯ_БД.sql.gz /root/
gunzip < /root/ИМЯ_БД.sql.gz | mysql ИМЯ_БД

PostgreSQL

На старом сервере:

pg_dump -Fc -h localhost -U ПОЛЬЗОВАТЕЛЬ_БД ИМЯ_БД > ИМЯ_БД.dump

На новом сервере владельцем базы должен быть пользователь приложения. Если вы их ещё не создали (первая команда запросит пароль нового пользователя):

sudo -u postgres createuser --pwprompt ПОЛЬЗОВАТЕЛЬ_БД
sudo -u postgres createdb -O ПОЛЬЗОВАТЕЛЬ_БД ИМЯ_БД

Заберите дамп и восстановите его; благодаря --role таблицы будут принадлежать пользователю приложения:

rsync -avP root@IP_СТАРОГО_СЕРВЕРА:ИМЯ_БД.dump /tmp/
sudo -u postgres pg_restore --no-owner --no-acl --role=ПОЛЬЗОВАТЕЛЬ_БД -d ИМЯ_БД /tmp/ИМЯ_БД.dump

После финальной синхронизации (шаг 7) удалите файлы дампа на обоих серверах.

Обновите конфигурацию приложения

Приложение Файл Что проверить
WordPress wp-config.php DB_NAME, DB_USER, DB_PASSWORD, DB_HOST
Laravel и другие приложения с .env .env DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD
Прочие их файл конфигурации адрес, имя и пароль базы, абсолютные пути

Адресом базы обычно становится localhost (на виртуальном хостинге база часто находилась на отдельном сервере). Оставшиеся в файлах старые пути найдёт команда ниже. Затем очистите кэш приложения, если он есть.

grep -rl "СТАРЫЙ_ПУТЬ" /var/www/ДОМЕН

Шаг 6. Проверьте сайт через файл hosts

Файл hosts направляет домен на новый сервер только на вашем компьютере; остальные посетители по-прежнему видят старый сайт. Добавьте в конец файла строку:

IP_СЕРВЕРА ДОМЕН www.ДОМЕН

Windows

  1. В меню «Пуск» введите «Блокнот» (или «Notepad»), щёлкните по приложению правой кнопкой мыши и выберите «Запуск от имени администратора».

  2. Откройте C:\Windows\System32\drivers\etc\hosts (в окне открытия включите показ всех файлов, *.*), добавьте строку и сохраните файл.

  3. В PowerShell очистите DNS-кэш и проверьте: в выводе ping должен появиться IP_СЕРВЕРА.

    ipconfig /flushdns
    ping -n 1 ДОМЕН

macOS и Linux

  1. Откройте файл, добавьте строку, сохраните сочетанием Ctrl + O, Enter и выйдите через Ctrl + X:

    sudo nano /etc/hosts
  2. В macOS очистите DNS-кэш:

    sudo dscacheutil -flushcache
    sudo killall -HUP mDNSResponder
  3. Проверьте: в выводе должен появиться IP_СЕРВЕРА.

    ping -c 1 ДОМЕН

Что проверить

Перезапустите браузер и проверьте всё, чем пользуются посетители: основные страницы, вход в административную часть, формы, загрузку изображений, поиск, корзину и оплату. Сертификата для домена на новом сервере ещё нет, поэтому по https:// браузер покажет ошибку или предупреждение безопасности — на этом этапе это нормально. Если сайт сам переходит на https:// и браузер не даёт продолжить, установите на новый сервер текущий сертификат со старого сервера (шаг 7, пункт 6). Пока не включайте задания cron на новом сервере, чтобы он не рассылал письма и не обрабатывал заказы параллельно со старым.

После проверки удалите строку из файла hosts и снова очистите DNS-кэш.

Шаг 7. Финальная синхронизация и переключение

  1. Остановите изменения на старом сайте (режим обслуживания в приложении или временная страница), чтобы не потерять новые заказы и комментарии.

  2. Снова выполните команду rsync из шага 4: она докопирует только изменённые файлы.

  3. Снова экспортируйте и импортируйте базу данных, как в шаге 5. Дамп, сделанный через mysqldump, при импорте заменяет существующие таблицы; при экспорте из phpMyAdmin включите в настройках добавление команд DROP TABLE. Для PostgreSQL добавьте к pg_restore параметры --clean --if-exists.

  4. У DNS-провайдера замените значение записей A для ДОМЕН и www на IP_СЕРВЕРА (CNAME www → ДОМЕН можно оставить). Удалите записи AAAA, указывающие на старый хостинг. Записи MX и TXT не трогайте (исключения описаны в разделе «Почта»). Порядок действий: Как направить домен на сервер.

  5. Примерно через 5 минут (через 10 минут при TTL 600) убедитесь, что в ответе IP_СЕРВЕРА. Linux или macOS:

    dig +short ДОМЕН A @1.1.1.1

    Windows:

    nslookup ДОМЕН 1.1.1.1
  6. Сразу получите сертификат Let's Encrypt (для Apache — --apache вместо --nginx; установка certbot описана в статье Веб-сервер с HTTPS: nginx или Apache и Let's Encrypt):

    certbot --nginx -d ДОМЕН -d www.ДОМЕН

    До этого посетители, которые уже попадают на новый сервер по HTTPS, видят предупреждение. Чтобы обойтись без такой паузы, установите на новый сервер ещё до переключения текущий сертификат и его ключ, скопированные со старого сервера. Коммерческий сертификат переносят именно так.

  7. Включите задания cron на новом сервере и отключите их на старом.

  8. Следите за журналами веб-сервера (у Apache: /var/log/apache2/ в Ubuntu и Debian, /var/log/httpd/ в AlmaLinux и CentOS Stream) и приложения:

    tail -f /var/log/nginx/access.log /var/log/nginx/error.log

Шаг 8. После переключения

  • Следите за журналом доступа старого сервера: когда туда перестанут приходить посетители (кроме случайных роботов), значит, все уже работают с новым сервером.
  • Оставьте старый хостинг активным ещё на несколько дней и проверьте формы, оплату, письма, которые отправляет сайт, и задания cron.
  • Верните TTL записей к 3600.
  • Настройте резервное копирование: BLACKBOX не делает автоматических резервных копий вашего сервера. См. Стратегия резервного копирования для вашего сервера.

Необратимо Отмена старого хостинга, как правило, безвозвратно удаляет хранящиеся там файлы, базы данных и почтовые ящики. Отменяйте его только после того, как всё работает на новом сервере, почта перенесена (если она была там же) и у вас есть финальная копия старого сайта.

Почта

Почта не переезжает вместе с сайтом. Что делать, подскажет запись MX, которую вы узнали на шаге 1:

Ситуация Что делать
Почта у отдельного провайдера (например, Google Workspace или Microsoft 365) Не меняйте записи MX и TXT. Меняйте только A для ДОМЕН и www.
Почта на старом хостинге, а MX указывает на отдельное имя со своей записью A (например, mail.ДОМЕН) Не меняйте ни MX, ни запись A этого имени. Почта работает, пока активен старый хостинг.
MX указывает на сам ДОМЕН или на имя, которое является CNAME на ДОМЕН Смена записи A перенесёт и доставку почты. Узнайте у старого провайдера имя его почтового сервера и до переключения направьте MX на него, чтобы почта осталась у провайдера.
Вы хотите перенести и почтовые ящики Почтовому серверу на VPS нужны порты (25, 465, 587, 993), которые по умолчанию закрыты в сетевой фильтрации: сначала спросите поддержку. Перенести ящики может и команда BLACKBOX — по запросу.

Если сайт отправляет письма (формы, уведомления), настройте отправку через SMTP-сервер вашего почтового провайдера с логином и паролем, а не напрямую с нового сервера.

Внимание Если почта размещена в другом месте, не меняйте записи MX: новые письма будут направляться на сервер без почтовых ящиков и до вас не дойдут.

Перенос силами команды BLACKBOX

На странице «Бесплатная миграция от других провайдеров» (blackbox.md/ru/solutions/migration, меню «Решения» → «Миграция проектов») описана услуга переноса по запросу: файлы, базы данных, панели управления, почта и переключение DNS. Для новых клиентов с платным VPS или хостингом перенос одного VPS, хостинг-аккаунта или панели управления в новую услугу BLACKBOX заявлен как бесплатный; для сложных проектов готовится отдельная смета. Точные условия команда подтверждает при оценке.

Нажмите «Запросить бесплатную оценку» на этой странице или напишите нам напрямую: укажите адрес сайта, прежнего провайдера и что нужно перенести. Подробнее: Профессиональные услуги по запросу: администрирование, DevOps, миграция, Как связаться с поддержкой BLACKBOX.

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

Импорт MySQL останавливается с ошибкой Unknown collation: 'utf8mb4_0900_ai_ci'. Дамп сделан в MySQL 8, а на новом сервере работает MariaDB, которая не знает такой сортировки (collation). Замените её в файле и импортируйте заново:

gunzip /root/ИМЯ_БД.sql.gz
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' /root/ИМЯ_БД.sql
mysql ИМЯ_БД < /root/ИМЯ_БД.sql

На новом сервере открывается только главная страница, остальные выдают 404. Правила из .htaccess в nginx не работают. Для WordPress и большинства PHP-приложений в конфигурации nginx нужна строка try_files $uri $uri/ /index.php?$args; — см. WordPress на LEMP (nginx, MariaDB, PHP).

Можно ли сохранить IP-адрес старого провайдера? Нет. У сервера BLACKBOX свой IPv4-адрес, поэтому и меняются DNS-записи. NS-серверы домена менять не нужно.

Заказан тариф «VPS hosting» с панелью управления. Подходит ли это руководство? Этапы (инвентаризация, TTL, проверка, переключение) те же, но сайт создаётся через установленную панель. Уточните в поддержке, какая панель стоит на сервере и как импортировать в неё сайт: Тарифы «VPS hosting» с панелью управления.

Не нашли ответ?Напишите нам — служба поддержки ответит. support@blackbox.md
Открыть тикет