Skip to content

Компоненты стенда

Стенд Orbita — это набор Docker-контейнеров, описанный одним compose-файлом. Все стенды (on-premise, SaaS, демо) собираются из одних и тех же компонентов; различаются только env-файл, имена контейнеров и схема сетей.

Схема

                    ┌──────────────┐
        :80/:443 →  │   Traefik    │  TLS (Let's Encrypt), роутинг по Host/Path
                    └──────┬───────┘
        ┌──────────┬───────┼───────────┬──────────┐
        ▼          ▼       ▼           ▼          ▼
   ┌─────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
   │frontend │ │backend │ │ reverb │ │seaweedfs│ │ docs   │
   │Vue SPA  │ │Laravel │ │WebSocket│ │  S3    │ │VitePress│
   │(nginx)  │ │(Apache)│ │        │ │        │ │(nginx) │
   └─────────┘ └───┬────┘ └───┬────┘ └────────┘ └────────┘
                   │          │
     ┌─────────┬───┴────┬─────┴───┬──────────────┐
     ▼         ▼        ▼         ▼              ▼
 ┌────────┐ ┌──────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
 │database│ │redis │ │meilisearch│ │   queue   │ │ scheduler │
 │Postgres│ │      │ │  поиск    │ │ + queue-  │ │ cron-задачи│
 │  16    │ │      │ │           │ │  reports  │ │           │
 └────────┘ └──────┘ └───────────┘ └───────────┘ └───────────┘

Сервисы

СервисОбраз / базаРольНаружу
traefiktraefikReverse proxy, TLS-терминация (Let's Encrypt), роутинг по хостам и путям80, 443
frontendnode build → nginxVue SPA — статикачерез Traefik
backendphp:8.4 + ApacheLaravel API (/api, /sanctum, /storage, /login, /logout)через Traefik
reverbтот же образ backendWebSocket-сервер (Laravel Reverb), путь /appчерез Traefik
databasepostgres:16-alpineОсновная БДнет
redisredisКэш, сессии, очерединет
meilisearchgetmeili/meilisearchПолнотекстовый поискнет
seaweedfschrislusf/seaweedfsS3-совместимое хранилище файлов (вложения), путь /s3через Traefik
queueтот же образ backendВоркер основной очереди (queue:work)нет
queue-reportsтот же образ backendВыделенный воркер экспорта отчётов (очередь reports, 512M)нет
schedulerтот же образ backendПланировщик (schedule:work) — cron-задачи приложениянет
docsnode build → nginxПользовательская документация (VitePress)через Traefik
admin-docsnode build → nginxЭта документациячерез Traefik

Контейнеры backend, reverb, queue, queue-reports, scheduler собираются из одного образа — различаются только командой запуска. Любое обновление кода требует пересборки одного образа и перезапуска всех пяти.

Именование контейнеров по стендам

СтендCompose-файлПрефикс контейнеровEnv-файл
On-premise (у заказчика)docker-compose-onpremise.ymlorbita_onpremise_*onpremise.env
SaaS productiondocker-compose-prod.ymlorbita_prod_*prod.env
Демо app.orbitaitsm.ru (лендинг на orbitaitsm.ru)docker-compose-orbitaitsm.ymlorbitaitsm_prod_*orbitaitsm.env

В командах ниже по документации используются имена on-premise стенда (orbita_onpremise_backend и т.д.) — для других стендов подставьте соответствующий префикс.

Сети

  • Внутренняя сеть стендаdatabase, redis, meilisearch, queue, queue-reports, scheduler подключены только к ней. Наружу они не смотрят и через Traefik недоступны.
  • Сеть Traefik — к ней подключены только сервисы, которые Traefik маршрутизирует: frontend, backend, reverb, seaweedfs, docs.

Не объединяйте внутренние сети разных стендов

Если два стенда на одном сервере окажутся в общей сети, Docker DNS будет резолвить одинаковые hostname (например, database) в случайный из двух контейнеров. Это реальный пережитый инцидент («password authentication failed for user orbita»). Внутренняя сеть — строго своя у каждого стенда; общая — только сеть Traefik. Подробнее: Второй стенд на одном сервере.

Потоки данных

  • HTTP-запросы: браузер → Traefik → frontend (статика) или backend (/api/...).
  • Realtime: браузер держит WebSocket через Traefik (/app) к reverb; backend публикует события через Redis.
  • Файлы: вложения хранятся в SeaweedFS (S3 API); ссылки для скачивания идут через путь /s3 того же домена.
  • Поиск: backend индексирует записи в Meilisearch (Laravel Scout); глобальный поиск ходит в него же.
  • Фоновые задачи: backend кладёт задания в Redis-очереди; queue разбирает основную очередь, queue-reports — тяжёлые экспорты отчётов; scheduler запускает регулярные задачи каждую минуту.

Режимы работы

APP_MODEЧто означает
onpremiseОдин тенант, одна организация. Регистрация обычно закрыта, интерфейс может быть зафиксирован на одном языке (LOCALE_LOCK=ru). Работает лицензирование
saasМультитенантный режим: много организаций в одной БД, управление через панель суперадмина, поддомены тенантов

Orbita ITSM — документация для системных администраторов