В последнее время пользователям из России становится все труднее использовать иностранные хостинг-провайдеры. Помимо проблем, связанных с оплатой услуг, провайдеры также вводят различные ограничения. В связи с этим возникает задача по переносу существующих данных от одного провайдера к другому. В данной статье будет рассмотрена миграция от хостинг-провайдера Vultr к облачному провайдеру Timeweb Cloud.
Vultr — это облачный и хостинг-провайдер, который предоставляет услуги по аренде VPS/VDS-серверов, а также PaaS- и SaaS-решений. Компания относительная молодая и была основана в 2014 году. Главный офис находится в США, штат Флорида. Дата центры компании находятся на всех 6 континентах в 32 странах.
Для миграции данных и файлов необходимо следующее:
Действующий сервер или виртуальная машина на хостинге Vultr.
Арендованный сервер или виртуальная машина на облаке Timeweb Cloud. Очень важно выбрать сервер, который будет максимально похож на предыдущий по аппаратным характеристикам, включая одинаковое количество ядер процессора, объем оперативной памяти и, главное, одинаковый объем жесткого диска. Не менее важным параметром является использование одинаковой версии операционной системы. В данной статье на серверах двух провайдеров будет использоваться Ubuntu версии 22.04.
Чтобы арендовать облачный или выделенный сервер в Timeweb Cloud, необходимо пройти регистрацию.
Переходим по ссылке для регистрации нового пользователя. Мы выберем регистрацию на физическое лицо и заполним следующие данные:
ФИО,
адрес электронной почты,
После регистрации на указанный адрес почты придет сообщение с ссылкой для активации аккаунта и входа в панель — перейдите по ней.
После того, как учетная запись была создана и активирована, можно арендовать облачный сервер.
1) Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи ВКонтакте, GitHub, Google.
2) После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
3) Выбираем операционную систему, которая будет установлена на сервер. Необходимо использовать тот дистрибутив и ту версию операционной системы, которая используется на другом хостинге. В нашем случае в хостинге Vultr используется Ubuntu 22.04 — этот же дистрибутив и версию операционной системы мы и будем использовать при аренде сервера в Timeweb Cloud.
4) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
5) Далее выбираем необходимую конфигурацию для сервера. Так как ранее уже было упомянуто что необходимо выбирать те же характеристики, что и у другого сервера, то выбираем конфигурацию сервера на основе двухъядерного процессора, 2 ГБ оперативной памяти и 40 ГБ жесткого диска. Если же вы не нашли вашу конфигурацию сервера в разделе «Фиксированная конфигурация», то перейдите в раздел «Произвольная конфигурация» в которой вы можете сами выбрать любую конфигурацию. Выбираем соответствующий тариф:
6) Обязательно выберите внешний IP-адрес, чтобы сервер был доступен из внешний сети.
7) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна в Санкт-Петербурге и Москве).
8) Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
9) Можно задать необходимое имя для сервера, которое будет отображаться в панели управления, а также выбрать проект.
10) Для создания сервера необходимо нажать на кнопку «Заказать»:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
После того, как оба сервера готовы к работе, необходимо выполнить несколько действий перед началом процесса миграции и переноса данных.
root
, то перенос файлов будет осуществляться от имени root-пользователя. Для начала на сервере, который используется у провайдера Vultr, необходимо выполнить команду:ssh-keygen
Сохраним ключи в директорию по умолчанию — .ssh
, которая размещена в домашней директории root-пользователя (/root
):
sshd_config
:nano /etc/ssh/sshd_config
Найдите параметр PermitRootLogin
, раскомментируйте его, убрав символ решетки #
, если он закомментирован, и в качестве значения укажите yes
:
PermitRootLogin yes
Сохраните изменения и выйдите из файла.
ssh
при помощи команды:systemctl restart ssh
Обратите внимание, что предоставление root-пользователю прав на подключение по SSH является довольно небезопасной практикой.
После того как перенос всех необходимых данных на новый сервер будет полностью закончен, на новом сервере необходимо выключить возможность входа для root-пользователя. Для этого будет необходимо заменить значение
yes
параметраPermitRootLogin
наno
и перезагрузить демон SSH командой:systemctl restart ssh
ssh-copy-id
. Для того чтобы скопировать ранее сгенерированный открытый ключ, необходимо выполнить команду:ssh-copy-id -i ~/.ssh/id_rsa.pub root@80.242.57.93
Где:
-i ~/.ssh/id_rsa.pub
— полный путь до файла с открытым ключом в формате .pub
;root@80.242.57.93
— логин и адрес удаленного сервера, на который будет скопирован открытый ключ.Проверяем, что на новый сервер можно попасть без пароля:
ssh root@80.242.57.9
Если пароль не был запрошен и вы смогли подключиться, то подключение по SSH-ключам успешно работает.
Также убедитесь, что между двумя серверами присутствует сетевое соединение. Для этого можно воспользоваться утилитой ping
. Например, проверим, может ли новый сервер с IP-адресом 80.242.57.93 принимать сетевые подключения:
ping 80.242.57.93
Как можно увидеть на скриншоте выше, пинг успешно проходит.
Также можно воспользоваться утилитой telnet
. Telnet может быть не установлен по умолчанию, для его установки необходимо выполнить команду:
apt -y install telnet
В отличие от утилиты ping
, telnet
проверяет доступность по порту. Порт для SSH по умолчанию 22. Проверим, доступен ли новый сервер с IP-адресом 80.242.57.93 по 22 порту:
telnet 80.242.57.93 22
Если в ответ команда вывела строку 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 ГБ:
Мы можем использовать два популярных инструмента для копирования файлов: 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
Где:
-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
Таким образом, используя удобную вам утилиту, можно перенести необходимые файлы на новый сервер.
Если вам необходимо перенести текстовые файлы или конфигурационные файлы, лог-файлы, а также файлы HTML, CSS, JavaScript, то имеет смысл их запаковать в один архив, а также сжать.
Обратите внимание, что сжатие идеально подходит лишь для обычных файлов, внутри которых находится обычный текст. Сжимать аудио, видео, бинарные файлы не имеет смысла.
Предположим, нам необходимо перенести 5 текстовых файлов. Размер одного файла составляет 9.7 МБ, а общий размер файлов составляет 48.5 МБ:
В качестве формата архивов в 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
Проверим размер созданного архива при помощи команды du
:
du -sh bigfiles.tar.gz
Как можно заметить, мы смогли уменьшить размер пяти текстовых файлов на 11,5 МБ (ранее пять файлов в общей сумме занимали 48.5).
Если же мы укажем минимальную степень сжатия, которая обозначается цифрой 1 (цифра 0 означает, что сжатие не будет использовано), то наш ранее созданный архив будет весить всего лишь на 1 МБ больше:
tar cvf - *.txt | gzip -1 - > bigfiles.tar.gz
Для того чтобы использовать сжатие при помощи 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, воспользуйтесь соответствующей инструкцией.
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 МБ.
Создадим сжатый архив папки с сайтом при помощи одной из следующих команд:
gzip
tar -czvf my-site.tar.gz my-site/
После сжатия при помощи стандартного уровня в gzip
директория сайта теперь занимает 5 МБ вместо 8.6 МБ:
Если необходимо задать степень сжатия, то команда будет следующей:
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 производилась при помощи официального репозитория Ubuntu, то структура файлов будет выглядеть следующим образом:
Если же установка Nginx производилась при помощи официального репозитория Nginx, то структура файлов будет выглядеть так:
Прежде чем приступать к копированию конфигурации 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.
Для начала в качестве проверки вы можете воспользоваться бесплатным техническим доменом. Добавьте технический домен в свою панель управления, как это описано в инструкции по ссылке, и привяжите его к серверу, на который был перенесен ваш проект. Тщательно проверьте работоспособность проекта по техническому домену, просмотрите все разделы сайта и т.д.
Если все в порядке — можно переносить ваш основной домен.
После того как перенос данных был полностью завершен, необходимо убедиться, что перенесенные сервисы были перенесены без ошибок и правильно функционируют. Разберем проверку работоспособности на примере перенесенного сайта.
systemctl status nginx
Если в статусе Nginx отобразилось failed
, необходимо проверить лог-файл error.log
(по умолчанию находится в /var/log/nginx/access.log
) на наличие ошибок.
Также проверьте синтаксис конфигурации Nginx на наличие возможных ошибок, воспользовавшись командой:
nginx -t
mysql
и убедитесь, что присутствует ранее перенесенная база данных. Выполните несколько запросов типа SELECT
, чтобы убедиться, что запросы выполняются корректно.В данной статье мы подробно рассмотрели процесс переноса пользовательских файлов а также процесс переноса веб-сайта, его базы данных а также доменного имени. Благодаря выполненным шагам вы сможете перенести свой проект и приступить к его работе уже у нового облачного провайдера.