Это старая версия документа!
Содержание
Подключение установленного ShariX Open к Платформе ShariX
Эта инструкция описывает порядок действий для владельца сервиса, у которого уже установлен и работает экземпляр ShariX Open, и который хочет подключить его к Платформе ShariX.
После подключения:
- пользователи смогут регистрироваться на сервисе с синхронизацией профиля через платформу;
- пользователь платформы сможет подключить сервис через интерфейс платформы;
- платформа сможет создавать пользователя на сервисе через API;
- изменения профиля и пароля смогут синхронизироваться между платформой и подключенными сервисами;
- владелец сервиса будет назначен единственным пользователем с ролью
METASERVICE-ADMINна сервисе.
1. Термины
| Термин | Что означает |
|---|---|
| Сервис | Установленный экземпляр ShariX Open. Например, https://open.example.org/. |
| Платформа | Центральная платформа ShariX. Например, https://platform.example.org/. |
METASERVICE_ID | ID записи сервиса на платформе. Создается платформой после регистрации сервиса. |
PLATFORM_API_URL | API URL платформы, настроенный на сервисе вручную. Например, https://platform.example.org/my/api/. |
PLATFORM_API_KEY | Ключ, который платформа выдает сервису для доступа сервиса к API платформы. |
| Ключ доступа платформы к сервису | Ключ, который генерируется на сервисе и переносится на платформу в поле dbsynce_key. |
api_url сервиса на платформе | URL API установленного сервиса. Например, https://open.example.org/my/api/. |
dbsynce_key на платформе | Ключ доступа платформы к API сервиса. Генерируется на сервисе. |
<note important> Не путайте два разных направления доступа:
- Сервис → Платформа: сервис использует
PLATFORM_API_URLиPLATFORM_API_KEY. - Платформа → Сервис: платформа использует
api_urlсервиса и ключ, сгенерированный на сервисе.
</note>
2. Что должно быть уже готово
Перед подключением убедитесь, что:
- ShariX Open установлен и открывается в браузере.
- На сервисе есть пользователь, который может зайти в кабинет администратора сервиса.
- На платформе есть пользователь, который будет создавать запись сервиса.
- Установлены и применены миграции всех подключенных модулей.
- Сервис доступен с платформы по сети.
- На сервисе в
.envуказан корректныйPLATFORM_API_URL.
Пример настройки на сервисе:
PLATFORM_INTEGRATION=2 PLATFORM_API_URL=https://platform.example.org/my/api/ DEFAULT_CLIENT_ROLE=METASERVICE-CLIENT
Рекомендуемый режим для первичной настройки:
PLATFORM_INTEGRATION=2
Это подготовительный режим. В нем можно настраивать интеграцию, проверять ключи и API, не считая сервис полностью активным.
После успешной проверки можно перейти в активный режим:
PLATFORM_INTEGRATION=1
3. Режимы интеграции
| Значение | Название | Смысл |
|---|---|---|
0 | off | Интеграция отключена. Сервис работает автономно. |
1 | active | Активная интеграция. Изменения синхронизируются между сервисом и платформой. |
2 | setup | Подготовительный режим. API-синхронизация возможна, но сервис еще не считается активным для пользователей платформы. |
3 | error | Аварийный режим. Используется, если активный сервис перестал корректно синхронизироваться. |
4 | deleted | Удалено / больше не используется. Применяется на платформе. |
<note warning>
PLATFORM_INTEGRATION на сервисе — это настройка администратора сервиса. Платформа не должна автоматически менять это значение в .env.
</note>
4. Шаг 1. Настроить сервис перед подключением к платформе
Выполняется на сервере сервиса ShariX Open.
Откройте .env установленного сервиса и проверьте:
PLATFORM_INTEGRATION=2 PLATFORM_API_URL=https://platform.example.org/my/api/ DEFAULT_CLIENT_ROLE=METASERVICE-CLIENT
Если сервис должен регистрировать обычных пользователей как клиентов сервиса:
DEFAULT_CLIENT_ROLE=METASERVICE-CLIENT
Если сервис должен регистрировать пользователей только локально, без синхронизации:
DEFAULT_CLIENT_ROLE=METASERVICE-GUEST
Если сервис должен принимать заявки корпоративных клиентов:
DEFAULT_CLIENT_ROLE=METASERVICE-CORPCLIENT
<note important>
Если указано METASERVICE-GUEST, пользователи при ручной регистрации создаются локально, без записи Client и без синхронизации с платформой.
</note>
5. Шаг 2. Сгенерировать на сервисе ключ доступа для платформы
Выполняется в интерфейсе сервиса ShariX Open.
- Войдите на сервис под пользователем с правами администратора сервиса.
- Откройте кабинет метасервиса.
- Нажмите кнопку генерации API-ключа для платформы.
- Скопируйте полученный ключ.
Этот ключ нужен платформе, чтобы обращаться к API сервиса.
Пример того, куда платформа потом будет обращаться:
GET https://open.example.org/my/api/v1/platform/health/ PATCH https://open.example.org/my/api/v1/platform/settings/ POST https://open.example.org/my/api/v1/platform/users/register/ PATCH https://open.example.org/my/api/v1/platform/users/profile/
<note warning> В рабочем режиме ключ может быть показан только один раз после генерации. Скопируйте его сразу.
В отладочном режиме DEBUG=True ключ может дополнительно отображаться в кабинете сервиса, чтобы его было удобно перенести на платформу.
</note>
6. Шаг 3. Создать сервис на платформе
Выполняется на Платформе ShariX.
- Войдите на платформу под пользователем, который будет владельцем/представителем сервиса.
- Откройте раздел создания сервиса.
- Заполните данные сервиса:
- название сервиса;
- юридическое название;
- ИНН;
- реквизиты;
- описание;
- URL сайта сервиса;
- API URL сервиса;
- ключ доступа платформы к сервису.
Ключевые поля для интеграции:
| Поле на платформе | Что указать |
|---|---|
api_url | API URL установленного сервиса. Например, https://open.example.org/my/api/. |
dbsynce_key | Ключ, который был сгенерирован на сервисе для доступа платформы к API сервиса. |
Пример:
api_url=https://open.example.org/my/api/ dbsynce_key=ключ_сгенерированный_на_сервисе
После сохранения платформа создает запись сервиса и выдает сервису собственный API-ключ для обратного доступа:
PLATFORM_API_KEY
Этот ключ нужен сервису, чтобы обращаться к API платформы.
7. Что платформа делает автоматически после сохранения сервиса
Если на платформе заполнены:
api_url;dbsynce_key;- платформенный API-ключ для сервиса,
то платформа автоматически пытается выполнить настройку сервиса.
7.1. Передача настроек на сервис
Платформа вызывает API сервиса:
PATCH /my/api/v1/platform/settings/
На сервис передаются только:
{
"metaservice_id": "<ID сервиса на платформе>",
"platform_api_key": "<ключ, выданный платформой сервису>"
}
Сервис записывает в свой .env:
METASERVICE_ID=<ID сервиса на платформе> PLATFORM_API_KEY=<ключ, выданный платформой сервису>
<note important>
Платформа не перезаписывает PLATFORM_API_URL на сервисе. Этот URL задается администратором сервиса вручную.
</note>
7.2. Назначение METASERVICE-ADMIN на сервисе
После обновления настроек платформа вызывает API сервиса и передает текущего пользователя платформы как администратора сервиса:
POST /my/api/v1/platform/users/register/
С ролью:
METASERVICE-ADMIN
Сервис должен:
- создать пользователя, если его еще нет;
- назначить ему роль
METASERVICE-ADMIN; - снять
METASERVICE-ADMINс тестового пользователя2101, если он был; - снять лишние права
METASERVICE-ADMINс других пользователей; - оставить только одного
METASERVICE-ADMIN.
7.3. Проверка состояния сервиса
Платформа вызывает:
GET /my/api/v1/platform/health/
И проверяет:
metaservice_admin_is_valid = true metaservice_admin_count = 1
Если на сервисе больше одного METASERVICE-ADMIN, активная интеграция считается некорректной.
8. Шаг 4. Проверить результат на сервисе
Выполняется на сервисе ShariX Open.
Проверьте .env сервиса:
PLATFORM_INTEGRATION=2 PLATFORM_API_URL=https://platform.example.org/my/api/ METASERVICE_ID=<ID сервиса на платформе> PLATFORM_API_KEY=<ключ, выданный платформой сервису>
Проверьте, что в сервисе:
- появился или обновился пользователь-владелец сервиса;
- у него есть роль
METASERVICE-ADMIN; - у пользователя
2101больше нет ролиMETASERVICE-ADMIN, если она была; - в кабинете метасервиса нет предупреждения о нескольких
METASERVICE-ADMIN.
Если используется Testkit, можно проверить endpoint:
GET /my/api/v1/platform/health/
Ожидаемый смысл ответа:
status=ok metaservice_admin_is_valid=true metaservice_admin_count=1 platform_api_key_configured=true
9. Шаг 5. Активировать сервис
После успешной настройки можно перевести сервис из подготовительного режима в активный.
На сервисе в .env:
PLATFORM_INTEGRATION=1
После изменения .env перезапустите приложение сервиса.
На платформе сервис также должен быть в активном статусе интеграции.
10. Регистрация пользователей после подключения
10.1. Пользователь регистрируется на сервисе
Если на сервисе:
DEFAULT_CLIENT_ROLE=METASERVICE-CLIENT PLATFORM_INTEGRATION=1
или:
PLATFORM_INTEGRATION=2
то при регистрации пользователь может выбрать синхронизацию с платформой.
Если пользователь выбрал синхронизацию:
- сервис пытается создать пользователя на платформе;
- если платформа успешно создала пользователя, на сервисе создается
Clientсis_global = true; - если платформа недоступна, пользователь создается локально, а
Client.is_globalостаетсяfalse; - если пользователь уже существует на платформе, сервис предлагает перейти на платформу и подключить сервис там.
10.2. Пользователь уже есть на платформе
Если пользователь уже существует на платформе и хочет подключить сервис:
- пользователь авторизуется на платформе;
- открывает список активных сервисов;
- выбирает нужный сервис;
- нажимает подключение сервиса.
После этого платформа вызывает API сервиса и создает/обновляет пользователя на сервисе.
10.3. Корпоративный клиент
Если на сервисе:
DEFAULT_CLIENT_ROLE=METASERVICE-CORPCLIENT
то при регистрации:
- создается пользователь;
- назначается роль корпоративного клиента;
- создается
Clientв неактивном состоянии; - создается заявка
CorpClient; - текущий пользователь становится представителем корпоративного клиента.
11. Синхронизация профиля пользователя
Состояние синхронизации пользователя на сервисе хранится в записи Client:
| Значение | Смысл |
|---|---|
Client.is_global = true | Профиль пользователя синхронизируется с платформой. |
Client.is_global = false | Пользователь работает локально на сервисе. |
Если у пользователя нет записи Client, он считается локальным пользователем сервиса.
Пользователь может управлять синхронизацией в своем профиле, если:
- сервис подключен к платформе;
PLATFORM_INTEGRATIONравен1или2;- у пользователя есть запись
Client; - базовая роль регистрации допускает создание клиента.
12. Смена профиля и пароля
Если у пользователя включена синхронизация:
- изменение профиля на сервисе отправляется на платформу;
- смена пароля на сервисе отправляется на платформу;
- платформа обновляет данные у себя;
- платформа пробует отправить изменения на другие сервисы, с которыми пользователь связан и где включена синхронизация.
Если один из связанных сервисов не принял изменение:
- операция для пользователя-инициатора не откатывается;
- профиль или пароль на инициирующем сервисе уже изменены;
- платформа переводит проблемный сервис в аварийный режим;
- пользователю может быть показано предупреждение со списком сервисов, где синхронизация не удалась.
13. Аварийный режим
Если активный сервис должен синхронизироваться с платформой, но API сервиса недоступен или возвращает ошибку, платформа может перевести сервис в статус:
3
Это означает:
error
В аварийном режиме сервис не считается корректно синхронизированным.
Чтобы вернуть сервис в рабочее состояние:
- проверьте доступность API сервиса;
- проверьте
api_urlна платформе; - проверьте
dbsynce_keyна платформе; - проверьте
PLATFORM_API_URLна сервисе; - проверьте
METASERVICE_IDиPLATFORM_API_KEYна сервисе; - проверьте, что на сервисе ровно один
METASERVICE-ADMIN; - после исправления переведите статус интеграции обратно в активный.
14. Минимальный чек-лист подключения
На сервисе
- Установлен ShariX Open.
- В
.envуказанPLATFORM_API_URL. - В
.envуказанPLATFORM_INTEGRATION=2для первичной настройки. - Сгенерирован ключ доступа платформы к сервису.
- Скопирован сгенерированный ключ.
На платформе
- Создана запись сервиса.
- Заполнен
api_urlсервиса. - В
dbsynce_keyвставлен ключ, сгенерированный на сервисе. - Платформа выдала сервису
PLATFORM_API_KEY. - Платформа успешно записала на сервис
METASERVICE_IDиPLATFORM_API_KEY. - Платформа назначила текущего пользователя единственным
METASERVICE-ADMINна сервисе. - Health-check сервиса проходит успешно.
После настройки
- На сервисе в
.envпоявилисьMETASERVICE_IDиPLATFORM_API_KEY. PLATFORM_API_URLостался заданным вручную.- На сервисе ровно один
METASERVICE-ADMIN. - Пользователь-владелец сервиса может зайти в кабинет сервиса.
- Сервис можно перевести из
PLATFORM_INTEGRATION=2вPLATFORM_INTEGRATION=1.
15. Типовые ошибки
Платформа не может связаться с сервисом
Проверьте:
- правильно ли заполнен
api_urlна платформе; - доступен ли сервис из сети платформы;
- заканчивается ли
api_urlна/my/api/; - не блокирует ли доступ firewall;
- корректен ли ключ
dbsynce_key.
Сервис не может связаться с платформой
Проверьте на сервисе:
PLATFORM_API_URL METASERVICE_ID PLATFORM_API_KEY PLATFORM_INTEGRATION
Пользователь уже существует на платформе
Это не всегда ошибка.
Если пользователь выбрал синхронизацию на сервисе, но уже существует на платформе, он должен:
- авторизоваться на платформе;
- открыть список сервисов;
- подключить нужный сервис через интерфейс платформы.
На сервисе несколько METASERVICE-ADMIN
Сервис в таком состоянии не считается корректно настроенным для активной интеграции.
Нужно оставить одного администратора сервиса и снять роль METASERVICE-ADMIN с остальных пользователей.
В кабинете метасервиса должно отображаться предупреждение и кнопки для снятия лишних прав.
Таблицы Testkit не созданы
Если при открытии Testkit появляется ошибка вида:
relation "testkit_run" does not exist
нужно убедиться, что миграции модуля Testkit применены.
Обычно достаточно выполнить общий update/install, который запускает миграции. Если модуль был подключен позднее, проверьте, что приложение sharix_testkit действительно включено в настройки проекта и что его миграции применены.
16. Рекомендуемый порядок для запуска
- На сервисе установить
PLATFORM_INTEGRATION=2. - На сервисе указать
PLATFORM_API_URL. - На сервисе сгенерировать ключ доступа платформы к сервису.
- На платформе создать запись сервиса.
- На платформе указать
api_urlсервиса. - На платформе вставить ключ сервиса в
dbsynce_key. - Сохранить сервис на платформе.
- Дождаться автоматической записи
METASERVICE_IDиPLATFORM_API_KEYна сервис. - Проверить, что текущий пользователь стал единственным
METASERVICE-ADMINна сервисе. - Проверить health-check.
- Перевести сервис в
PLATFORM_INTEGRATION=1. - Провести тестовую регистрацию пользователя.
- Провести тестовое подключение уже существующего пользователя платформы к сервису.
- Провести тестовое изменение профиля и пароля.