Установка Saleor: где ломается самостоятельное развёртывание
Установка Saleor своими силами выглядит как обычный деплой Django-проекта: поднять приложение, применить миграции, подключить базу и кэш. Ломается всё обычно не на этом шаге, а на стыках — когда магазин начинает работать под реальным трафиком и внешними системами.
Первый слой поломок — каталог. Товары, варианты и остатки приходят из учётной системы, а карточки правят ещё и в админке: без однозначного владельца данных каждая синхронизация затирает чужую правку. На витрине появляются позиции с нулевым остатком и старой ценой, а расхождение между витриной и оформлением заказа всплывает уже в момент оплаты.
Второй слой — корзина и заказы. Если оформление проходит через несколько шагов без единой транзакции и без резервирования остатка, на пиковой нагрузке в день распродажи часть корзин теряется, а заказы дублируются. Клиент видит одно списание, склад — две заявки, и разбор занимает день, а не минуты. Целостность каталога и заказов держится не на повторных попытках, а на идемпотентных операциях и явных блокировках остатка.
Третий слой — интеграции: оплата, доставка, склад, рассылки. На пике они получают в разы больше запросов, и без очередей с ограничением параллелизма фоновые задачи копятся, уведомления от внешних систем теряются, а статусы заказов перестают сходиться с фактической отгрузкой. Ниже разбираем, как это закрывается при развёртывании ecommerce-платформы.
Гибкая схема каталога и заказов: что даёт настройка
Карточка товара — не одна запись, а набор вариантов: цвет, размер, комплектация, у каждого свой остаток и цена. Корректная модель данных каталога связывает варианты, склады и каналы продаж явно, поэтому витрина отдаёт только то, что доступно в нужном канале. В Saleor эта схема заложена штатно, но требует настройки — иначе появляются дубли товаров и расхождение между витриной и складом.
Каталог, варианты и склады
Атрибуты описываем типизированными полями, а не свободным текстом: фильтры и подборки строятся по индексам, а не перебором. Категории выстраиваем деревом с предсказуемой глубиной, чтобы выдача по разделу не подтягивала каталог целиком.
Резерв отделяем от фактического остатка: пока заказ не подтверждён, товар остаётся доступным остальным покупателям, а склад не показывает «минус».
Витринный слой и пиковые нагрузки
Витринный слой собирает страницу каталога подготовленными выборками вместо каскада запросов: время отклика уходит в доли секунды вместо секунд и не растёт с глубиной каталога. Пропускную способность в пик проверяем прогонами на реальном профиле — распродажа, рекламная кампания, сезонный всплеск — и доводим до состояния, когда витрина держит поток без очереди.
Оформление заказа проходит одной операцией: списание остатка, создание заказа и запись истории статусов не расходятся между собой. Повторная отправка формы не создаёт второй заказ, а обрыв на шаге оплаты не оставляет замороженный резерв. Уходит класс отказов: «продали то, чего нет» и «заказ есть, а позиций нет».
Режимы развёртывания: сравнение вариантов
Выбор варианта развёртывания определяет, как быстро выходит обновление Saleor, насколько предсказуемо приложение переживёт рост каталога и кто отвечает за доступ к данным. Ниже — три схемы, между которыми реально выбирают на старте.
| Вариант | Когда подходит | Ограничения варианта |
|---|---|---|
| Размещение на своём контуре | Требования держать данные и доступы внутри своей инфраструктуры, есть свой отдел эксплуатации, нестандартная сетевая схема | Обновления и масштабирование выполняются вручную, миграции базы планируются как отдельная операция с простоем или переключением реплик |
| Контейнерная схема | Нужны регулярные релизы, горизонтальное масштабирование витрины и фоновых задач, среда разработки повторяет рабочий контур | Без сбора метрик и логов растёт время разбора сбоев, нужна инфраструктурная команда и регламент выката |
| Управляемая платформа | Быстрый запуск, небольшая команда, нет задачи держать инженера эксплуатации | Часть параметров недоступна, обновления и миграции привязаны к регламенту площадки, глубина настроек слоёв ограничена |
Что меняется при масштабировании
В контейнерной схеме слой приложения не хранит состояние, поэтому витрина масштабируется репликами, а очередь фоновых задач выносится отдельно и растёт независимо. GraphQL-запросы кэшируются, тяжёлые выборки каталога уходят на реплики базы — корзина и оформление заказа остаются на основном узле.
Переход между вариантами выполняется переносом дампа базы и медиафайлов, поэтому выбранная схема не запирает вас: разбираем, какой контур закрывает ваши ограничения по доступам и нагрузке.
Порядок установки Saleor: от аудита до передачи
Порядок работ выстроен так, чтобы каждый шаг опирался на результат предыдущего: сначала фиксируем фактическое состояние контура, затем проектируем схему и только потом трогаем рабочий контур. Ниже — этапы внедрения в том виде, в каком они идут на проектах с живым трафиком.
- Обследование инфраструктуры. Снимаем текущую картину: размещение сервисов, устройство баз, лимиты серверов, используемые командой инструменты. На выходе — отчёт с узкими местами, которые напрямую влияют на схему развёртывания.
- Проектирование схемы. Определяем состав компонентов Saleor, схему хранения данных, роли сервисов, точки интеграции с учётной системой и оплатой. Топологию согласуем до начала работ.
- Разделение окружений. Поднимаем отдельные контуры для разработки, приёмки и эксплуатации — со своими базами, ключами и конфигурацией. Обновления обкатываются на копии данных и не задевают покупателей.
- Установка и настройка. Разворачиваем приложение, очереди фоновых задач, поисковый индекс и кэш, настраиваем миграции и резервное копирование — сначала на тестовом контуре.
- Нагрузочная проверка. Моделируем реальные сценарии: просмотр каталога, корзина, оформление заказа, выгрузки. Смотрим время отклика под пиком и поведение системы при отказе отдельного узла.
- Передача проекта. Отдаём доступы и документацию по развёртыванию и восстановлению, обучаем команду, фиксируем регламент обновлений и остаёмся на сопровождении.
Состав поставки: конфигурации, схемы и регламенты
Поставка — это не архив с кодом, а набор артефактов, по которым систему можно эксплуатировать и развивать без автора. Всё, что настраивается при установке Saleor, фиксируется в репозитории и в документации: конфигурации, схемы, политики и регламенты переходят заказчику.
- Конфигурации проекта — файлы окружений для разработки, тестового и рабочего контуров, переменные подключения к базе и очереди, секреты вынесены отдельно.
- Схема интеграций — карта связей с платежами, доставкой, складом и учётной системой: направление обмена, формат данных, поведение при недоступности внешней стороны. Отдельно описан программный интерфейс, по которому подключаются витрина и мобильное приложение.
- Политики доступа — роли и права на заказы, каталог и цены; ограничения на вход в админку и служебные методы.
- Схема данных и миграции — структура каталога (товары, варианты, коллекции, склады), правила наполнения и порядок переноса из прежней системы.
- Регламент обновлений — периодичность обновления платформы и зависимостей, проверка на тестовом контуре, точки отката.
- Мониторинг и журналы — собираемые метрики, аварийные пороги, маршрут оповещений.
- Документация и чек-лист приёмки — инструкции для администраторов и разработчиков, сценарии проверки перед выкладкой.
Такой состав снимает зависимость от подрядчика: новый инженер входит в систему по схемам и регламентам, а не по памяти предыдущей команды.
Кейс: перенос каталога без остановки продаж
Магазин на старой платформе держал каталог на 40+ тысяч позиций, а синхронизация остатков шла пакетно и блокировала витрину: выгрузка занимала до 40 минут, в это время карточки не открывались, а часть заказов менеджеры оформляли вручную. Расхождения остатков и цен доходили до 8% позиций — поддержка разбирала их ежедневно, вместо того чтобы заниматься покупателями.
Перенос сделали без остановки продаж. Новый контур на Saleor поднимали параллельно рабочему: каталог и история заказов уезжали пакетами на запись, старый магазин продолжал принимать заказы. Пока шла загрузка, встречные изменения доезжали добавочно, а ключи идемпотентности не давали дублям попасть в каталог.
Что изменилось
Переключение витрины прошло без простоя: покупатели не увидели ни страницы обслуживания, ни ошибок оформления, а вернуться на старый контур при отклонении можно было одной командой. Время отклика каталога на тяжёлых фильтрах сократилось почти втрое — индекс и кэш пересобираются в фоне, а не на каждый запрос.
Метрики после
- Простой магазина: ноль вместо плановых нескольких часов.
- Выгрузка каталога: с 40 минут до единиц минут, витрина остаётся доступной.
- Обращения в поддержку по «товара нет / цена не та»: меньше вчетверо.
- Расхождения остатков: с 8% позиций до долей процента.
Освободившееся время поддержки ушло на консультации и работу с оптовыми клиентами, а не на разбор расхождений. Подключение нового канала продаж теперь не требует отдельной выгрузки — каталог уходит из одного источника.
Чем отличается развёртывание с нуля от переноса магазина?
Развёртывание с нуля — чистая инсталляция Saleor: схему каталога проектируем под задачу, а не наследуем от прежней платформы. Атрибуты, варианты товара, склады и правила цен задаются сразу в нужной модели, интеграции подключаются к пустой базе. Объём работ — настройка и проверка сценариев, а не перенос.
Перенос магазина — обратная задача: сохранить работающий бизнес в момент смены платформы. Переносим каталог, категории, атрибуты, остатки, историю заказов и пользователей. Главная сложность — несовпадение схемы каталога: то, что на прежней платформе было одной сущностью, здесь раскладывается на несколько и требует явного преобразования.
Миграция данных идёт через аудит: что переносим как есть, что пересобираем, а что не берём. Выгрузка идёт в нейтральный формат, загрузка — с проверкой сходимости: число позиций, остатки, цены и привязка заказов должны совпасть до и после. Расхождения ищем на тестовом контуре, а не на боевой базе.
Совместимость интеграций — второй крупный риск переезда. Платёжные шлюзы, службы доставки, склад и бухгалтерия обмениваются данными по своим контрактам: часть подключается штатными средствами, часть требует доработки. Старые адреса карточек и категорий уводим на новые постоянными перенаправлениями.
Отсюда вывод: развёртывание с нуля предсказуемо по срокам, переезд — этапы и план отката. При небольшом каталоге и малом числе связей быстрее чистая инсталляция с повторной загрузкой данных.
Ограничения платформы и частые технические вопросы
Платформа закрывает каталог, корзину и оформление из коробки, но границы у неё есть — их лучше знать до запуска. Ниже — сомнения, которые чаще всего звучат на оценке, и то, как мы снимаем их на уровне архитектуры.
Где предел каталога и как витрина ведёт себя на пике?
Ограничение задаёт не число товаров, а индексация и кэш: десятки тысяч позиций с фасетными фильтрами уходят в отдельный поисковый слой. Запросы ограничены по глубине и стоимости, чтобы тяжёлый вызов не занимал обработчик, а приложение масштабируется горизонтально. Корзина и оформление остаются отзывчивыми во время акции.
Как стыкуется склад и учётная система?
Остатки, цены и статусы заказов ходят через API — по расписанию и по событиям. Приоритет источника фиксируем заранее: склад диктует остаток, магазин — цену, а расхождения уходят в журнал и не превращаются в продажу отсутствующего товара.
Что с платежами и безопасностью?
Шлюз подключается конфигурацией, оплата идёт с подтверждением по 3-D Secure. Карточные данные не проходят через приложение — используется токенизация на стороне провайдера, поэтому контур аудита остаётся узким, а платёжный провайдер меняется без переписывания витрины.
В каком порядке выходят обновления платформы?
Новую мажорную ветку мы не выкладываем в день релиза: сначала промежуточный стенд, прогон сценариев заказа и миграции данных, затем выкладка с возможностью отката. Обновления идут пакетами.
Обсудим задачу: что нужно для оценки и старта
Чтобы обсудить задачу предметно и вернуться с оценкой проекта, а не с общими словами, нам нужны границы работ. Ниже — минимальный набор исходных данных. Если чего-то пока нет — не критично: часть уточним на созвоне, часть соберём сами в ходе разбора.
- Каталог: сколько товаров и категорий, какие атрибуты и варианты (размеры, опции), откуда переносим данные.
- Модель продаж: одна витрина или несколько, языки и валюты, нужны ли разные склады и правила доставки.
- Оплата и логистика: какие платёжные провайдеры и службы доставки подключаем, есть ли нестандартные сценарии вроде частичной оплаты или самовывоза.
- Интеграции: ERP, склад, CRM, аналитика — что и в какую сторону должно обмениваться данными с Saleor.
- Нагрузка: ожидаемый трафик в пик, число одновременных покупателей, требования к времени отклика каталога и оформления заказа.
- Инфраструктура: где размещаем проект, какой контур есть сейчас, кто отвечает за доступы, домены и сертификаты.
- Ограничения: дата запуска, обязательства перед партнёрами, что уже готово по контенту и макетам.
На основе этого команда инженеров фиксирует объём, разбивает его на этапы и отдаёт план работ и сроки с явными допущениями и точками согласования. Опишите задачу в удобном виде — вернёмся с оценкой и планом.







