Иногда в инфраструктуре возникает задача перенести веб-сервер на новую машину например, из-за обновления оборудования, миграции на новый хостинг или разделения нагрузки.
В этой статье покажу простой и практический пример миграции 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 он отключен.
- Устанавливаем пароль для root
sudo passwd - Изменяем конфигурацию 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
Главное — соблюдать последовательность действий и не забывать про резервные копии.