Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Миграция из Vultr в Timeweb Cloud

Александр Бархатов
Александр Бархатов
Технический писатель
22 мая 2024 г.
20
17 минут чтения
Средний рейтинг статьи: 5

В последнее время пользователям из России становится все труднее использовать иностранные хостинг-провайдеры. Помимо проблем, связанных с оплатой услуг, провайдеры также вводят различные ограничения. В связи с этим возникает задача по переносу существующих данных от одного провайдера к другому. В данной статье будет рассмотрена миграция от хостинг-провайдера Vultr к облачному провайдеру Timeweb Cloud.

Vultr — это облачный и хостинг-провайдер, который предоставляет услуги по аренде VPS/VDS-серверов, а также PaaS- и SaaS-решений. Компания относительная молодая и была основана в 2014 году. Главный офис находится в США, штат Флорида. Дата центры компании находятся на всех 6 континентах в 32 странах.

Предварительные требования

Для миграции данных и файлов необходимо следующее:

  • Действующий сервер или виртуальная машина на хостинге Vultr.

  • Арендованный сервер или виртуальная машина на облаке Timeweb Cloud. Очень важно выбрать сервер, который будет максимально похож на предыдущий по аппаратным характеристикам, включая одинаковое количество ядер процессора, объем оперативной памяти и, главное, одинаковый объем жесткого диска. Не менее важным параметром является использование одинаковой версии операционной системы. В данной статье на серверах двух провайдеров будет использоваться Ubuntu версии 22.04.

Регистрация в Timeweb Cloud

Чтобы арендовать облачный или выделенный сервер в Timeweb Cloud, необходимо пройти регистрацию. 

Переходим по ссылке для регистрации нового пользователя. Мы выберем регистрацию на физическое лицо и заполним следующие данные:

  • ФИО,

  • адрес электронной почты,

  • телефон.

После регистрации на указанный адрес почты придет сообщение с ссылкой для активации аккаунта и входа в панель — перейдите по ней.

Создание облачного сервера

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

1) Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи ВКонтакте, GitHub, Google.

2) После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».

3) Выбираем операционную систему, которая будет установлена на сервер. Необходимо использовать тот дистрибутив и ту версию операционной системы, которая используется на другом хостинге. В нашем случае в хостинге Vultr используется Ubuntu 22.04 — этот же дистрибутив и версию операционной системы мы и будем использовать при аренде сервера в Timeweb Cloud.

4) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.

Image15

5) Далее выбираем необходимую конфигурацию для сервера. Так как ранее уже было упомянуто что необходимо выбирать те же характеристики, что и у другого сервера, то выбираем конфигурацию сервера на основе двухъядерного процессора, 2 ГБ оперативной памяти и 40 ГБ жесткого диска. Если же вы не нашли вашу конфигурацию сервера в разделе «Фиксированная конфигурация», то перейдите в раздел «Произвольная конфигурация» в которой вы можете сами выбрать любую конфигурацию. Выбираем соответствующий тариф:

Image3

6) Обязательно выберите внешний IP-адрес, чтобы сервер был доступен из внешний сети.

Будьте внимательны, если заказываете сервер в Москве — по умолчанию для них не выдается публичный IP-адрес. Для выхода сервера в Интернет нужно заказать плавающий IP.

7) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге).

Image6

8) Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.

9) Можно задать необходимое имя для сервера, которое будет отображаться в панели управления, а также выбрать проект.

10) Для создания сервера необходимо нажать на кнопку «Заказать»:

Image5

Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.

Подготовка перед миграцией

После того, как оба сервера готовы к работе, необходимо выполнить несколько действий перед началом процесса миграции и переноса данных. 

  1. Для начала необходимо сгенерировать (если это еще не сделано) ключи SSH для возможности удаленного подключения к серверу Timeweb Cloud без пароля. Так как у нас присутствуют файлы, владельцем которых является пользователь root, то перенос файлов будет осуществляться от имени root-пользователя. Для начала на сервере, который используется у провайдера Vultr, необходимо выполнить команду:
ssh-keygen

Сохраним ключи в директорию по умолчанию — .ssh, которая размещена в домашней директории root-пользователя (/root):

Image18

  1. Подключаемся по SSH к серверу Timeweb Cloud. Нам необходимо разрешить подключение root-пользователю, если данный параметр не включен. Для этого открываем на редактирование при помощи любого текстового редактора файл sshd_config:
nano /etc/ssh/sshd_config

Найдите параметр PermitRootLogin, раскомментируйте его, убрав символ решетки #, если он закомментирован, и в качестве значения укажите yes:

PermitRootLogin yes

Image19

Сохраните изменения и выйдите из файла.

  1. Чтобы изменения применились, необходимо перезапустить демон ssh при помощи команды:
systemctl restart ssh

Обратите внимание, что предоставление root-пользователю прав на подключение по SSH является довольно небезопасной практикой.

 

После того как перенос всех необходимых данных на новый сервер будет полностью закончен, на новом сервере необходимо выключить возможность входа для root-пользователя. Для этого будет необходимо заменить значение yes параметра PermitRootLogin на no и перезагрузить демон SSH командой: systemctl restart ssh

  1. Далее необходимо скопировать открытый ключ на новый сервер. Для копирования открытых ключей в SSH присутствует отдельная утилита ssh-copy-id. Для того чтобы скопировать ранее сгенерированный открытый ключ, необходимо выполнить команду:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@80.242.57.93

Image11

Где:

  • -i ~/.ssh/id_rsa.pub — полный путь до файла с открытым ключом в формате .pub;
  • root@80.242.57.93 — логин и адрес удаленного сервера, на который будет скопирован открытый ключ.

Проверяем, что на новый сервер можно попасть без пароля:

ssh root@80.242.57.9

Image2

Если пароль не был запрошен и вы смогли подключиться, то подключение по SSH-ключам успешно работает. 

Также убедитесь, что между двумя серверами присутствует сетевое соединение. Для этого можно воспользоваться утилитой ping. Например, проверим, может ли новый сервер с IP-адресом 80.242.57.93 принимать сетевые подключения:

ping 80.242.57.93

Image9

Как можно увидеть на скриншоте выше, пинг успешно проходит.

Также можно воспользоваться утилитой telnet. Telnet может быть не установлен по умолчанию, для его установки необходимо выполнить команду:

apt -y install telnet

В отличие от утилиты ping, telnet проверяет доступность по порту. Порт для SSH по умолчанию 22. Проверим, доступен ли новый сервер с IP-адресом 80.242.57.93 по 22 порту:

telnet 80.242.57.93 22

Image10

Если в ответ команда вывела строку Connected to, значит, сетевое соединение успешно проходит. Чтобы закрыть сессию telnet, достаточно нажать на клавишу Enter.

Если порт для SSH используется другой, то вместо 22 порта используйте тот, который указан в конфигурационном файле SSH-сервера — sshd_config.

Если вы используете firewall UFW (Uncomplicated Firewall), iptables или другое ПО для контроля трафика, то необходимо открыть порт, используемый для соединения по SSH. 

UFW

При использовании UFW необходимо выполнить следующую команду для открытия 22 порта:

ufw allow 22

Также на время переноса UFW можно выключить:

systemctl stop ufw

iptables

При использовании iptables необходимо выполнить следующие команды:

Для входящих соединений на порт 22:

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

Для исходящих соединений на порт 22:

iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT

Перенос одиночных файлов на новый сервер

Для начала перенесем обычные файлы. Предположим, на нашем старом сервере находится бинарный файл с именем 1GB.bin и размером 1 ГБ:

Image7

Мы можем использовать два популярных инструмента для копирования файлов: scp и rsync.

scp — утилита, а также одноименный протокол для безопасного копирования файлов между хостами. Безопасность в scp обеспечивается за счет использования протокола SSH. Входит в состав пакета OpenSSH и, соответственно, присутствует по умолчанию практически во всех современных дистрибутивах Linux.

rsync — утилита для синхронизации и копирования файлов между хостами. В отличие от утилиты scp, rsync копирует только те данные, которые не были ранее переданы, т.е. утилита использует принцип инкрементального резервного копирования, при котором копируются только те файлы, которые были изменены с момента предыдущего копирования. Исходные файлы, которые были скопированы первоначально, не перезаписываются. Помимо этого rsync минимизирует использование сетевого трафика путем использования одного потока при копировании файлов, что идеально подходит для использования в сетях с небольшой пропускной способностью.

В отличие от утилиты scp, rsync не всегда заранее предустановлен. Для установки в Debian-based-дистрибутивах достаточно выполнить команду:

apt install rsync -y  

Рассмотрим использование обеих утилит на практике. 

Для того чтобы скопировать файл при помощи утилиты scp, необходимо выполнить команду:

scp -i ~/.ssh/id_rsa 1GB.bin root@80.242.57.93:/root/1GB.bin

Image12

Где:

  • -i ~/.ssh/id_rsa — полный путь до файла с закрытым ключом для подключения по SSH.
  • root@80.242.57.93 — логин и адрес удаленного сервера. Применяется формат, используемый при подключении по протоколу SSH.
  • :/root/1GB.bin — полный путь на удаленном сервере, куда будет скопирован файл. Также для файла можно задать новое имя.

Для того чтобы скопировать файл при помощи утилиты rsync, необходимо выполнить команду:

rsync -a 1GB.bin root@80.242.57.93:/root

Где:

  • -a — копирует только измененные файлы. Если копирование файла осуществляется впервые, то сначала будет выполнена полная резервная копия, далее при изменении файла будет выполняться только инкрементальное копирование.

Обратите внимание, что указывать путь до закрытого ключа не надо —  rsync автоматически использует ключи, расположенные в директории ./ssh.

По умолчанию rsync не отображает статус своей работы и статус передаваемого файла. Чтобы отображать статус, необходимо использовать опцию --progress или ее сокращенный ключ -p:

rsync --progress -a 1GB.bin root@80.242.57.93:/root

Image1

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

Использование архивов и сжатие файлов

Если вам необходимо перенести текстовые файлы или конфигурационные файлы, лог-файлы, а также файлы HTML, CSS, JavaScript, то имеет смысл их запаковать в один архив, а также сжать.

Обратите внимание, что сжатие идеально подходит лишь для обычных файлов, внутри которых находится обычный текст. Сжимать аудио, видео, бинарные файлы не имеет смысла.

Предположим, нам необходимо перенести 5 текстовых файлов. Размер одного файла составляет 9.7 МБ, а общий размер файлов составляет 48.5 МБ:

Image14

В качестве формата архивов в Unix/Linux-системах используется tar.

tar — утилита для создания файлов архивов. Особенностью tar является то, что утилита сама не производит сжатие, а лишь только объединяет файлы в архив. В качестве сжатия tar использует сторонние утилиты — Gzip и Bzip2.

Gzip —  утилита для сжатия данных. Основным преимуществом является скорость работы.

Bzip2 — утилита для сжатия данных. Основным преимуществом является лучшее качество сжатия по сравнению с утилитой gzip. По умолчанию bzip2 присутствует не во всех дистрибутивах. Для установки в Debian-based-дистрибутивах достаточно выполнить команду:

apt install bzip2 -y  

Рассмотрим использование всех трех утилит на практике. Создадим архив и используем процедуру сжатия при помощи утилиты gzip, задав максимальную степень сжатия (цифра 9), чтобы уменьшить общий размер пяти текстовых файлов:

tar cvf - *.txt | gzip -9 - > bigfiles.tar.gz

Image13

Проверим размер созданного архива при помощи команды du

du -sh bigfiles.tar.gz

Image4

Как можно заметить, мы смогли уменьшить размер пяти текстовых файлов на 11,5 МБ (ранее пять файлов в общей сумме занимали 48.5).

Если же мы укажем минимальную степень сжатия, которая обозначается цифрой 1 (цифра 0 означает, что сжатие не будет использовано), то наш ранее созданный архив будет весить всего лишь на 1 МБ больше:

tar cvf - *.txt | gzip -1 - > bigfiles.tar.gz

Image20

Для того чтобы использовать сжатие при помощи bzip2 вместо gzip, достаточно использовать утилиту bzip2 и задать соответствующее расширение для создаваемого архива — .bz2:

tar cvf - *.txt | bzip2 -9 - > bigfiles.tar.bz2

По умолчанию уровень сжатия в gzip используется на 6 уровне, что является оптимальным выбором для скорости и процедуры сжатия. Для утилиты bzip2 по умолчанию используется максимальный уровень сжатия — 9.

Для отправки созданных архивов воспользуемся следующими командами.

scp

scp -i ~/.ssh/id_rsa bigfiles.tar.gz root@80.242.57.93:/root/bigfiles.tar.gz

rsync

rsync -a bigfiles.tar.gz  root@80.242.57.93:/root

Чтобы разархивировать переданный архив на новом сервере, необходимо выполнить команду:

tar -xvf bigfiles.tar.gz

Перенос базы данных

Если у вас используется база данных для веб-сайта или для хранения каких-либо данных, то ее также необходимо перенести.

Ниже мы рассмотрим пример переноса для СУБД MySQL. Если же в качестве СУБД у вас используется PostgreSQL, воспользуйтесь нашей инструкцией по переносу база данных PostgreSQL.

Сама СУБД должна быть заранее установлена на новом сервере. Для того чтобы установить MySQL на сервер с Ubuntu, воспользуйтесь нашей статьей «Как установить MySQL на Ubuntu».

Также убедитесь, что СУБД MySQL, установленная на новом сервере может принимать удаленные подключения. Чтобы настроить удаленный доступ в MySQL, воспользуйтесь соответствующей инструкцией.

  1. Подключаемся по SSH к серверу на котором установлена MySQL.
  2. Проверяем, что между двумя серверами присутствует сетевое соединение и на новом сервере MySQL разрешено удаленное подключение.
  3. На сервере, где присутствует база данных, выполняем следующую команду:
mysqldump -u alex -p my_site | mysql -h 82.97.250.52 -u user1 -p

Где:

  • -u alex — имя пользователя MySQL, от имени которого будет произведено подключение к базе данных, а также ее перенос;
  • my_site — имя базы данных, которая будет перенесена.
  • -h 82.97.250.52 — IP-адрес или доменное имя удаленного сервера с MySQL, куда будет перенесена баз данных.
  • -u user1 — имя пользователя на удаленном сервере MySQL.

После ввода команды выше у вас будет два раз запрошен пароль — первый пароль от текущего пользователя в MySQL, второй пароль от удаленного пользователя в MySQL.

После того как процесс переноса баз данных будет полностью завершен, подключитесь к новому серверу по SSH, перейдите в консоль MySQL при помощи команды:

mysql -u user1 -p

Где user1 — это имя пользователя, который присутствует в MySQL. 

В консоли mysql выполните команду:

SHOW DATABASES

И убедитесь, что необходимая база данных присутствует на сервере.

Перенос директории с веб-сайтом

Теперь рассмотрим перенос веб-сайта. Предполагается, что в качестве веб-сервера используется Nginx. Перед тем как переносить файлы сайта, необходимо найти директорию, в которой хранится папка с сайтом.

Если пакет Nginx был установлен из стандартного репозитория Ubuntu, то путь по умолчанию, где хранится директория с файлами сайта, — /var/www/html.

Если пакет Nginx был установлен из официального репозитория Nginx, то путь по умолчанию, где хранится директория с файлами сайта, — /usr/share/nginx/html.

Предположим, у нас присутствует сайт, файлы которого занимают 8.6 МБ.

Image21

Создадим сжатый архив папки с сайтом при помощи одной из следующих команд:

gzip

tar -czvf my-site.tar.gz my-site/

После сжатия при помощи стандартного уровня в gzip директория сайта теперь занимает 5 МБ вместо 8.6 МБ:

Image8

Если необходимо задать степень сжатия, то команда будет следующей:

tar cvf - my-site/ | gzip -9 - > my-site.tar.gz

bzip2

Стандартная команда при использовании bzip2:

tar -czvf my-site.tar.bz2 my-site/

Или, с указанием степени сжатия:

tar cvf - my-site/ | bzip2 -9 - > my-site.tar.bz2

Для переноса папки с сайтом необходимо воспользоваться scp или rsync и выполнить одну из следующих команд.

scp

scp -i ~/.ssh/id_rsa my-site.tar.gz  root@80.242.57.93:/var/www/html

Или:

scp -i ~/.ssh/id_rsa my-site.tar.gz  root@80.242.57.93:/usr/share/nginx/html

rsync

rsync -a my-site.tar.gz root@80.242.57.93:/var/www/html

Или:

rsync -a my-site.tar.gz root@80.242.57.93:/usr/share/nginx/html

Чтобы разархивировать переданный архив на новом сервере, необходимо выполнить команду:

tar -xvf my-site.tar.gz

Перенос конфигурационных файлов Nginx

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

Image17

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

Image16

Прежде чем приступать к копированию конфигурации Nginx, проверьте, какая структура используется у вас на текущем (старом) сервере, и установите Nginx на новый сервер в соответствии с используемой ранее конфигурацией, а также с аналогичной версией. Так вы избежите дополнительного редактирования конфигурационных файлов и сможете сразу приступить к запуску своего сайта.

Создаем сжатый архив директории /etc/nginx:

gzip

tar -czvf nginx.gz /etc/nginx/

Если необходимо задать степень сжатия, то команда будет следующей:

tar cvf - /etc/nginx/ | gzip -9 - > nginx.tar.gz

bzip2

tar -czvf nginx.tar.bz2 /etc/nginx/

Или, с указанием степени сжатия:

tar cvf - /etc/nginx/ | bzip2 -9 - > nginx.tar.bz2

Для переноса папки с конфигурацией Nginx необходимо выполнить:

scp

scp -i ~/.ssh/id_rsa nginx.tar.gz  root@80.242.57.93:/etc/nginx/

rsync

rsync -a nginx.tar.gz root@80.242.57.93:/etc/nginx

Чтобы разархивировать переданный архив на новом сервере, перейдите в ту директорию, куда был скопирован архив, и выполните команду:

tar -xvf nginx.tar.gz

Далее необходимо проверить конфигурацию Nginx на наличие возможных ошибок. Для этого необходимо воспользоваться командой:

nginx -t 

При наличии ошибок Nginx отобразит строку с ошибкой? а также ее описание.

Перезагрузите сервис, чтобы Nginx считал новую конфигурацию:

systemctl restart nginx

Перенос домена

Если в проекте присутствует действующий домен, его тоже будет нужно перенести в Timeweb Cloud.

Для начала в качестве проверки вы можете воспользоваться бесплатным техническим доменом. Добавьте технический домен в свою панель управления, как это описано в инструкции по ссылке, и привяжите его к серверу, на который был перенесен ваш проект. Тщательно проверьте работоспособность проекта по техническому домену, просмотрите все разделы сайта и т.д.

Если все в порядке — можно переносить ваш основной домен

Проверка работоспособности

После того как перенос данных был полностью завершен, необходимо убедиться, что перенесенные сервисы были перенесены без ошибок и правильно функционируют. Разберем проверку работоспособности на примере перенесенного сайта.

  1. Первым делом проверьте статус веб-сервера (в данном случае Nginx) при помощи команды:
systemctl status nginx

Если в статусе Nginx отобразилось failed, необходимо проверить лог-файл error.log (по умолчанию находится в /var/log/nginx/access.log) на наличие ошибок. 

Также проверьте синтаксис конфигурации Nginx на наличие возможных ошибок, воспользовавшись командой:

nginx -t
  1. Перейдите в консоль mysql и убедитесь, что присутствует ранее перенесенная база данных. Выполните несколько запросов типа SELECT, чтобы убедиться, что запросы выполняются корректно.
  2. После того как домен был перенесен в Timeweb Cloud, в настройках домена проверьте, что присутствуют все необходимые записи и при открытии домена отображается именно ваш сайт.
  3. Проверьте функционал своего сайта. Перейдите по ссылкам внутри сайта и убедитесь, что они корректно открываются.

Заключение

В данной статье мы подробно рассмотрели процесс переноса пользовательских файлов а также процесс переноса веб-сайта, его базы данных а также доменного имени. Благодаря выполненным шагам вы сможете перенести свой проект и приступить к его работе уже у нового облачного провайдера.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону