Как я обновляю Nextcloud и не теряю выходные
Nextcloud выпускает мажорную версию примерно три раза в год, а минорные исправления выходят чаще. Пропускать обновления нельзя: в минорных версиях закрывают уязвимости. Но и обновляться в день релиза тоже не стоит. За несколько лет у меня сложился спокойный порядок.
Правило первое: не перепрыгивать через мажорные версии
Nextcloud официально поддерживает обновление только на одну мажорную версию за раз. С 29-й на 31-ю напрямую нельзя: сначала до последней минорной версии 29, потом до 30, потом до 31. В Docker это означает менять тег образа поэтапно, дожидаясь завершения миграций на каждом шаге.
Правило второе: выждать
Мажорную версию я ставлю не раньше выхода второго-третьего минорного релиза, то есть примерно через месяц-полтора. За это время разработчики сторонних приложений обновляют совместимость, а на форуме собираются отчёты о проблемах. Минорные обновления ставлю в течение недели.
Порядок действий
- Читаю заметки о выпуске и раздел «critical changes» в документации администратора.
- Проверяю на странице приложений, что всё, чем я пользуюсь, поддерживает новую версию.
- Делаю внеочередной бэкап базы и
config(см. статью о бэкапах). - Меняю тег образа в
compose.yaml, затем выполняюdocker compose pullиdocker compose up -d. - Смотрю логи контейнера, пока не увижу, что миграции закончились.
- Выполняю
occ upgrade, если он не отработал автоматически, а затемocc db:add-missing-indicesиocc maintenance:repair --include-expensive. - Захожу в «Настройки → Обзор» и разбираю новые предупреждения.
Откат
Если что-то пошло не так, откат простой: вернуть старый тег образа, восстановить дамп базы и config.php. Файлы пользователей при обновлении не трогаются, поэтому их восстанавливать обычно не нужно. Главное — не запускать старую версию поверх уже мигрированной базы: Nextcloud это обнаружит и откажется стартовать, и это правильно.
Образы базы и Redis
PostgreSQL я обновляю отдельно от Nextcloud и гораздо реже. Минорные версии внутри одной мажорной ставятся простой сменой тега. Мажорное обновление требует pg_dump и восстановления в новый кластер, потому что формат данных на диске между мажорными версиями несовместим. Redis хранит только кэш и блокировки, его можно смело пересоздавать.
Автоматизация
Полностью автоматические обновления (Watchtower и подобные) я для Nextcloud не использую. Слишком велик шанс, что ночью приедет мажорная версия с несовместимым приложением. Вместо этого меня раз в неделю уведомляют о вышедших тегах, а решение я принимаю сам.