Обновление сервера: как обновлять и ничего не сломать
Сервер, который год не обновляли, работает ровно до того дня, когда кто-то воспользуется известной уязвимостью. Сервер, который обновляют не думая, ломается сам, обычно в пятницу вечером. Обе крайности встречаются одинаково часто, и обе решаются пониманием того, что именно вы обновляете.
Разберём три уровня обновлений с разным риском, когда нужна перезагрузка, стоит ли включать автоматику и что делать, если после обновления перестало работать.
Три уровня, и риск у них разный
Обновления безопасности. Закрывают известные уязвимости, почти не меняют поведение программ. Риск минимальный, а откладывать их - главный источник проблем. Ставить надо регулярно.
Обычные обновления пакетов. Новые версии программ с новыми возможностями и иногда с изменённым поведением. Риск умеренный: может измениться конфигурация или поведение по умолчанию.
Переход на новую версию системы. Смена мажорной версии дистрибутива. Риск высокий: меняются версии всего сразу, старые настройки могут не подойти. Делают редко и осознанно.
Ошибка новичков - смешивать эти уровни в одно действие. Безопасность можно ставить хоть автоматически, а смену версии системы планируют как отдельную задачу с окном простоя.
Обычный порядок обновления
Сначала обновляется список доступных версий, потом ставятся сами пакеты:
apt update
apt upgradeПервая команда ничего не меняет, она только сверяет, что вышло нового. Вторая ставит обновления для уже установленных пакетов.
Полезно перед этим посмотреть, что именно поменяется:
apt list --upgradableОтдельно стоит знать про вариант, который умеет доустанавливать и удалять пакеты ради разрешения зависимостей:
apt full-upgradeОн нужен, когда обычное обновление сообщает, что пакеты удержаны. Но именно он способен снести что-то нужное, поэтому список изменений перед подтверждением читают, а не жмут согласие вслепую.
Когда нужна перезагрузка
Большинство обновлений применяется сразу. Исключения два: ядро и системные библиотеки. Пока сервер не перезагружен, работает старая версия ядра, даже если новая уже установлена.
Понять, что перезагрузка нужна, можно по файлу-признаку, который система создаёт сама:
ls /var/run/reboot-requiredОтдельная тонкость: службы, которые используют обновлённую библиотеку, продолжают работать со старой копией в памяти, пока их не перезапустить. Поэтому после обновления либо перезагружают сервер, либо перезапускают затронутые службы.
Практическое правило: перезагрузку планируют, а не откладывают бесконечно. Сервер с непримененным обновлением ядра формально уязвим, хотя в списке пакетов всё свежее.
Автообновления: включать или нет
Система умеет ставить обновления безопасности сама, без вашего участия.
Стоит включить, когда сервер простой и типовой: сайт, бот, небольшой сервис. Риск того, что автоматика что-то сломает, ниже риска пропустить уязвимость. Так же настроен базовый вариант в статье настройка VPS.
Стоит подумать, когда на сервере сложная связка сервисов, критичное приложение или специфические версии библиотек. Здесь неожиданный перезапуск службы среди ночи может стоить дороже.
Компромисс, который используют чаще всего: автоматически ставить только обновления безопасности, а остальное - руками и по расписанию. Настроить регулярную проверку помогает расписание задач.
Автоматическую перезагрузку при этом обычно не включают: момент выбирают сами.
Правило, которое экономит вечер
Снапшот перед обновлением. Особенно перед сменой версии системы и перед обновлением того, от чего зависит работа сайта.
Снимок диска делается за минуту и позволяет вернуться к рабочему состоянию одним действием, если что-то пойдёт не так. Это дешевле любого разбора: вы возвращаетесь и спокойно смотрите, что случилось, вместо того чтобы чинить прод на ходу. Как устроены копии и чем снапшот отличается от дампа, разобрано в статье резервное копирование VPS.
Второе правило того же порядка: не обновлять перед выходными и в пятницу вечером. Если что-то всплывёт, оно всплывёт под нагрузкой, а не сразу.
Смена версии системы
Это отдельная задача, а не очередное обновление.
Обновление дистрибутива на месте возможно, но на сервере с настроенным окружением оно часто оставляет странности: старые конфигурации, несовместимые версии, пакеты из прошлого. Поэтому в большинстве случаев чище и быстрее развернуть новый сервер на свежей версии и перенести на него проект, чем обновлять существующий.
Это заодно проверяет, воспроизводима ли ваша инфраструктура: если развернуть заново тяжело, значит зависимость от одной живой машины слишком велика. Порядок переезда разобран в статье перенос сервера к другому провайдеру - механика та же.
Отдельно проверьте, что версия системы ещё поддерживается. Дистрибутив, у которого закончился срок поддержки, перестаёт получать обновления безопасности, и дальше он уязвим независимо от того, как аккуратно вы его обновляете.
Если после обновления сломалось
1. Не откатывайте наугад. Сначала посмотрите, что именно не работает. 2. Проверьте службы. Часто причина в том, что сервис не перезапустился или не принял изменённую конфигурацию. 3. Читайте логи. Причина почти всегда там, см. логи на сервере. 4. Ищите файлы конфигурации, которые обновление предложило заменить. Типичная причина: приняли новый конфиг, потеряв свои настройки. 5. Вернитесь к снапшоту, если чинить дольше, чем откатиться.
Частые ошибки
Не обновляют вообще. Самый частый способ получить взломанный сервер, см. что делать, если сервер взломали.
Обновляют без снапшота. Откатиться нечем, и починка идёт на живом сервере.
Устанавливают ядро и не перезагружаются месяцами. Формально обновлено, фактически работает старая версия.
Соглашаются на замену конфигураций не глядя. Свои настройки затираются, сервис поднимается с настройками по умолчанию.
Обновляют версию системы на месте под нагрузкой. Часто быстрее и надёжнее развернуть новую машину.
Включают полную автоматику на сложном сервере. Перезапуск службы в неудачный момент обходится дороже пропущенного обновления.
Частые вопросы
Как часто обновлять сервер? Обновления безопасности - регулярно, вплоть до автоматической установки. Обычные пакеты - по расписанию, раз в несколько недель. Версию системы - раз в несколько лет и как отдельную задачу.
Чем отличается upgrade от full-upgrade? Первый обновляет установленные пакеты, не трогая состав системы. Второй может доустановить и удалить пакеты ради зависимостей, поэтому список изменений перед ним читают.
Когда нужна перезагрузка? После обновления ядра и системных библиотек. Признак - появление файла /var/run/reboot-required. До перезагрузки работает старая версия ядра.
Стоит ли включать автоматические обновления? Для типового сайта или бота - да, в части обновлений безопасности. Для сложной связки сервисов лучше оставить контроль за собой.
Что делать перед обновлением? Снять снапшот, посмотреть список изменений и выбрать время, когда есть возможность разбираться. Не в пятницу вечером.
Обновлять версию системы или переустановить? На сервере с настроенным окружением обычно чище развернуть новую машину и перенести проект. Обновление на месте чаще оставляет несовместимые остатки.
Что делать, если после обновления сайт не работает? Посмотреть логи, проверить, поднялись ли службы, и не были ли заменены файлы конфигурации. Если починка затягивается, вернуться к снапшоту.
Нужен сервер со снапшотами перед обновлением? VPS на NVMe от 459 руб в месяц - снимок диска за минуту, полный root-доступ и любые версии системы. Активация за 3 минуты, площадки в Москве, Казани и Амстердаме.