Миграция Linux перенос веб-сервисов и базы данных

Миграция Linux перенос веб-сервисов и базы данных

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

В этой статье покажу простой и практический пример миграции Linux веб-сервера с базами данных и сервисами.

Исходные данные

Имеется старый сервер, на котором работают веб-приложения, база данных и другие сервисы. Необходимо перенести всё на новый сервер.

Старый сервер
kajikov@old:~$ ip a | grep ens192 2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 inet 192.168.60.101/24 brd 192.168.60.255 scope global ens192
Новый сервер
kajikov@web:~$ ip a | grep ens 2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 inet 192.168.60.131/24 brd 192.168.60.255 scope global ens192

Подготовка нового сервера

Сначала необходимо обновить систему.
sudo apt update && sudo apt upgrade -y

Далее устанавливаем те же компоненты, которые используются на старом сервере.
В моем случае это Nginx, MySQL, Node.js и Ghost.

Установка Node.js
Сначала устанавливаем необходимые зависимости:
sudo apt install -y ca-certificates curl gnupg
Добавляем репозиторий Node.js версии 22:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
Устанавливаем Node.js:
sudo apt install -y nodejs
Проверяем установленную версию:
node -v
Установка Ghost CLI
sudo npm install -g ghost-cli@1.28.4

Проверка версий на старом сервере
Перед миграцией полезно убедиться, какие версии сервисов используются на старой машине.
root@old:~# ghost -v Ghost-CLI version: 1.28.4 root@old:~# node -v v22.22.0 root@old:~# mysql -v Server version: 8.0.45-0ubuntu0.24.04.1 (Ubuntu) root@old:~# nginx -v nginx version: nginx/1.24.0 (Ubuntu)

Это помогает установить такие же версии ПО на новом сервере, чтобы избежать проблем совместимости.
Включение SSH-доступа для root
Для удобства переноса файлов временно включим SSH-доступ для root на старом сервере.
По умолчанию в Ubuntu он отключен.

  1. Устанавливаем пароль для root
    sudo passwd
  2. Изменяем конфигурацию SSH
    sudo nano /etc/ssh/sshd_config
    Находим строку:
    PermitRootLogin
    Изменяем на:
    PermitRootLogin yes
    Также проверяем:
    PasswordAuthentication yes
    После этого перезапускаем SSH:
    sudo systemctl restart ssh
    Теперь можно подключаться к серверу по SSH от имени root.
    Создание резервной копии базы данных
    На старом сервере создаём дамп всех баз данных MySQL.
    mysqldump -u root -p --all-databases > alldb.sql
    Проверяем файл:
    ls -la -rw-r--r-- 1 root root 2399463 Mar 14 20:40 alldb.sql

Перенос веб-файлов
Теперь переносим файлы сайта со старого сервера на новый с помощью rsync.
sudo rsync -avz root@192.168.60.101:/var/www/ /var/www/

Перенос конфигураций Nginx
Копируем конфигурации веб-сервера:
`
sudo rsync -avz root@192.168.60.101:/etc/nginx/sites-available/ /etc/nginx/sites-available/

sudo rsync -avz root@192.168.60.101:/etc/nginx/sites-enabled/ /etc/nginx/sites-enabled/
`

Перенос SSL-сертификатов
Если используется Let's Encrypt (Certbot):
sudo rsync -avz root@192.168.60.101:/etc/letsencrypt/ /etc/letsencrypt/

Перенос дампа базы данных
Скопируем дамп базы данных:
sudo rsync -avz root@192.168.60.101:/root/alldb.sql /home/kajikov/
Проверяем файл:
ls -la alldb.sql -rw-r--r-- 1 root root 2399463 Mar 14 20:40 alldb.sql
Импорт базы данных
Импортируем дамп в MySQL на новом сервере:
sudo mysql -u root -p < alldb.sql
Проверяем список баз данных:
mysql> show databases;
Результат:
+--------------------+
| Database |
+--------------------+
| bagisto |
| easyapp |
| easyappointments |
| ghost |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
Все базы успешно перенесены.

Завершающие шаги
После миграции необходимо проверить:

  • владельцев файлов и каталогов
  • пользователей системы
  • конфигурацию сервисов
  • systemd unit-файлы
  • настройки Nginx
  • доступность сайтов
    При необходимости исправляем владельцев:
    sudo chown -R www-data:www-data /var/www
    Перезапускаем сервисы:
    sudo systemctl restart nginx
    sudo systemctl restart mysql

Итог
Таким образом можно быстро перенести Linux веб-сервер с:
веб-приложениями
конфигурацией Nginx
SSL-сертификатами
базами данных MySQL
Главное — соблюдать последовательность действий и не забывать про резервные копии.