Skip to content

SaaS-стенд

Мультитенантный стенд (APP_MODE=saas): много организаций в одной инсталляции, самостоятельная регистрация тенантов, управление через панель суперадмина. Стек сервисов тот же, что и on-premise, отличаются конфигурация и DNS.

Отличия от on-premise

АспектOn-premiseSaaS
Compose-файлdocker-compose-onpremise.ymldocker-compose-prod.yml
Env-файлonpremise.envprod.env
ТенантыОдин, создаётся tenant:initМного, создаются регистрацией или суперадмином
РегистрацияОбычно закрытаОткрыта (управляется в SuperAdmin Settings)
ЛицензияФайл .lic, обязательнаНе используется (status: valid, reason: saas)
ACMEHTTP-01 (достаточно A-записи)DNS-01 через Cloudflare — нужен и для поддоменов
ЛокалиЧасто LOCALE_LOCK=ruВсе локали, тенант выбирает набор сам

DNS и сертификаты

Резолвер Let's Encrypt в traefik/traefik.yml настроен на DNS-01 challenge через Cloudflare — домен должен обслуживаться в Cloudflare, а Traefik получает API-токен Cloudflare через окружение контейнера. DNS-01 нужен, чтобы выпускать сертификаты без публикации каждого поддомена и до того, как он начал отвечать.

Записи:

  • A на основной домен приложения → IP сервера;
  • при использовании поддоменов тенантов (SAAS_DOMAIN) — wildcard-запись *.<домен> → тот же IP.

Развёртывание

Процедура повторяет on-premise с заменой файлов:

bash
git clone <repo_url> /opt/hosting/orbita/prod
cd /opt/hosting/orbita/prod
cp prod.env.example prod.env   # если шаблона нет — взять onpremise.env.example за основу
# заполнить prod.env: APP_MODE=saas, SAAS_DOMAIN, секреты — см. deploy/env

docker compose --env-file prod.env -f docker-compose-prod.yml build
docker compose --env-file prod.env -f docker-compose-prod.yml up -d

docker exec orbita_prod_backend php artisan migrate --force
docker exec orbita_prod_backend php artisan db:seed --class=RoleSeeder --force
docker exec orbita_prod_backend php artisan db:seed --class=FrontendTranslationSeeder --force
docker exec orbita_prod_backend php artisan search:rebuild

tenant:init не выполняется — тенанты в SaaS создаются через регистрацию (/signup) или суперадмином.

Суперадмин

Панель /superadmin — единственный способ управлять тенантами, поэтому суперадмина создать обязательно:

bash
docker exec -it orbita_prod_backend php artisan superadmin:create \
  --name="Platform Admin" --email="superadmin@example.com" --password="..."

Что делает суперадмин в эксплуатации (метрики, suspend/restore, фичи тенантов, GDPR-политики, импersonation) — см. SaaS: панель суперадмина.

Первичная настройка платформы

После запуска в SuperAdmin → Settings проверьте:

  • registration_enabled — открыта ли самостоятельная регистрация новых организаций;
  • OAuth-провайдеры (Google/GitHub) — включать только если заполнены их ключи в env;
  • processes_enabled — глобальный выключатель модуля бизнес-процессов (по умолчанию выключен; включается здесь и, при необходимости, точечно по тенантам).

Почта в SaaS

Уведомления, приглашения и magic-link порталов критичны для SaaS — настройте реальный SMTP-релей (MAIL_MAILER=smtp) до открытия регистрации, иначе новые организации не смогут приглашать сотрудников.

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