Appearance
SaaS-стенд
Мультитенантный стенд (APP_MODE=saas): много организаций в одной инсталляции, самостоятельная регистрация тенантов, управление через панель суперадмина. Стек сервисов тот же, что и on-premise, отличаются конфигурация и DNS.
Отличия от on-premise
| Аспект | On-premise | SaaS |
|---|---|---|
| Compose-файл | docker-compose-onpremise.yml | docker-compose-prod.yml |
| Env-файл | onpremise.env | prod.env |
| Тенанты | Один, создаётся tenant:init | Много, создаются регистрацией или суперадмином |
| Регистрация | Обычно закрыта | Открыта (управляется в SuperAdmin Settings) |
| Лицензия | Файл .lic, обязательна | Не используется (status: valid, reason: saas) |
| ACME | HTTP-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:rebuildtenant: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) до открытия регистрации, иначе новые организации не смогут приглашать сотрудников.