Переход с 2026.1 ESR на 2026.7: мои наблюдения

Прежде всего, поздравляю команду Discourse с выходом новой версии ESR и спасибо за проделанную работу. Шесть месяцев релизов, собранных в одной поддерживаемой версии — это ОЧЕНЬ много инженерной работы, и тот факт, что теперь есть отдельный сайт релизов и журнал изменений для изучения, сделал это исследование намного проще, чем за предыдущие 4 года.

Я использую 2026.1.5 ESR. Я проходил через релиз за релизом, прежде чем попытаться найти конфигурацию, при которой обновления проходят максимально гладко.

Я изучил всё, что было между 2026.1.5 и 2026.7.0, прежде чем что-либо трогать, и решил, что эти заметки будут полезны всем, кто сейчас находится на версии 2026.1 и пытается решить: патчить сейчас или переходить на новую версию?

Сегодня я обновился до 2026.1.6 ради исправлений безопасности, а на 2026.7.0 перейду в первую неделю следующего месяца, когда у меня будет время правильно протестировать компоненты моей темы и другие вещи.


Подвох с version: stable

Если, как и у меня, в вашем app.yml написано:

  version: stable

…то при следующем пересборке вы окажетесь на версии 2026.7.0, хотите вы этого или нет. stable — это псевдоним обратной совместимости для esr, а esr всегда указывает на последнюю версию ESR, которая изменилась сегодня.

Насколько мне известно, пути отката нет, поэтому если вы пересоберете систему просто ради получения исправления безопасности, вы получите и полный скачок на шесть месяцев вперед!

Чтобы остаться на версии 2026.1 и получать только исправления безопасности, явно зафиксируйте версию:

  version: release/2026.1

Чтобы перейти на новую версию ESR и не быть автоматически переведенным на следующую через шесть месяцев:

  version: release/2026.7

Версия 2026.1 поддерживается до сентября 2026 года. Версия 2026.7 поддерживается до марта 2027 года. Так что переход неизбежен, вопрос лишь в том, произойдет ли он по вашему графику.


Предварительные требования

PostgreSQL 15 теперь является минимальной версией. Проверьте свою версию изнутри контейнера:

cat /shared/postgres_data/PG_VERSION

У меня вернулось значение 15, так что я в порядке. Если вы используете версии 13 или 14, я считаю, что это отдельное обновление, которое нужно выполнить перед переходом на новую версию.

Стоит отметить: образ контейнера теперь поставляется с PG 18 наряду с PG 15, но я пока отказываюсь от него, меняя по одной переменной за раз.


Простои?


Сначала сделайте резервную копию и заблокируйте форумы, включив режим обслуживания.

Простои отсутствуют, но они не мгновенны на зрелом форуме:

Пересборка заняла < 5 минут на моем VPS, планируйте ~10 минут на большинстве хостингов, но это также сильно зависит от количества сообщений на вашем форуме, поэтому планируйте окно в 30–45 минут.


Безопасность: чему вы подвержены на версии 2026.1.5

17 бюллетеней применимы, если вы находитесь на версии 2026.1.5. Всё, что было опубликовано до 30 июня, уже было исправлено в вашей сборке. Все 17 уязвимостей исправлены как в 2026.1.6, так и в 2026.7.0, что делает вариант “сначала патч” вполне жизнеспособным.

  • 1 критическая — отравление кэша / XSS через куки цветовой схемы
  • 2 высокие — удаленное выполнение кода (RCE) через некорректный файл HEIF; сохраненный XSS через несанитизированное имя пользователя в чате в редакторе текста
  • 13 средних, 1 низкая — сохраненный XSS в очереди проверки, журналах действий персонала, действиях с сообщениями и локальных датах; утечка скрытых названий и описаний тегов; раскрытие заголовков ограниченных тем через канонические URL; утечка заголовка/отрывка общих черновиков; обход черного списка доменов для onebox через регистрозависимое сравнение; прослушивание разговоров с ИИ-ботами; доступ к содержимому личных сообщений через материалы для проверки ИИ; несоответствие ID канала/потока в onebox чата; скрытый отрывок первого сообщения, выводимый в JSON-LD для вопросов и ответов

Если вы обновляетесь только патчем, release/2026.1 + пересборка закрывает все эти уязвимости.


Моя боль: вещи, которые изменятся без вашего запроса

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

  1. Реакции Discourse включены по умолчанию для всех сайтов. Развертывание достигло версии stable 21 июля. Если вы не используете Реакции сегодня, они скоро появятся.

  2. Категория “Некатегоризированные” удаляется. Три настройки скрываются в админке (allow_uncategorized_topics, suppress_uncategorized_badge, uncategorized_category_id) и будут полностью удалены, как только изменение станет постоянным. Пока что это опция отключения.

  3. Настройка сайта rich_editor удалена. Богатый редактор теперь является безусловным. Единственный оставшийся способ выбора между Markdown и богатым текстом — это пользовательская настройка composition_mode. Переключатель предварительного просмотра Markdown также был удален — его заменил переключатель режимов MD/RTE.

  4. Более простые темы email. Сейчас в бета-тесте. Внимание: включение этой функции перезаписывает вашу настройку сайта email_subject, а отключение возвращает значение по умолчанию. Так что любые ваши кастомизации там могут быть потеряны. Проверьте эту настройку, прежде чем переключать что-либо.

  5. Карточки тем с высоким контекстом Horizon достигли версии stable в июне. Актуально только, если вы используете Horizon, и есть настройка темы для возврата к простым карточкам.

Хорошая новость: все эти изменения теперь приходят через систему “Предстоящие изменения”, что означает, что их нет в версии 2026.1.5. Вы получаете страницу конфигурации, предварительное уведомление, возможность отключения для каждого изменения и исправление (#39279), которое специально предотвращает перезапись настройки, которую вы уже кастомизировали.

Если, как и я, вы были разочарованы перемещением настроек между релизами, эта система — ответ, и оставление на версии 2026.1 сохраняет вас на сборке, предшествующей этой системе. Первое, что я сделаю после перехода, — это пройду по “Предстоящим изменениям” и намеренно установлю каждый ожидающий элемент, прежде чем что-то будет продвинуто автоматически.


Если вы используете кастомные темы или компоненты

Здесь я ожидаю провести больше всего времени на тестирование, и часть причины, почему я не перехожу сегодня:

  • Предупреждения администратора теперь включены для всех ожидающих устареваний. Ожидайте, что ваши кастомные компоненты начнут показывать уведомления администратора, если они используют что-то устаревшее. Лучше знать, но это требует ревизии.
  • Новые устаревания для расширений файлов .hbs и .js.es6. Проверьте именование файлов в ваших компонентах.
  • Устаревшие shim-ы виджетов удалены, вместе с путями устаревания для discourse.breadcrumbs.*, add-flag-property, add-header-panel и bootbox.
  • Выходы плагинов теперь могут быть переименованы и помечены как устаревшие, а не просто молча ломаться. Поистине хорошее изменение. Переименованные выходы предупреждают, а не просто исчезают.
  • Настройки темы перемещены из JS-бандла в предзагружаемые данные, что меняет момент их доступности при запуске. Стоит проверить, если ваш компонент читает настройки на раннем этапе.
  • Устаревшие настройки сайта для мобильного режима удалены, а пустые основные таблицы стилей для мобильных/десктопных устройств удалены. Если ваш CSS нацелен на мобильные и десктопные устройства отдельно, протестируйте на реальном телефоне после обновления.

Под капотом: Ember 6.6 → 6.10, ember-cli 6.9 → 7.0.1, миграция на Rolldown завершена, добавлена поддержка TypeScript для тем и плагинов, и удалено много jQuery повсюду.

Пользователи House Ads: встроенный JS теперь заблокирован в рекламных блоках, и административный интерфейс был перестроен на FormKit. Настройка house_ads_after_nth_root теперь также учитывается в представлении вложенных ответов.


Заметные новые функции

37 функций были выделены за эти шесть месяцев. Те, которые, как я думаю, важнее всего для общего форума сообщества:

  1. Предстоящие изменения — страница конфигурации и система развертывания, описанная выше.
  2. Вложенные ответы — экспериментальный вид темы в виде дерева/потока, настраиваемый для каждой темы и категории, с массовым включением из списка тем и переработанным мобильным опытом.
  3. Вход и регистрация по одноразовому коду в email (enable_local_logins_via_code) — без пароля, сейчас в альфа-версии. Регистрация требует только email и код.
  4. Новая страница управления категориями в админке плюс упрощенное создание категорий. Полный каталог категорий и их типов.
  5. Массовые действия повсеместно — массовое управление тегами (добавление/удаление/замена), массовое закрепление/открепление и массовая блокировка для неактивированных пользователей, наряду с новым фильтром статуса активации в Админка → Пользователи. Эта последняя комбинация отлично подходит для очистки волн спамерских регистраций.

Также стоит упомянуть: явную настройку домашней страницы по умолчанию, закрепленные группы эмодзи с массовым импортом/экспортом пользовательских эмодзи, теперь точки разрешены в названиях тегов, отдельная страница редактирования тегов, полный режим приложения для встраивания, синхронизация групп для OAuth2 и OpenID Connect, и живые иконки статуса PR на встроенных GitHub onebox.


Почему я сначала применил патч

Ни одно из вышеперечисленного не является причиной не переходить на 2026.7. Сама система “Предстоящие изменения” делает это стоящим, и я перейду в первую или вторую неделю следующего месяца.

Но исправления безопасности доступны в обеих ветках, что означало, что я мог отделить срочную часть от той, которая требует тестирования. Например, богатый редактор теперь является безусловным. Я уверен, что, почитав форумы, найду быстрый путь, надеюсь.

Применение патча сегодня закрыло все бюллетени. Переход теперь получает правильное окно, где я могу намеренно пройти по Предстоящим изменениям и проверить свои компоненты темы на десктопе и мобильных устройствах, не гоняясь за критической уязвимостью CVE.

Если вы на версии 2026.1 и у вас мало времени на этой неделе, я бы порекомендовал то же самое. Если у вас есть время, переходите прямо на release/2026.7, просто явно зафиксируйте её и проверьте версию Postgres.

Еще раз спасибо команде. Сайт журнала изменений сделал это исследование гораздо менее болезненным, чем было бы год назад.


Раскрытие: Я использовал ИИ, чтобы помочь мне оформить этот пост; в противном случае у меня не было бы времени его опубликовать. Пожалуйста, укажите, что мне нужно добавить, удалить или изменить.

Функция включена по умолчанию (не только для новых форумов, но и для существующих), но вы все равно можете использовать настройку сайта discourse_reactions_enabled и отключить её после обновления. У вас есть возможность отказаться от этой функции.

Я не уверен, что это сработает, по двум причинам. Думаю, использование ESR означает, что вы пропустите предстоящие изменения, которые проходят все стадии до выхода следующего релиза ESR. Пример этому — Simplified category setup. Пользователи, обновляющиеся каждый месяц, имели возможность протестировать это и оставить отзыв, тогда как вы получаете результат как любое другое изменение кода, без стадии «предстоящих изменений».

Кроме того, вы можете включить изменения раньше или отказаться от них после того, как они будут автоматически включены при переходе в стадию бета-версии, — но вы не можете отказаться от них до того, как они будут автоматически включены.

Конечно, имеет смысл изучать изменения в стадии альфа, чтобы быть в курсе того, что грядёт. Вы уже можете протестировать функцию как администратор, не влияя на пользователей, и быстро отказаться от неё после обновления, которое её включило. Но поскольку вы используете ESR, у вас не будет обновления, которое переводит предстоящее изменение в более высокую стадию. Для вас ничего не будет включаться автоматически до обновления до более новой версии, но это также означает, что вы упускаете возможность попробовать функцию до того, как изменения станут постоянными, или протестировать её текущее состояние, но не сможете оценить улучшения, которые появятся в последующих итерациях.

@Moin, искренне благодарю! Именно поэтому я выдерживаю паузу перед публикацией постов в ESR — около недели. Обратная связь и исправления моих ошибок… лучше всего, что я могу придумать сам. Обновлю пост. Спасибо!