В сегодняшних реалиях IT-инфраструктуру можно использовать двумя путями: купить собственное железо и самостоятельно заниматься его установкой и настройкой или воспользоваться арендой необходимого оборудования у хостинг- и облачных провайдеров. В этом случае пользователю достаточно выбрать необходимые характеристики арендуемого оборудования и внести оплату. Далее можно развернуть свой проект, не производя установку и настройку как «железа», так и программного обеспечения — всем этим будет заниматься провайдер облачных услуг.
Порой возникают ситуации когда необходимо перенести данные к новому провайдеру. К процессу миграции необходимо подготовиться заранее, чтобы он прошел быстро и гладко. Сегодня мы рассмотрим процесс миграции из облачного провайдера Linode к облачному провайдеру Timeweb Cloud на примере переноса веб-сайта.
Для переноса данных из Linode в Timeweb Cloud необходимо следующее:
Доступ к учетной записи в Linode и присутствующему в ней облачному серверу. Предполагается, что на сервере развернут веб-сайт, который будет перенесен.
Учетная запись в Timeweb Cloud и арендованный облачный/выделенный сервер.
При заказе сервера желательно выбрать такую же конфигурацию, что и у сервера в Linode: тот же объем оперативной памяти, количество ядер процессора и объем места на жестком диске или SSD/NVMe. При невозможности заказать идентичную конфигурацию, рекомендуем выбрать конфигурацию немного больше, чем у прежнего сервера. Также важна операционная система — она должна строго соответствовать той, которая используется на предыдущем сервере. В рамках данной статьи в Linode используется Debian 12. Соответственно, на новом арендуемом сервере у провайдера Timeweb Cloud тоже необходимо выбрать Debian 12.
Доменное имя сайта. Если будет использоваться прежнее доменное имя, которое зарегистрировано у другого регистратора, то его тоже можно перенести в Timeweb Cloud.
Linode — это американский хостинг- и облачный провайдер, который предоставляет услуги по аренде облачных серверов, а также различных сетевых сервисов: средств для защиты от DDoS, балансировщиков для сетевого трафика, аренде частных сетей, предоставлению решений для хранения данных и для резервного копирования и прочих сетевых услуг. 15 февраля 2022 года хостинг был куплен крупнейшим CDN-провайдером Akamai.
Зарегистрируйтесь на сайте Timeweb Cloud, если вы еще не являетесь клиентом, после чего перейдите в панель управления. Далее вам нужно заказать облачный сервер.
1) Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
2) Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Debian 12 версии.
3) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
4) Далее выбираем необходимую конфигурацию для сервера. В качестве конфигурации сервера выберем двухъядерный процессор и 40 ГБ жесткого диска. В реальности вам необходимо выбирать именно ту конфигурацию, которая используется на сервере провайдера Linode. Выбираем соответствующий тариф:
5) Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. Если не уверены в настройках, оставьте эти параметры без изменений.
Также нужно заказать для сервера внешний IPv4-адрес.
6) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и Москве).
7) Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
8) Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.
9) Для создания сервера необходимо нажать на кнопку «Заказать».
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
Для начала необходимо подготовить серверы к процессу миграции сайта.
Во время процесса копирования необходимо использовать пользователя, из-под которого будет произведено подключение к удаленному серверу. Несмотря на то что, при копировании файлов можно использовать root-пользователя, это не является безопасной практикой. Создадим нового пользователя на сервере Timeweb Cloud.
1) Для создания пользователей можно воспользоваться встроенной утилитой adduser
. Создадим нового пользователя с именем alex
:
adduser alex
2) Задаем пароль создаваемому пользователю и подтверждаем его:
3) Данные пользователя можно не заполнять, достаточно пять раз нажать на клавишу ENTER и в конце ввести букву Y:
После этого пользователь будет создан в системе.
Для удобства настроим SSH на работу с ключами, чтобы при переносе данных на новый сервер каждый раз не вводить пароль. Для этого выполним следующие действия:
1) На сервере Linode генерируем ключи SSH:
ssh-keygen
По умолчанию ключи будут сохранены в домашнем каталоге пользователя, который запустил команду для создания ключей, а именно в скрытой директории .ssh
.
2) Теперь необходимо отправить открытый ключ на новый сервер Timeweb Cloud при помощи утилиты ssh-copy-id
:
ssh-copy-id -i ~/.ssh/id_rsa.pub alex@147.45.155.61
Где:
-i ~/.ssh/id_rsa.pub
— полный путь до файла с открытым ключом.alex@147.45.155.61
— имя пользователя и адрес удаленного сервера.3) Произведем попытку подключения к серверу:
ssh alex@147.45.155.61
Если система не запросила пароль и на сервер удалось войти, то аутентификация по SSH ключам успешно работает.
Если же при подключении по SSH возникают ошибки, убедитесь, что между двумя серверами доступно сетевое взаимодействие, а при использовании firewall — открыты необходимые порты. Воспользуемся утилитой ping
:
ping 147.45.155.61
Пинг успешно выполняется.
Дополнительно можно использовать утилиту telnet
, которая проверяет сетевой доступ, используя порт сервиса. Утилита telnet
установлена не во всех дистрибутивах Linux. Если в вашей системе ее нет, установите ее при помощи команды:
apt -y install telnet
Чтобы проверить, может ли удаленный хост принимать сетевой трафик на 22 порт, необходимо выполнить команду:
telnet 147.45.155.61 22
Ответ «Connected to telnet» сообщает, что сетевое соединение до указанного хоста и порта было успешно установлено. Чтобы закрыть сессию telnet
, необходимо нажать на клавишу Enter.
Если на хостах используется firewalld
, то убедитесь что порт для SSH открыт. Если нет, то необходимо открыть 22 порт (если дефолтный порт был изменен, то необходимо открыть измененный порт). Также необходимо открыть порты 80 для веб-сайта (если сайт использует другой порт, то замените 80 на необходимый) и 443 (используется для протокола HTTPS по умолчанию).
Если используется UFW:
ufw allow 22
ufw allow 80,443
Если используется iptables:
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 -j ACCEPT
В качестве веб-сервера у нас используется Nginx. Перед тем как переносить наш сайт, установим Nginx на новом сервере в Timeweb Cloud:
apt -y install nginx
После того как необходимая настройка серверов была успешно завершена, можно приступать к переносу веб-сайта на новый сервер. Для начала перенесем директорию, в которой хранятся конфигурационные файлы сайта.
1) По умолчанию веб-сайты хранятся в директории /var/www/html
. Перейдем в нее:
cd /var/www/html
2) Создадим .tar-архив, в котором будет находиться директория сайта. Чтобы уменьшить объем передаваемых файлов, воспользуемся сжатием. Для этого задействуем утилиту gzip
, которая предустановлена почти во всех современных дистрибутивах Linux. Команда ниже создаст сжатый .tar-архив с именем my-company-site.tar.gz
директории my-company-site
, которая находится в /var/www/html
:
tar cvf - my-company-site/ | gzip -9 - > my-company-site.tar.gz
Цифра 9 означает максимально использованную степень сжатия. На выходе мы получим наш сжатый архив.
3) Используя утилиту scp
, скопируем архив на новый сервер:
scp -i ~/.ssh/id_rsa my-company-site.tar.gz alex@147.45.155.61:/home/alex
Архив был скопирован в домашний каталог пользователя alex
, а не сразу в /var/www/html
в связи с тем, что, как правило, у обычных пользователей нет прав на директорию /var/www/html
.
4) После того как архив был перенесен на новый сервер, необходимо разархировать его при помощи команды:
tar -xvf my-company-site.tar.gz
5) Извлеченную директорию (в нашем случае это my-company-site
) необходимо перенести в /var/www/html
. Проделать эту операцию может root пользователь или обычный пользователь, у которого есть права sudo
:
mv my-company-site /var/www/html
Или:
sudo mv my-company-site /var/www/html
6) Проверяем, что директория была успешно перенесена:
ls -l /var/www/html
7) При необходимости задайте нужного владельца и группу директории с сайтом, например, назначив владельцем пользователя www-data
и его одноименную группу:
chown www-data:www-data my-company-site/
А также необходимо задать права доступа:
chmod 755 my-company-site/
Также необходимо перенести конфигурационные файлы Nginx. По умолчанию все конфигурационные файлы Nginx находятся в директории /etc/nginx
. Воспользуемся тем же способом, что и при переносе папки с сайтом, — создадим сжатый .tar-архив и отправим его на новый сервер.
1) Переходим в директорию /etc
:
cd /etc
Создаем сжатый .tar-архив:
tar cvf - nginx/ | gzip -9 - > nginx-configuration.tar.gz
2) Созданный архив копируем на новый сервер:
scp -i ~/.ssh/id_rsa nginx-configuration.tar.gz alex@147.45.155.35:/home/alex
3) Как и в случае с переносом директории веб-сайта, архив с конфигурационными файлами Nginx был скопирован в домашнюю директорию обычного пользователя, так как в директории /etc
все файлы по умолчанию принадлежат root
-пользователю, а мы производили копирование архива от имени обычного пользователя. После того как архив был передан на новый сервер, переходим в папку с архивом (в нашем случае это /home/alex
) и разархивируем его:
tar -xvf nginx-configuration.tar.gz
4) Извлеченную директорию nginx
необходимо скопировать в директорию /etc
:
cp -r nginx /etc/
Используемая команда cp
не только скопирует файлы, но и перезапишет те файлы, в которые были внесены изменения.
Если ваш сайт использует базу данных, ее тоже необходимо перенести. Предположим у нас используется PostgreSQL. Для начала необходимо установить саму СУБД на новом сервере.
1) После установки PostgreSQL на новом сервере нам необходимо разрешить удаленный доступ до СУБД, т.к. по умолчанию разрешены только локальные подключения. Для этого необходимо открыть на редактирование конфигурационный файл postgresql.conf
, который находится по пути /etc/postgresql/<версия_postgresql>/main/postgresql.conf
. Например:
nano /etc/postgresql/16/main/postgresql.conf
2) Необходимо отредактировать параметр listen_addresses
. По умолчанию он поддерживает только локальные соединения. Можно точечно указать необходимые адреса, с которых будет разрешено подключение, или разрешить доступ со всех адресов с помощью символа *
. В тестовых целях можно разрешить доступ со всех адресов:
listen_addresses = '*'
После того как процесс переноса базы данных будет завершен, закомментируйте параметр listen_addresses
или укажите только разрешенные адреса. Сохраняем изменения и выходим из файла.
3) Следующий файл, который нам необходимо отредактировать, называется pg_hba.conf
. Файл находится в директории /etc/postgresql/<версия_postgresql>/main/
. Откроем его:
nano /etc/postgresql/16/main/pg_hba.conf
Найдите в нем строку под следующим комментарием:
# IPv4 local connections
И приведите ее к следующему виду:
В данном примере мы разрешили доступ со всех адресов, это является небезопасной практикой. Вместо 0.0.0.0/0
можно задать конкретный адрес. Сохраняем изменения и выходим из файла.
4) Чтобы все внесенные изменения были применены, необходимо перезапустить сервис postgresql
:
systemctl restart postgresql
5) Также необходимо заранее создать базу данных с таким же именем, как база на старом сервере. Для этого переходим в консольный интерфейс утилиты psql
под пользователем postgres
:
sudo -i -u postgres psql
Если подключение к базе данных осуществляется под другим пользователем, то вместо пользователя postgres
укажите нужного.
6) Создаем базу данных с тем же именем, которое используется на сервере в Linode:
CREATE DATABASE db-for-site
7) Далее подключаемся к серверу Linode и выполняем копирование базы данных на новый сервер в Timeweb Cloud при помощи следующей команды:
pg_dump -h localhost -U postgres db-for-site | psql -h 147.45.155.61 -U postgres db-for-site
Где:
-U postgres
— пользователь, из-под которого подключаемся к базе на текущем сервере БД.db-for-site
— имя копируемой базы данных.-h 147.45.155.61
— IP-адрес сервера, куда копируем базу данных.-U postgres
— пользователь, из-под которого подключаемся к удаленной базе данных.db-for-site
— имя базы данных, в которую будет скопирована переносимая БД. Должна быть заранее создана на новом сервере.Действующий домен можно перенести в Timeweb Cloud. Перед началом процесса переноса можно воспользоваться опцией технического домена. Сгенерированный технический домен необходимо добавить в свою панель управления, как это описано в инструкции по ссылке, и привязать к серверу, на который был перенесен ваш веб-сайт. После этого выполните полную проверку работоспособности сайта.
После того как функционал сайта будет полностью проверен, можно приступать к переносу вашего основного домена. Инструкция по переносу доступна по ссылке.
Когда все процедуры по переносу данных сайта будут завершены необходимо выполнить следующие шаги на новом сервере для проверки работоспособности:
1) Проверьте конфигурацию Nginx на наличие ошибок при помощи команды:
nginx -t
Если в конфигурации будут ошибки, то команда вернет описание ошибки, имя файла, в котором была найдена ошибка, и номер строки.
2) Перезапустите Nginx, чтобы все ранее внесенные изменения были применены:
systemctl reload nginx
3) В настройках перенесенного домена необходимо убедиться в наличии всех необходимых DNS записей. Также при переходе по доменному имени отображается именно ваш сайт.
Сегодня мы подробно рассмотрели процесс переноса веб-сайта от провайдера Linode к облачному провайдеру Timeweb Cloud. Помимо переноса файлов веб-сайта мы также рассмотрели процесс переноса базы данных и доменного имени. После переноса всех данных вы сможете сразу пользоваться своим сайтом в полном объеме.