Архив рассылок сообщества снова открыт. Читать письма 2003-2009
Главная/Блог/Эксплуатация
Эксплуатация15 мин чтенияНиколай Ковалёв

Миграция с CentOS 7 в 2026: AlmaLinux, Rocky Linux или новый сервер

Инвентаризация, бэкап, ELevate и leapp пошагово, перенос на параллельную машину, что ломается в EL8/EL9 и что проверить после переезда.

Руки в перчатках переносят дисковые салазки из старой серверной стойки в новую

Коротко: поддержка CentOS 7 закончилась 30 июня 2024 года, обновлений безопасности для неё больше нет. Переезжать можно двумя путями: обновить систему на месте через AlmaLinux ELevate (CentOS 7 → AlmaLinux 8, дальше 9 и 10) или поднять новый сервер на AlmaLinux, Rocky Linux, Debian или Ubuntu и перенести на него данные. Обновление на месте быстрее, параллельный сервер надёжнее и даёт простой откат. В обоих случаях начинайте с инвентаризации и проверенного бэкапа.

CentOS 7 до сих пор работает на множестве серверов: старые интернет-магазины, внутренние CRM, биллинг, почта, «сервер, который настроил человек, давно ушедший из компании». Пока он работает, переезд откладывают. Но новые уязвимости в ядре, OpenSSL и glibc для него уже не закрываются, официальные зеркала отключены, а свежие версии PHP, Python и баз данных под него просто не собираются.

ОС переезжает относительно предсказуемо. Больше всего времени обычно съедает приложение: код на PHP 5.6 или Python 2 на новой системе не запустится без доработки, и тогда задача уходит от администратора к разработчикам. Если автора проекта уже нет, такую часть работы обычно передают подрядчику, который сопровождает старые веб-проекты, а администратор готовит сервер и план переезда. Ниже разберём, как выбрать целевую систему и способ миграции, какие команды выполнить и что проверить после.

Почему нельзя оставаться на CentOS 7

Сервер без обновлений продолжает работать, пока однажды не перестанет. Вот что копится всё это время:

  • Безопасность. Исправления для ядра, OpenSSL 1.0.2, OpenSSH 7.4 и sudo больше не выходят. Любая новая публичная уязвимость остаётся открытой навсегда.
  • Репозитории. mirror.centos.org отключён, yum install без правки репозиториев падает с ошибкой. Пакеты остались только в архиве vault.centos.org.
  • Софт. В базовой системе PHP 5.4, Python 2.7, MariaDB 5.5 и PostgreSQL 9.2. Современные фреймворки, CMS и драйверы баз требуют версий новее, а сторонние репозитории для EL7 один за другим закрываются.
  • TLS. OpenSSL 1.0.2 не умеет TLS 1.3, поэтому сервер не пройдёт требования сервисов, которые отключают старые версии протокола.

Платная расширенная поддержка RHEL 7 до 2028 года существует, но она нужна в основном тем, кто сидит на официальной RHEL и связан требованиями вендоров. Для типичного веб-сервера на бесплатном CentOS разумнее переезжать.

Куда переезжать с CentOS 7: сравнение систем

Если на сервере много конфигов, заточенных под Red Hat (пути /etc/httpd, SELinux, firewalld, юниты из RPM), проще остаться в семействе EL. Если вы и так используете Debian на других машинах, переезд на него избавит от двух разных экосистем в парке.

СистемаПоддержкаМиграция с CentOS 7Кому подходит
AlmaLinux 8 / 9 / 108 — до 2029, 9 — до 2032, 10 — до 2035На месте через ELevate или на новый серверТем, кто хочет сохранить привычный RHEL-стек
Rocky Linux 8 / 98 — до 2029, 9 — до 2032Проект рекомендует чистую установку и перенос данныхТем, кто готов поднять новый сервер
RHEL 8 / 9По подпискеLeapp от Red Hat, коммерческая поддержкаКомпаниям с требованиями сертификации
Debian 13 / Ubuntu 24.04 LTSОколо 5 лет с учётом LTSТолько новый сервер, конфиги переписываютсяТем, у кого остальной парк на Debian-семействе

Подробнее о различиях дистрибутивов — в статье Как выбрать дистрибутив Linux в 2026. Учтите требования к процессору: AlmaLinux и RHEL 9 требуют набор инструкций x86-64-v2, а RHEL 10 — x86-64-v3. Для очень старого железа у AlmaLinux 10 есть отдельная сборка под v2, но проверить CPU лучше заранее.

Что выбрать: обновление на месте или новый сервер

Короткий ответ: стандартный стек и снапшоты — пробуйте ELevate на клоне; боевой сервис с самосборным софтом — поднимайте новую машину. От этого решения зависят простой, риск и объём ручной работы.

КритерийНа месте (ELevate)Новый сервер
ПростойОт 30 минут до нескольких часов, с перезагрузкамиМинуты на переключение DNS или IP
ОткатТолько из снапшота или бэкапаВернуть трафик на старый сервер
Мусор в системеПереезжает вместе с системойОстаётся на старой машине
Ручная работаМеньше: конфиги сохраняютсяБольше: всё ставится и настраивается заново
Когда выбиратьVPS со снапшотами, стандартный стек, мало сторонних репозиториевБоевой сервис, где простой дорог, много самосборного софта

Практическое правило: если у вас есть возможность сделать снапшот всей машины и стек стандартный (Nginx или Apache, PHP из базовых репозиториев, MariaDB), пробуйте ELevate на клоне. Если сервер годами обрастал пакетами из EPEL, remi, самосборными бинарниками в /usr/local и правками в системных файлах, честнее поднять новую машину.

Шаг 1. Инвентаризация: что живёт на сервере

Перед любыми изменениями запишите, что на машине работает. Этот список пригодится и для проверки после переезда:

# версия и ядро
cat /etc/centos-release; uname -r
# подключённые репозитории
yum repolist all
# пакеты не из базовых репозиториев
yum list installed | grep -v -E '@(base|updates|extras|anaconda)'
# включённые службы и открытые порты
systemctl list-unit-files --state=enabled
ss -tlnp
# задания по расписанию
ls /etc/cron.d /etc/cron.daily; for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u $u 2>/dev/null | sed "s/^/$u: /"; done
# что лежит вне пакетов
ls /usr/local/bin /opt

Отдельно выпишите версии языков и баз: php -v, python -V, mysql -V, psql --version. Именно они определят, сколько работы будет с кодом приложения. Для служб, которые вы запускаете своими юнитами, пригодится шпаргалка systemd без боли.

Шаг 2. Бэкап, который точно восстановится

Без проверенной копии миграцию не начинайте. Нужны две вещи:

  1. Снапшот всей машины у провайдера или в гипервизоре. Это быстрый откат, если обновление на месте сломало загрузку.
  2. Копия данных вне сервера: дампы баз (mysqldump --single-transaction, pg_dumpall), каталоги сайтов, /etc целиком, почта, сертификаты, ключи.

Восстановите дамп на тестовой машине и убедитесь, что приложение открывается. Схема, которая переживает потерю сервера целиком, разобрана в статье Backup-стратегии: правило 3-2-1.

Шаг 3. Как обновить CentOS 7 до AlmaLinux 8 через ELevate

ELevate — проект AlmaLinux на базе фреймворка Leapp от Red Hat. Он умеет обновлять CentOS 7 до AlmaLinux 8, Rocky Linux 8 или Oracle Linux 8. Прыгнуть сразу на 9 нельзя: путь только поэтапный, 7 → 8 → 9 → 10. Сначала прогоните его на клоне сервера, а не на боевой машине.

Минимальные требования перед запуском:

  • свежая CentOS 7.9;
  • не меньше 4 ГБ RAM;
  • 5 ГБ свободного места в корне и /var;
  • доступ к консоли провайдера на случай, если сервер не поднимется по SSH;
  • сторонние репозитории на время обновления отключены.
# 1. переключить репозитории на архив и обновиться до последней 7.9
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://el7.repo.almalinux.org/centos/CentOS-Base.repo
sudo yum upgrade -y
sudo reboot

# 2. поставить ELevate и данные для AlmaLinux
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
sudo yum install -y leapp-upgrade leapp-data-almalinux

# 3. проверка без изменений
sudo leapp preupgrade
less /var/log/leapp/leapp-report.txt

Отчёт leapp-report.txt делит находки на информационные и блокирующие (inhibitor). Пока есть хоть одна блокирующая, обновление не запустится. Три самые частые на CentOS 7 закрываются так:

sudo rmmod pata_acpi
echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True

Строка с PermitRootLogin нужна только для прохождения проверки: в EL8 изменилось значение по умолчанию. Сразу после обновления верните запрет входа под root и вход только по ключам, как в статье SSH-ключи вместо пароля. Когда preupgrade чист, запускайте само обновление:

sudo leapp upgrade
sudo reboot
# после загрузки
cat /etc/redhat-release
rpm -qa | grep el7

Перезагрузка уходит в специальную среду обновления и может занять 20–60 минут. Не прерывайте её. Пакеты с el7 в имени, оставшиеся после обновления, разберите вручную: удалите или замените аналогами из EL8. Полная инструкция с переходом на 9 и 10 — в документации AlmaLinux ELevate.

Шаг 4. Перенос на новый сервер

Если выбрали параллельную машину, порядок такой:

  1. Поставьте целевую систему, сразу закройте её по базовым правилам из гайда Защита Linux-сервера: база.
  2. Установите стек из штатных репозиториев новой системы: веб-сервер, нужную версию PHP или Python, базу данных.
  3. Конфиги сравнивайте построчно, копировать их целиком опасно: старые httpd.conf и my.cnf рассчитаны на другие версии, и часть директив в новых просто удалена.
  4. Скопируйте файлы через rsync -aHAX --numeric-ids, базы — дампом и восстановлением, а не копированием каталога данных.
  5. Поднимите приложение, проверьте его по временному домену или через запись в /etc/hosts на своей машине.
  6. Понизьте TTL DNS-записей за сутки до переезда, сделайте финальную синхронизацию данных и переключите трафик.

Старый сервер не выключайте ещё одну-две недели: это ваш откат и справочник «как было настроено». Общий порядок развёртывания сайта на чистой машине описан в статье Как разместить сайт на VPS.

Что ломается после перехода с EL7 на EL8 и EL9

Система обычно загружается нормально. Ломаются мелочи, которые на CentOS 7 работали «сами»:

  • Python 2. В EL8 нет /usr/bin/python по умолчанию, системный Python — 3.6. Скрипты с шебангом #!/usr/bin/python перестанут запускаться.
  • PHP и базы. PHP приходит модулями AppStream (7.2 и новее), MariaDB — 10.3 и новее. Код под PHP 5.x придётся дорабатывать: mysql_*-функции и многие расширения удалены.
  • Сеть. В EL9 старые network-scripts (файлы ifcfg-*) больше не поддерживаются, сетью управляет NetworkManager. Проверьте статические адреса и маршруты.
  • Время. Пакета ntp нет, вместо него chrony.
  • Файрвол. firewalld работает поверх nftables. Самописные скрипты с iptables нужно перепроверить.
  • Криптография. В EL9 подписи SHA-1 по умолчанию отключены системной политикой. Старые клиенты, ключи и сертификаты могут перестать подключаться.

Чек-лист после миграции

  • cat /etc/os-release показывает целевую систему, пакетов el7 не осталось.
  • Все службы из списка инвентаризации запущены, systemctl --failed пуст.
  • ss -tlnp показывает те же порты, что и до переезда, и ничего лишнего наружу.
  • Сайты и API отвечают, формы и отправка почты работают, задания cron выполняются.
  • Сертификаты продлеваются: прогоните certbot renew --dry-run.
  • SELinux в режиме enforcing, в /var/log/audit/audit.log нет массовых отказов.
  • Бэкапы снова идут по расписанию и восстанавливаются.
  • Мониторинг видит сервер и его метрики. Как его настроить — в статье Мониторинг: Prometheus и Grafana.

Частые вопросы о миграции с CentOS 7

Можно ли обновить CentOS 7 сразу до AlmaLinux 9?

Нет. ELevate поддерживает только поэтапный путь: сначала CentOS 7 → AlmaLinux 8, затем 8 → 9 и 9 → 10. Каждый шаг — отдельный прогон leapp preupgrade и leapp upgrade со своими блокирующими проверками. Если нужна сразу 9 или 10, быстрее поднять новый сервер.

Что выбрать: AlmaLinux или Rocky Linux?

Для обновления на месте — AlmaLinux: у неё есть официальный инструмент ELevate. Для чистой установки обе системы почти равноценны: бинарно совместимы с RHEL, сроки поддержки совпадают. Выбирайте ту, которая уже используется в вашем парке или которую поддерживает ваша панель управления.

Сколько длится миграция?

Само обновление ELevate на простом VPS занимает 30–60 минут вместе с перезагрузками. Подготовка, тест на клоне и проверка после занимают от дня до недели в зависимости от количества сайтов и нестандартного софта. Перенос на новый сервер дольше по работе, но короче по простою.

Что делать, если сервер не загрузился после leapp upgrade?

Зайдите через консоль провайдера (VNC или serial), посмотрите /var/log/leapp/leapp-upgrade.log и вывод загрузки. Если быстро починить не удаётся, откатитесь на снапшот, сделанный перед обновлением. Именно поэтому без снапшота обновление на месте не запускают.

Работает ли ELevate с панелями управления?

Зависит от панели. У части панелей есть свои скрипты конвертации, которые вызывают ELevate и заодно обновляют компоненты панели. Перед миграцией проверьте документацию панели и требования к её версии, иначе после обновления ОС она может не запуститься.

Можно ли перейти с CentOS 7 на Ubuntu или Debian на месте?

Нет. Это разные семейства с разными пакетными менеджерами, путями конфигов и политиками безопасности (SELinux против AppArmor). Переход возможен только через новый сервер и перенос данных с переписыванием конфигов.

Нужно ли переписывать приложение?

Если оно работает на PHP 7.2+ или Python 3 и не зависит от старых библиотек — обычно нет, хватает настройки окружения. Если код написан под PHP 5.x, Python 2 или старые расширения, без доработки он на новой системе не запустится. Оцените объём ещё на этапе инвентаризации, чтобы не узнать об этом в день переезда.