Вышел ONLYOFFICE DocumentServer 10, сервер онлайн-редакторов документов, таблиц и презентаций с совместной работой. Если коротко, что это такое: редакторы в браузере с заявленной полной совместимостью с форматами MS Office и OpenDocument, расширение через плагины, код под AGPLv3, сборки для Linux, Windows и macOS. Одновременно вышли и десктопные редакторы 10. Подробнее, зачем мне ONLYOFFICE и как он живёт рядом с Nextcloud, я писал раньше.
По словам разработчиков, в 10.0 около 50 новых функций, больше 1000 исправленных багов и около 35 закрытых уязвимостей.

AI вынесли, DocSpace превратился в Apps
Главная смена курса: вместо одной платформы DocSpace теперь набор модульных приложений ONLYOFFICE Apps. Их четыре: AI Agents, Forms, Rooms и Files, все бесплатные и под AGPLv3. В облаке они включены сразу, на своём сервере ставятся одной командой. Код при этом развивается в тех же репозиториях DocSpace, пишет OpenNet.
AI-инструменты в редакторах есть: чат, переписывание и перевод текста, формулы и анализ данных в таблицах, сборка слайдов, вопросы к PDF. Подключать можно как внешние сервисы, так и свои локальные модели. Но в открытых версиях встроенный AI убрали по просьбам пользователей, его ставят отдельно. А в конфиге редактора появился параметр editorConfig.customization.ai.disabled, чтобы выключить AI совсем.

Что нового в редакторах
По CHANGELOG самое заметное:
- Во всех редакторах: таблица данных в диаграммах, превращение SVG в фигуры, кнопка «Скачать» на верхней панели, обновлённый магазин плагинов с категориями.
- Документы: можно перейти к курсору другого участника и следовать за ним при совместной правке, запрет разрыва строки таблицы между страницами, «не отрывать от следующего» для таблиц, окно настройки горизонтальной линии, лучше работа с формулами в тексте справа налево.
- Таблицы: сохранение в старый XLS, диаграммы из несмежных диапазонов, подсветка диапазонов в строке формул, фон листа, отключаемое автозаполнение. Работа ускорена за счёт раздельного хранения стилей и данных, формулы массивов по целым столбцам считаются быстрее и едят меньше памяти.
- Презентации: режимы «Структура», «Заметки», «Образец выдач» и «Образец заметок», режим чтения, печать заметок, выдач и скрытых слайдов, экспорт в анимацию и видео с выбором слайдов, разрешения и формата.
- PDF: удаление метаданных и аннотаций через Redact, панель настройки аннотаций, подпись через вкладку комментариев, формы по ролям со сбором данных, распознавание таблиц с видимыми границами в режиме правки текста.
- Формы: сохранённые подписи и отключаемая проверка орфографии в отдельной форме.
- Конвертация: поддержка китайского формата OFD, просмотр и конвертация как у XPS.
Серверная часть: что может сломать интеграции
Вот это стоит прочитать до обновления, если DocumentServer подключён к Nextcloud, своему порталу или WOPI:
- JWT теперь включён по умолчанию в default.json. Если у вас он был выключен и интеграция работала без секрета, после обновления она отвалится, пока не пропишете JWT_SECRET с обеих сторон.
- /converter, /docbuilder и /command больше не принимают токен из конфигурации редактора. В токен добавили поле operation.
- Для WOPI теперь обязательны правила ipfilter с явным хостом, правила allow: * мало.
- Через runtime.json можно менять только уровень логирования log4js.
- Новые эндпоинты конвертации с загрузкой файла напрямую: POST /converter/from-file и POST /docbuilder/from-file. Публичные API Document Builder и конвертера можно выключить параметрами docbuilderEnable и convertServiceEnable.
- Проверка целостности скачанных файлов, если интегратор передаёт нужные заголовки (checksumVerification, по умолчанию включена), и метрика coauth.connections.
- Отдельный скрипт changes2forgotten убран: изменения переносятся в forgotten при остановке сервера.

Безопасность
В разделе Security CHANGELOG 43 пункта. Там XSS в гиперссылках DOCX, в окне аргументов функций и на странице /baseurl, обход песочницы макросов, в том числе с доступом к cookie, SSRF и перехват сеанса совместной правки через WOPI, path traversal, чтение локальных файлов при конвертации EPUB, переполнения буфера и чтение за границами в разборе DOC, XLS, PPT, PDF, XPS, EMF+ и WMF, выполнение встроенного JavaScript из PDF и повышение привилегий через скрипт documentserver-flush-cache. Плюс обновлённые библиотеки в Docker-образе. Если сервер торчит в интернет, это само по себе повод обновиться.

Как обновиться
Перед любым обновлением важная особенность ONLYOFFICE: документ сохраняется, только когда его закрыли все редакторы. Поэтому сначала выгоняем пользователей скриптом, он может работать до пяти минут, а заодно делаем бэкап томов и конфига.
В Docker по инструкции. Образ 10.0 уже лежит на Docker Hub, для amd64 и arm64:
# выгнать пользователей и сохранить документы
sudo docker exec onlyoffice documentserver-prepare4shutdown.sh
# посмотреть, какие тома смонтированы, и записать
sudo docker inspect --format='{{range $p,$conf:=.HostConfig.Binds}}{{$conf}};{{end}}' onlyoffice
sudo docker stop onlyoffice && sudo docker rm onlyoffice
sudo docker pull onlyoffice/documentserver:10.0
# запустить с теми же томами и тем же секретом
sudo docker run -i -t -d -p 80:80 --restart=always --name onlyoffice \
-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
-v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql \
-e JWT_SECRET=ваш_секрет onlyoffice/documentserver:10.0
Пути к томам подставьте свои из вывода docker inspect, иначе новый контейнер не увидит старые данные. В docker compose то же самое: поменять тег образа на 10.0, затем docker compose pull и docker compose up -d.


Из пакетов в Debian и Ubuntu, после того же prepare4shutdown:
sudo documentserver-prepare4shutdown.sh sudo apt-get update sudo apt-get install --only-upgrade onlyoffice-documentserver
В CentOS и других RPM-системах то же через dnf: sudo dnf upgrade onlyoffice-documentserver. Пакеты 10.0.0 для Debian, Ubuntu, CentOS и Windows Server уже на странице загрузки. После обновления откройте любой документ из своей интеграции и убедитесь, что JWT совпадает: это самая вероятная поломка в 10.0.
