Архитектура коробочных решений S2ERP

Каждое коробочное решение S2ERP состоит из набора следующих технологий:

  • Операционная система Debian
  • Контейнерный оркестратор Docker Swarm.
    Используется для управления контейнерами с основным сервисом (S2ERP), а также его вспомогательными компонентами: чатом, телефонией и другими дополнительными микросервисами. Каждый сервис запускается в своем контейнере, что обеспечивает изоляцию и упрощает масштабирование.
  • СУБД PostgreSQL.
    Используется в качестве основной СУБД для хранения данных. PostgreSQL поднят с использованием Patroni, что позволяет добавлять дополнительные серверы с PostgreSQL в случае необходимости обеспечивать репликацию и отказоустойчивое функционирование.
  • In-memory БД Redis.
    Используется для хранения данных (в основном, хранятся очереди Sidekiq) в оперативной памяти, что обеспечивает быстрый доступ к ним.
  • Брокер сообщений Kafka.
    Используется для обмена сообщениями между сервисами S2ERP.
  • Полнотекстовый поиск ElasticSearch.
    Используется для организации полнотекстового поиска в S2ERP.
  • Хранилище файлов S3.
    Используется для хранения различных бинарных данных (документов, файлов, вложений и т.п.).


Коробочное решение может быть развернуто на одном или нескольких серверах, в зависимости от требований к производительности и отказоустойчивости. Docker Swarm обеспечивает автоматическое масштабирование и балансировку нагрузки между контейнерами, что позволяет эффективнее использовать ресурсы серверов.

Обновление коробочных версий

Обновление компонентов S2ERP, как правило, происходит без необходимости контроля за этим процессом и выглядит следующим образом:

  1. Разработчики выпускают релиз какого-либо компонента (или самой S2ERP) для конкретной коробки путем запуска специального pipeline в инфраструктуре S2.
  2. В конце pipeline "получается" docker-образ, который загружается в docker-репозиторий S2. Сам docker-репозиторий расположен на стороне S2 (т.е. все образы всех коробок хранятся у нас) и у каждой отдельной коробки есть доступ только к СВОЕМУ namespace внутри этого репозитория. Т.е. никакая коробка не может получить доступ к образам других коробок. Сами образы никаких конфиденциальных данных не содержат.
  3. Каждый час в "коробке" запускается скрипт, который автоматически "накатывает" последний доступный образ для каждого компонента S2ERP, а также запускает новые компоненты (если это необходимо для конкретной коробки).

Обновление операционной системы

Коробочная версия S2ERP разворачивается на базе ОС Debian 11.

Системные администраторы компании S2 осуществляют только ПЕРВОНАЧАЛЬНУЮ установку и настройку операционной системы и некоторых требуемых для функционирования пакетов. При первоначальной настройке сервера коробки создается специальный системный пользователь s2support (с UID/GID = 744), "под которым" работают все сервисы S2ERP.

Дальнейшая поддержка установленных пакетов операционной системы в актуальном состоянии должна осуществляться системными администраторами клиента.

Как правило, для этого достаточно периодически (например, раз в месяц) выполнять следующую последовательность команд (под пользователем root):

apt-get update
apt-get upgrade

Важное примечание:
Обновлять версию (релиз) самой ОС (т.е. запускать команду apt-get full-upgrade) без запроса в службу поддержки S2 НЕ РЕКОМЕНДУЕТСЯ, т.к. это может привести к частичной неработоспособности коробочной S2ERP.

Если при выполнении команды apt-get upgrade в списке обновляемых пакетов будут такие пакеты, как:

  • docker-*
  • containerd.io
  • haproxy
  • postgresql-*
  • redis-server

то нужно учесть, что их обновление приведет к небольшому downtime (~ 3-7 минут) системы на время перезапуска обновляемых сервисов. Т.е. в случае наличия данных пакетов в списке на обновление, рекомендуется предупредить об обновлении пользователей коробочной S2ERP.