Обзоры Odoo пишут либо те, кто её продаёт, либо те, кто открыл демо на двадцать минут. Этот - не из тех и не из других. Ниже числа с систем, которые работают каждый день: магазин с шестизначным каталогом, сорок витрин в одном инстансе, обновления версий на настоящих данных. Где плохо - так и написано.
Что она тянет без вопросов
Начать стоит с того, что размер - не та беда, которой его считают. Каталог из ста десяти тысяч товаров живёт в Odoo без драм: ORM держит, бэк-офис держит, склад держит. Сорок витрин работают на одном инстансе - одна база, один деплой, одно место, куда накатывать правку, - и я выбрал бы эту схему снова, потому что альтернатива - сорок штук всего.
Обновления тоже случаются. Версии с пятнадцатой по девятнадцатую в продакшене, иногда две сразу на разных проектах: клиент не переезжает только потому, что вышел релиз. Данные обновление переживают. Не переживает само по себе ваше собственное - и это честная цена кастомизации, а не дефект.
Где начинает спотыкаться
Первым перестаёт масштабироваться поиск. Полнотекстовый поиск Postgres по шестизначному каталогу с фильтрами и фасетами замедляется так, что индексом не лечится: в худшей точке запрос занимал восемь секунд, пока по ту сторону прилавка ждал склад. Вынос поиска в Elasticsearch довёл это до секунды - и это переписывание, а не галочка в настройках.
Второе - фронтенд. Odoo отдаёт сайт, который исходит из того, что вы в любую минуту включите магазин, чат, форум и редактор, и за это предположение браузер платит на каждой странице. Даже после того, как вырезано всё, что лендингу не нужно в принципе, на страницу, чья работа - показать текст, приезжает полмегабайта сжатого JavaScript.
Он отложенный, а не блокирующий, так что первый экран быстрый, если этим заняться. Но «отложенный» - не «отсутствующий»: его скачают, разберут и выполнят и на телефоне со слабым процессором. В Core Web Vitals разница между сайтом на Odoo «как поставили» и разобранным - это разница между красной оценкой и зелёной.
Во что на самом деле обходится обновление
Обновление голой Odoo - это выходные. Обновление Odoo с вашими модулями - это проект, и оценка зависит от одного: сколько из построенного живёт в коде, который вы контролируете. Studio и автоматизации, собранные щелчками, - самая дорогая часть: их нельзя прочитать диффом и нельзя проверить до того, как нажата кнопка.
Работающий порядок скучен. Каждое обновление начинается прогоном на стейдже с копией боевых данных - всей базы, а не выборки, потому что ломается всегда на той строке, которую никто не ждал. Потом список поломок чинится в модулях, а не в базе. Потом тот же прогон повторяется, пока не станет скучным. И только после этого едет живая система.
Эти три числа - размер систем, из которых взяты заметки. Это не рекорды: установок Odoo крупнее хватает. Это тот размер, на котором настройки по умолчанию перестают справляться и у каждого решения появляется цена.
Четыре вещи, которых нет в документации
Есть вещи, которые узнаёшь, только потеряв на них день. Готовый HTML страницы сайта кешируется на час: вы правите запись в бэк-офисе, страница не меняется, и вы идёте искать ошибку, которой нет. Лечится одной строкой, которая сбрасывает кеш при правке вашего содержимого, - но про сам кеш надо знать.
Ограничение, объявленное по-старому, через _sql_constraints, в Odoo 19 молча игнорируется: модуль ставится, в логе чисто, а ограничения в базе нет вовсе. Дубликаты приходят потом и тихо. Скрипт, добавленный в бандл фронтенда, может не сработать ни разу: он попадает в ленивый бандл, который приезжает уже после DOMContentLoaded - событие, которого ждёт обработчик, давно случилось.
А модуль может быть в списке, описан в документации - и не ставиться: модули Enterprise видны в Community заглушками, помеченными как недоступные. Appointments - один из них, поэтому страница записи на этом сайте сделана своим модулем, а не включена галочкой.
Поддержка и то, что её заменяет
Поддержка - то, что я поменял бы первым. Когда проблема на стороне Odoo, вы ждёте - и ждёте с доказательствами: логи, замеры, один и тот же вопрос, заданный трижды. На одном проекте ограничение платформы месяцами отдавало Googlebot 429-е, магазины выпадали из индекса, и понадобилось три круга, чтобы лимиты подняли. Эта история разобрана подробнее отдельно, и это самая честная претензия к Odoo, какая есть.
Тот же год спасает другой край той же системы: архитектуру не надо согласовывать ни с кем. Поиск уехал в Elasticsearch, потому что я так решил. Фронтенд тонкий, потому что я его разобрал. Страница записи существует, потому что модуль написан за вечер. В закрытой системе каждое из этого - тикет; здесь - коммит.
Кому подходит, а кому нет
Odoo вам подходит, если нужна одна система на всю компанию и есть - или можно нанять - того, кто пишет код. Подходит плохо, если хочется, чтобы всё работало из коробки и к этому никогда не прикасались: открытая платформа даёт не это. Консолидированная отчётность по десятку юрлиц, сертифицированные отраслевые вертикали, тендер с требованием вендора из квадранта Gartner - не её бои.
Если вы выбираете прямо сейчас, полезен не ещё один обзор. Полезны полчаса с вашим экраном и вашими числами: что тормозит, что застряло, во что обойдётся это поменять. Эти полчаса бесплатны, и в конце я честно скажу, моя ли это задача.
Выбираете не только систему, но и того, кто будет с ней работать? Партнёр Odoo или независимый разработчик: в чём разница на самом деле.