С момента появления и развития облачных технологий, на рынке IT-услуг появилось много новых игроков в лице хостинг- и облачных провайдеров, которые предоставляют различные сервисы, начиная от аренды облачных и выделенных серверов и заканчивая арендой кластеров баз данных и Kubernetes. Со временем может возникнуть потребность в смене облачного провайдера. Одна из самых главных задач при миграции — это перенос данных и приложений от одного провайдера к другому. В данной статье мы рассмотрим перенос данных от хостинг-провайдера UpCloud к облачному провайдеру Timeweb Cloud.
UpCloud — это финский-хостинг провайдер, основанный в 2012 году. Помимо аренды облачных серверов, компания предоставляет своим пользователям облачные сервисы по аренде выделенных баз данных, кластеров Kubernetes и сетевых хранилищ данных. Компания располагает 13 дата центрами в 10 странах мира.
Предварительные требования
Для переноса данных из UpCloud в Timeweb Cloud нам понадобится:
-
Учетная запись в UpCloud. Предполагается, что у пользователя арендован и используется облачный или выделенный сервер с данными, которые необходимо перенести.
-
Учетная запись в Timeweb Cloud и арендованный облачный или выделенный сервер. Также на балансе должна присутствовать необходимая сумма для оплаты сервера. При аренде сервера важно выбрать те же характеристики, что и у использовавшегося сервера в UpCloud, включая одинаковый объем оперативной памяти, количество ядер процессора и что самое важное одинаковый объем дискового пространства. Если вы не можете выбрать идентичную конфигурацию для нового сервера, то выберите характеристики сервера чуть больше, чем у сервера в UpCloud. При выборе операционной системы (в данном случае это будет Linux Ubuntu версии 22.04) необходимо выбрать ту, которая будет совпадать с операционной системой установленной на сервере в UpCloud, включая дистрибутив и его версию. Если не соблюдать данное требование, то при переносе части данных, в частности установленных приложений, могут возникнуть ошибки, т.к. в разных дистрибутивах используются разные версии программ, и не все пакеты устанавливаются при помощи официальных репозиториев.
Создание облачного сервера в Timeweb Cloud
После того, как учетная запись в Timeweb Cloud была создана и активирована, можно арендовать облачный сервер.
1) Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля.
2) После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
3) Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04. Используемая версия операционной системы должна совпадать с версией, которая используется на сервере у провайдера UpCloud.
4) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.

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

6) Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. Если не уверены в настройках, оставьте эти параметры без изменений.
Для выхода сервера в Интернет, нужно заказать плавающий IP.
7) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и Москве).

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

Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
Облачные серверы
по всему миру с почасовой оплатой.
Настройка серверов перед процедурой миграции
Перед тем как переходить к процессу миграции данных, необходимо произвести базовую настройку серверов. Для того чтобы облегчить процесс переноса данных между двумя серверами, необходимо настроить авторизацию по ключам в протоколе SSH. Если ключи у вас уже используются, то данные шаги можно пропустить и переходить к следующей главе.
1) На сервере у провайдера UpCloud выполняем команду для генерации новой пары ключей:
По умолчанию ключи сохраняются в рабочей директории пользователя, из-под имени которого запускается команда, и располагаются в скрытой (символ точки перед именем папки) директории .ssh. С целью облегчения переноса данных ключи можно сгенерировать из-под учетной записи root-пользователя.
2) Для использования ключей при подключении по протоколу SSH сначала необходимо скопировать открытый ключ на новый сервер. Это можно сделать при помощи утилиты ssh-copy-id. Команда для копирования открытого ключа на удаленный сервер:
После того как открытый ключ будет успешно скопирован, необходимо убедиться что аутентификация по ключам работает. Для этого достаточно подключиться к серверу по SSH:
Если пароль не был запрошен и вы смогли подключиться, то подключение по SSH-ключам успешно работает.
3) Дополнительно можно проверить что между двумя серверами присутствует сетевое соединение. Можно использовать утилиту ping:
Или утилиту telnet. Telnet предустановлен не во всех дистрибутивах Linux, т.к. является устаревшей программой, однако утилиту активно используют для проверки на возможность установки сетевого взаимодействия. Чтобы установить telnet в Debian-based-дистрибутивах, достаточно выполнить команду:
Telnet проверяет сетевую доступность по порту сервиса. Для этого сначала указывается IP адрес или доменное имя сервера далее через пробел порт сервиса, например 22 порт который по умолчанию использует сервис SSH:
Если удаленный хост может принимать соединение по указанному порту то в ответ команда вернет сообщение «Connected to». Чтобы закрыть сессию telnet, достаточно нажать на клавишу Enter.
Если сервис SSH использует другой порт, то вместо 22 порта необходимо задать тот, который указан в конфигурационном файле SSH-сервера.
4) Если на серверах используется UFW (Uncomplicated Firewall) или iptables для контроля сетевого трафика, то необходимо открыть порт, который использует SSH.
Синтаксис команды для открытия 22 порта для UFW:
При необходимости UFW можно остановить:
Если используется iptables:
Для входящих соединений на порт 22:
Для исходящих соединений на порт 22:
Перенос установленных приложений
Пакеты, которые установлены на одном сервере Linux, можно перенести на другой сервер Linux только при условии, что на обоих серверах используется один и тот же дистрибутив (например, Ubuntu) и одной и той же версии. Один из способов заключается в использовании утилиты apt-clone, при помощи которой можно перенести установленные пакеты на другой дистрибутив Linux, который в качестве пакетного менеджера использует APT.
1) Для начала установим утилиту на сервере который находится в UpCloud при помощи команд:
2) Далее создадим архив с именем my-packages, в который будет сохранены все установленные пакеты в системе:

Иногда при сохранении пакетов apt-clone может вывести сообщение, что часть пакетов не удается сохранить. В этом случае можно попробовать использовать опцию --with-dpkg-repack, чтобы попытаться сохранить пакеты, с которыми возникла проблема:
После выполнения команды, apt-clone создаст сжатый tar-архив:

Сохраненный архив необходимо отправить на сервер, арендованный у Timeweb Cloud. Скопировать архив можно, например, используя утилиту scp:

3) Переходим на сервер провайдера Timeweb Cloud. Сначала устанавливаем утилиту apt-clone:
4) Далее восстанавливаем перенесенный архив с пакетами:

Установленные ранее приложения на сервере UpCloud успешно перенесены на новый сервер в Timeweb Cloud.
Перенос пользовательских и системных файлов
Если на сервере присутствуют конфигурационные файлы, лог-файлы, файлы html, xml и т.д., то их можно легко перенести, воспользовавшись встроенной утилитой scp, которая копирует файлы между двумя серверами.
По умолчанию утилита будет запрашивать пароль пользователя каждый раз при копирование файлов с хоста на удаленный сервер в связи с тем, что scp работает по протоколу SSH. Чтобы не вводить пароль каждый раз при процедуре копирования, необходимо использовать SSH-ключи — их мы создали в предыдущей главе.
Для копирования одинарных файлов без использования SSH-ключей достаточно выполнить команду:
Для копирования файлов с использованием SSH-ключей необходимо выполнить команду:
Где:
-i ~/.ssh/id_rsa— полный путь до файла с закрытым ключом. В данном примере закрытый (приватный) ключ находится в домашнем каталоге пользователя, из-под которого запускается команда, в скрытой директории.ssh.first-file.txt— имя файла, который будет скопирован на удаленный хост. В данном случае предполагается, что команда для копирования запускается в той директории, где находится файлfirst-file.txt. Если файл размещен в другой директории, необходимо задать полный путь до файла.dev-user@147.45.143.163— имя пользователя и адрес сервера. Используется синтаксис команды SSH.:/home/dev-user— полный путь на удаленном сервере, куда будет сохранен файл.
Чтобы скопировать несколько файлов, их необходимо указать поочередно через пробел:
Также можно использовать символы регулярных выражений. Вот так можно скопировать все файлы, которые оканчиваются на .log и располагаются в текущей директории:
Для копирования директорий необходимо использовать ключ -r:
Если вам необходимо скопировать файлы сайта (файлы html, css, javascript, php и прочие), логи или конфигурационные файлы, то их можно предварительно сжать и поместить в архив.
Рассмотрим ситуацию, когда нам необходимо скопировать целый сайт. Конфигурационные файлы сайта находятся в директории /var/www/html/payment-dev.
С целью уменьшения объема копируемых данных воспользуемся процедурой сжатия. Для сжатия в Linux принято использовать программы Gzip и Bzip2.
Отличие Gzip от Bzip2 заключается в скорости работы, однако Bzip2 лучше сжимает данные. Также по умолчанию Bzip2 предустановлен не во всех дистрибутивах. Если в вашей системе Bzip2 отсутствует, то утилиту необходимо установить:
Чтобы заархивировать директорию, содержащую файлы сайта, сначала создадим архив при помощи утилиты tar, далее воспользуемся сжатием:
На выходе будет создан архив payment-dev.tar.gz. Цифра 9 в команде gzip означает использование максимальной степени сжатия. Это означает, что готовый архив будет занимать меньше места на диске, но для операций архивирования/разархивирования будет затрачиваться больше времени. Данную особенность стоит учитывать при работе с файлами большого объема. gzip, как и bzip2, поддерживает степени сжатия начиная от 0 до 9, где 0 — полное отсутствие сжатия, а 9 — максимальное сжатие.
Для передачи архива воспользуемся командой (предполагается, что на удаленном хосте уже создана директория):
Чтобы разархивировать скопированный архив на новом сервере, необходимо перейти в директорию, куда он был сохранен, и выполнить команду:
Если необходимо использовать bzip2 вместо gzip, то достаточно просто заменить название утилиты:
Перенесите свой проект в Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
В сегодняшней статье мы проанализировали процесс переноса файлов с сервера облачного провайдера UpCloud на сервер провайдера Timeweb Cloud. Благодаря шагам по переносу можно легко перенести свои данные и приступить к работе на новом сервере.
