Установка и эксплуатация
Документ содержит сведения, необходимые для установки и эксплуатации программы «Парсвайс» в инфраструктуре заказчика: состав поставки, требования к среде, настройку, порядок установки и эксплуатации.
1. Комплект поставки
| Составляющая | Содержание |
|---|---|
| Образ сервера | сервер программного интерфейса, обработчик очередей и планировщик задач: один образ, запускаемый тремя отдельными развёртываниями с разными командами запуска |
| Образ панели управления | веб-интерфейс сотрудников и администраторов проекта |
| Образ сервиса векторизации | сервер инференса с моделью векторизации deepvk/USER-bge-m3 (размерность вектора 1024), встроенной в образ; из этого образа запускаются два пула — для индексации и для поисковых запросов |
| Виджет | статический бандл widget.iife.js и widget.css для размещения на сайте или в личном кабинете |
| Манифесты Kubernetes | файлы репозитория k8s: manifests/00-namespace.yaml, 02-backend.yaml, 02a-embedder-index.yaml, 02b-embedder-query.yaml, 03-celery.yaml, 03a-backend-domains-rbac.yaml, 04-admin-frontend.yaml, 06-ingress.yaml, 06a-ingress-shops.yaml шаблон секретов docs/delivery-secrets-template.yaml и образец политики доступа бакета storage/media-bucket-policy.json, а также файл репозитория сервера k8s/custom-domains.yaml — маршрутизация собственных доменов проектов: развёртывания, сервисы, маршрутизация, автомасштабирование; учётная запись и права обработчика очередей для подключения собственных доменов проектов |
| Документация | настоящий документ, Функциональные характеристики, Руководство пользователя и администратора |
Манифесты поставки — это манифесты облачной установки правообладателя, в них записаны её адреса и сервисы. Перед применением заказчик приводит их к своей установке:
- адреса образов — на версии из реестра поставки;
- значения, записанные в манифестах сервера и обработчика очередей прямо:
FRONTEND_URL,SHOPS_DOMAIN,R2_ENDPOINT,R2_PUBLIC_URL,SMTP_HOST,SMTP_PORT,SMTP_USE_TLS,SMTP_START_TLS— на свои (значение в манифесте главнее значения в секрете);LLM_MODEL_QUERY— на имя своей модели либо удалить; - ссылки на ключи секрета
yandex-gpt-api-key,yandex-gpt-folder-id,yandex-maps-api-keyи на секретmetrika-credentials— удалить: они нужны только облачной установке, а без них в кластере поды не запускаются; - в манифесте панели управления — удалить
NEXT_PUBLIC_API_URLиNEXT_PUBLIC_YM_COUNTER_IDи задать параметрыPARSEWISE_*из раздела 3; - шаблон секретов — заполнить своими значениями и применить; в нём все секреты, которые читают манифесты поставки, в том числе
app-config-fullс параметрамиSECRET_KEY,DOCS_USERNAME,DOCS_PASSWORD,EMAIL_FROM,INGRESS_LB_IP,LLM_BASE_URL; - параметры сервисов, которые заказчик не использует, — удалить: приём платежей через Robokassa, Яндекс Метрику;
- образец политики доступа бакета — подставить имя своего бакета и учётную запись сервера; он написан для Yandex Object Storage, в другом хранилище те же правила доступа (раздел 2) задаются его средствами;
- для адресов проектов вида
проект.домен— выпустить сертификат на*.доменчерез cert-manager с проверкой DNS01 у своего DNS-провайдера и указать его в06a-ingress-shops.yaml.
Манифесты маркетингового сайта, документации и мониторинга в поставку не входят.
Образы передаются архивом OCI для загрузки в реестр заказчика либо через реестр образов правообладателя.
Образы собираются из зеркал правообладателя: базовые образы, пакеты Python и пакеты npm при сборке не загружаются из публичных репозиториев. Для обработки аудио и видео в образ сервера входит ffmpeg из дистрибутива Debian. Модель векторизации при установке и запуске не загружается. Процессы в контейнерах сервера и панели управления работают от непривилегированного пользователя.
2. Требования к среде
| Компонент | Требование |
|---|---|
| Оркестратор | Kubernetes; программа эксплуатируется на версии 1.32. Манифесты используют API apps/v1, autoscaling/v2, networking.k8s.io/v1, rbac.authorization.k8s.io/v1 |
| Узлы | архитектура x86-64 (linux/amd64); компоненты поставляются контейнерами и не требуют привилегий на узле: без привилегированного режима, доступа к файловой системе и сети узла. Операционная система узлов — Linux с контейнерным рантаймом, поддерживаемым Kubernetes, в том числе Astra Linux Special Edition 1.8, РЕД ОС 8 и ALT Linux |
| Сервер метрик | сервер метрик Kubernetes — автомасштабирование работает по загрузке CPU и памяти подов |
| Реестр образов | OCI-совместимый, доступен из кластера |
| Входной контроллер | ingress-nginx или аналог: TLS, маршрутизация по доменным именам, лимит тела запроса не менее 100 МБ, таймауты соединения, отправки и чтения не менее 300 с — ответ ассистента передаётся потоком |
| Сертификаты TLS | выпускаются cert-manager для входного контроллера по ClusterIssuer, который выбирает заказчик, в том числе по внутреннему удостоверяющему центру заказчика; в облачной установке правообладатель использует публичный удостоверяющий центр |
| PostgreSQL | две базы: основная и векторная; программа эксплуатируется на PostgreSQL 15 |
| pgvector | расширение в векторной базе: должен быть доступен тип vector; программа создаёт индексы IVFFlat |
| Redis | брокер очередей и кеш; программа эксплуатируется на Valkey 7.2, совместимом с Redis |
| Объектное хранилище | S3-совместимое, один бакет. Панель управления загружает файлы в хранилище прямо из браузера по подписанной ссылке; по подписанным ссылкам панель и виджет получают и файлы базы знаний с вложениями диалогов. Поэтому хранилище должно быть доступно из браузеров пользователей по HTTPS, а в правилах CORS бакета разрешены запросы GET и PUT с адреса панели. Чтение без авторизации разрешается только для открытых объектов — аватаров, обложек, медиа товаров и профилей, фотографий отзывов, ресурсов навыков: префиксы system/, users/, skills/, tmp/, shops/*/avatar/, shops/*/cover/, shops/*/bot_avatar/, shops/*/products/, shops/*/temp/, shops/*/reviews/. Файлы базы знаний (shops/*/files/) и вложения диалогов (shops/*/chats/) без авторизации не отдаются, список объектов бакета — тоже. Учётной записи, ключи которой заданы серверу, нужны чтение, запись, удаление и получение списка объектов |
| Языковая модель | размещается заказчиком, OpenAI-совместимый программный интерфейс — например, vLLM |
| Доступ в Интернет | не требуется при размещении языковой модели в контуре заказчика, за исключением распознавания речи в аудио и видео (Yandex SpeechKit) и входа через Яндекс ID и VK ID, если эти функции включены. Без доступа к Yandex SpeechKit файлы сохраняются, но речь из них не извлекается |
Каждый под сервера и обработчика очередей открывает до 40 подключений к PostgreSQL. При большом числе реплик рекомендуется пул соединений, например PgBouncer или Odyssey.
Вычислительные ресурсы
| Компонент | Реплики | Запрос CPU / RAM | Лимит CPU / RAM | Автомасштабирование |
|---|---|---|---|---|
| Сервер программного интерфейса | 1–10 | 500m / 512Mi | 2000m / 2Gi | CPU 70%, память 80% |
| Обработчик очередей | 4–10 | 500m / 1Gi | 2000m / 4Gi | CPU 70%, память 80% |
| Планировщик задач | ровно 1 | 50m / 128Mi | 200m / 256Mi | нет |
| Векторизация, индексация | 2–6 | 1000m / 2.5Gi | 4000m / 4Gi | CPU 70% |
| Векторизация, запросы | 2–6 | 500m / 2.5Gi | 2000m / 4Gi | CPU 70% |
| Панель управления | 1–10 | 200m / 256Mi | 1000m / 1Gi | CPU 70% |
Сумма запросов ресурсов без системных компонентов Kubernetes: около 5,8 vCPU и 14,9 ГиБ памяти при минимальном числе реплик, около 21,1 vCPU и 47,6 ГиБ при максимальном. Узел должен вмещать под векторизации с запросом памяти 2,5 ГиБ.
Конфигурация, на которой программа эксплуатируется правообладателем: 4–10 узлов по 4 vCPU и 8 ГиБ с автоматическим добавлением узлов; основная и векторная базы — отдельные кластеры PostgreSQL 15 по 2 vCPU и 8 ГиБ с диском 20 ГиБ и автоматическим увеличением до 64 ГиБ; Valkey 7.2 — 2 vCPU и 4 ГиБ.
3. Настройка
Параметры сервера, обработчика очередей и планировщика задаются переменными окружения — из секретов Kubernetes или значениями в манифестах (раздел 1). Все три развёртывания получают одинаковые параметры подключения к базам, Redis и объектному хранилищу.
Обязательные
| Параметр | Назначение |
|---|---|
DATABASE_URL | основная база PostgreSQL |
VECTOR_DATABASE_URL | векторная база с pgvector. Без этого параметра векторное хранилище не запускается: подстановка основной базы намеренно запрещена |
REDIS_URL | брокер очередей и кеш |
SECRET_KEY | ключ подписи токенов сессии |
R2_ENDPOINT, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET, R2_PUBLIC_URL | объектное хранилище: адрес, ключи доступа, бакет и адрес, по которому браузеры получают открытые объекты бакета. Подписанные ссылки на файлы базы знаний и вложения диалогов программа строит на адресе R2_ENDPOINT. Имена параметров исторические, подходит любое S3-совместимое хранилище |
DOCS_USERNAME, DOCS_PASSWORD | логин и пароль доступа к документации программного интерфейса по адресу /v1/docs |
FRONTEND_URL | адрес панели управления заказчика; используется в ссылках писем |
EMAIL_FROM | адрес отправителя писем |
SHOPS_DOMAIN | домен адресов проектов вида проект.домен; используется в адресах проектов и при проверке хоста корпоративного входа (SSO) |
INGRESS_LB_IP | внешний адрес входного контроллера; показывается в подсказках по настройке DNS при подключении собственного домена проекта |
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_USE_TLS, SMTP_START_TLS | почтовый сервер. Обязателен: вход по паролю требует подтверждения адреса кодом из письма, по почте также приходят восстановление пароля и приглашения в проект |
Параметры FRONTEND_URL, EMAIL_FROM, SHOPS_DOMAIN и INGRESS_LB_IP имеют значения по умолчанию, указывающие на облачную установку правообладателя, поэтому в установке заказчика их необходимо задать.
Языковая модель
| Параметр | Значение |
|---|---|
LLM_SERVICE | openai — любая модель с OpenAI-совместимым интерфейсом. Задаётся явно: значение по умолчанию yandex направляет запросы в Yandex Cloud |
LLM_BASE_URL | адрес модели заказчика, например http://llm.internal:8000/v1 |
LLM_MODEL | имя модели. Без LLM_BASE_URL и LLM_MODEL подключение к модели не инициализируется |
OPENAI_API_KEY | ключ доступа к модели, если сервер модели его требует; необязательно |
LLM_MODEL_QUERY | отдельная модель для переформулировки поискового запроса; необязательно, если не задан — используется LLM_MODEL. В манифестах облачной установки задан прямо (раздел 1) |
Сервисы компании OpenAI программой не используются: «OpenAI-совместимый» — это только формат программного интерфейса, который поддерживают vLLM и другие серверы моделей. Имена openai и OPENAI_API_KEY сохранены по этому формату.
Векторизация
| Параметр | Назначение |
|---|---|
LOCAL_EMBEDDING_URL | адрес сервиса векторизации для индексации |
QUERY_EMBEDDING_URL | адрес пула векторизации для поисковых запросов; если не задан, используется LOCAL_EMBEDDING_URL |
Необязательные
| Параметр | Назначение |
|---|---|
MAX_UPLOAD_SIZE | предельный размер файла, скачиваемого из источника по ссылке, в байтах; по умолчанию 100 МиБ |
FILE_URL_TTL_SECONDS | срок действия подписанной ссылки на файл базы знаний или вложение диалога, в секундах; по умолчанию 3600. Выданная ссылка действует не меньше половины этого срока и не больше его |
YANDEX_SPEECHKIT_API_KEY, YANDEX_SPEECHKIT_FOLDER_ID, SPEECH_LANGUAGES | распознавание речи в аудио и видео через Yandex SpeechKit и языки распознавания |
Панель управления и виджет
Панель управления читает параметры установки из переменных окружения контейнера при запуске. Незаданная переменная оставляет значение, с которым собран образ; переменная с пустым значением отключает соответствующую функцию. Образ собран со значениями облачной установки правообладателя — счётчик Яндекс Метрики, приложения Яндекс ID и VK ID, адрес виджета на releases.parsewise.ru, — поэтому в установке заказчика PARSEWISE_YM_COUNTER_ID, PARSEWISE_YANDEX_CLIENT_ID и PARSEWISE_VK_CLIENT_ID задаются явно, своими значениями или пустыми, а PARSEWISE_WIDGET_SCRIPT_URL — адресом виджета в инфраструктуре заказчика.
| Параметр | Назначение |
|---|---|
PARSEWISE_API_URL | адрес сервера программного интерфейса; также добавляется в политику безопасности содержимого страниц панели |
PARSEWISE_APP_URL | адрес панели управления; её хост обслуживает панель, остальные хосты — гостевую страницу проекта |
PARSEWISE_ADMIN_HOSTS | дополнительные хосты панели через запятую |
PARSEWISE_SHOPS_DOMAIN | домен адресов проектов вида проект.домен |
PARSEWISE_PRIVACY_URL, PARSEWISE_TERMS_URL, PARSEWISE_OFFER_URL | ссылки на политику обработки персональных данных, условия использования и оферту |
PARSEWISE_SALES_EMAIL | адрес для обращений по тарифам |
PARSEWISE_YM_COUNTER_ID | счётчик Яндекс Метрики; пустое значение отключает Метрику |
PARSEWISE_YANDEX_CLIENT_ID, PARSEWISE_VK_CLIENT_ID | идентификаторы приложений для входа через Яндекс ID и VK ID; пустое значение отключает такой вход |
PARSEWISE_WIDGET_SCRIPT_URL | адрес файла виджета, который панель подставляет в код подключения |
PARSEWISE_STORAGE_URL | адрес объектного хранилища, совпадающий с R2_ENDPOINT сервера; добавляется в политику безопасности содержимого страниц панели и в список хранилищ, из которых панель показывает файлы |
Виджет получает адрес сервера программного интерфейса параметром apiUrl в window.ParsewiseConfig на странице, вместе с идентификатором проекта shopId; ссылку на политику обработки персональных данных — параметром privacyPolicyUrl или из настроек проекта.
Одна и та же сборка панели управления и виджета работает в любой установке: пересобирать их под адрес и параметры заказчика не нужно.
4. Установка
- Подготовить PostgreSQL: основную и векторную базы. В векторной базе должен быть доступен тип
vector. Если его нет, программа выполняетCREATE EXTENSION IF NOT EXISTS vector; если у роли приложения нет такого права, администратор базы выполняетCREATE EXTENSION vectorзаранее. - Подготовить Redis и бакет S3-совместимого объектного хранилища; настроить правила CORS и доступ к объектам бакета по разделу 2.
- Загрузить образы в реестр, доступный кластеру, и указать их адреса в манифестах.
- Создать пространство имён и секреты с параметрами из раздела 3.
- Указать в манифесте маршрутизации доменные имена программного интерфейса и панели управления, настроить TLS.
- Применить манифесты. При запуске сервер создаёт недостающие таблицы основной базы и применяет миграции, входящие в образ; векторное хранилище создаёт свои таблицы и индексы.
- Разместить файлы виджета на статическом сервере или в объектном хранилище заказчика.
- Проверить установку:
- все поды в состоянии готовности; поды векторизации загружают модель до трёх минут;
- запрос
GET /v1/public/healthк серверу программного интерфейса возвращает{"status": "ok"}; - в журнале сервера есть строка
Alembic migrations applied (head reached)и нет сообщенийAlembic upgrade failedи ошибокpgvector.
5. Начало работы
- Войти в панель управления и создать проект.
- Настроить персону ассистента: имя, аватар и правила ответов.
- Наполнить базу знаний: загрузить файлы, импортировать товары или профили из файла либо подключить источник по ссылке.
- Пригласить участников команды и назначить роли.
- Подключить виджет на страницы сайта или личного кабинета:
<script>
window.ParsewiseConfig = {
shopId: "ИДЕНТИФИКАТОР_ПРОЕКТА",
apiUrl: "https://АДРЕС_СЕРВЕРА_API",
};
</script>
<script async src="https://АДРЕС_СТАТИКИ/widget.iife.js"></script>
Подробный порядок работы в панели управления — в Руководстве пользователя и администратора.
6. Эксплуатация
| Задача | Порядок |
|---|---|
| Резервное копирование | выполняет заказчик: основная и векторная базы PostgreSQL, объектное хранилище |
| Мониторинг | состояние подов и журналы средствами кластера. Проверки состояния: сервер — GET / на порту 8000, панель управления — GET / на порту 3000, векторизация — GET /health на порту 8080, обработчик очередей — команда celery inspect ping |
| Масштабирование | автоматическое, в пределах, указанных в таблице ресурсов. Планировщик задач запускается строго в одном экземпляре |
| Обновление | заказчик разворачивает новую версию образов по своему решению; схема основной базы обновляется миграциями при запуске сервера |
| Поддержка | документ «Техническая поддержка» |
Проверьте на своих данных
Загрузите свои документы и каталог — и задайте ассистенту те вопросы, которые задают вам. Это единственная проверка, которая что-то значит.
