Перенос сайта на сервер BLACKBOX
План переноса от другого провайдера: копирование файлов и базы данных, тестирование и смена DNS без простоя.
На этой странице
В этом руководстве описано, как перенести сайт от другого провайдера на сервер 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. Подготовьте новый сервер
- Закажите сервер и подключитесь к нему: Подключение к серверу по SSH (Windows, macOS, Linux).
- Установите веб-сервер и среду для приложения: Веб-сервер с HTTPS: nginx или Apache и Let's Encrypt, WordPress на LEMP (nginx, MariaDB, PHP), Приложения Node.js, Python и другие сервисы: nginx как обратный прокси или Установка Docker и Docker Compose.
- Установите сервер баз данных и создайте базу и пользователя: Базы данных: MariaDB/MySQL и PostgreSQL. Если имена и пароли совпадут со старым сервером, менять в конфигурации придётся меньше.
- Создайте конфигурацию веб-сервера для
ДОМЕНи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
В меню «Пуск» введите «Блокнот» (или «Notepad»), щёлкните по приложению правой кнопкой мыши и выберите «Запуск от имени администратора».
Откройте
C:\Windows\System32\drivers\etc\hosts(в окне открытия включите показ всех файлов,*.*), добавьте строку и сохраните файл.В PowerShell очистите DNS-кэш и проверьте: в выводе
pingдолжен появитьсяIP_СЕРВЕРА.ipconfig /flushdns ping -n 1 ДОМЕН
macOS и Linux
Откройте файл, добавьте строку, сохраните сочетанием Ctrl + O, Enter и выйдите через Ctrl + X:
sudo nano /etc/hostsВ macOS очистите DNS-кэш:
sudo dscacheutil -flushcache sudo killall -HUP mDNSResponderПроверьте: в выводе должен появиться
IP_СЕРВЕРА.ping -c 1 ДОМЕН
Что проверить
Перезапустите браузер и проверьте всё, чем пользуются посетители: основные страницы, вход в административную часть, формы, загрузку изображений, поиск, корзину и оплату. Сертификата для домена на новом сервере ещё нет, поэтому по https:// браузер покажет ошибку или предупреждение безопасности — на этом этапе это нормально. Если сайт сам переходит на https:// и браузер не даёт продолжить, установите на новый сервер текущий сертификат со старого сервера (шаг 7, пункт 6). Пока не включайте задания cron на новом сервере, чтобы он не рассылал письма и не обрабатывал заказы параллельно со старым.
После проверки удалите строку из файла hosts и снова очистите DNS-кэш.
Шаг 7. Финальная синхронизация и переключение
Остановите изменения на старом сайте (режим обслуживания в приложении или временная страница), чтобы не потерять новые заказы и комментарии.
Снова выполните команду
rsyncиз шага 4: она докопирует только изменённые файлы.Снова экспортируйте и импортируйте базу данных, как в шаге 5. Дамп, сделанный через
mysqldump, при импорте заменяет существующие таблицы; при экспорте из phpMyAdmin включите в настройках добавление командDROP TABLE. Для PostgreSQL добавьте кpg_restoreпараметры--clean --if-exists.У DNS-провайдера замените значение записей A для
ДОМЕНиwwwнаIP_СЕРВЕРА(CNAMEwww→ДОМЕНможно оставить). Удалите записи AAAA, указывающие на старый хостинг. Записи MX и TXT не трогайте (исключения описаны в разделе «Почта»). Порядок действий: Как направить домен на сервер.Примерно через 5 минут (через 10 минут при TTL 600) убедитесь, что в ответе
IP_СЕРВЕРА. Linux или macOS:dig +short ДОМЕН A @1.1.1.1Windows:
nslookup ДОМЕН 1.1.1.1Сразу получите сертификат Let's Encrypt (для Apache —
--apacheвместо--nginx; установка certbot описана в статье Веб-сервер с HTTPS: nginx или Apache и Let's Encrypt):certbot --nginx -d ДОМЕН -d www.ДОМЕНДо этого посетители, которые уже попадают на новый сервер по HTTPS, видят предупреждение. Чтобы обойтись без такой паузы, установите на новый сервер ещё до переключения текущий сертификат и его ключ, скопированные со старого сервера. Коммерческий сертификат переносят именно так.
Включите задания cron на новом сервере и отключите их на старом.
Следите за журналами веб-сервера (у 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» с панелью управления.