Огляди 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 чи незалежний розробник: у чому різниця насправді.