Установка iQBot на Linux
Инструкция описывает установку всех компонентов iQBot на одном сервере Linux из дистрибутива (архива). Установка из Docker-образов описана в разделе Установка iQBot в Docker. Требования к серверу — в разделе Требования к серверам iQBot.
Что понадобится:
- сервер Linux x64, подходящий под требования;
- PostgreSQL 13 или новее;
- дистрибутив платформы
iqbot-v<версия>-linux-x64.zipи файлы языковых моделей. Запросить их можно в службе технической поддержки: support@iqstore.ru.
Шаг 1. Создайте базу данных
iQBot хранит боты, диалоги и модели NLU в одной базе PostgreSQL. Создайте пустую базу и пользователя:
sudo -u postgres psql -c "CREATE USER iqbot WITH PASSWORD '<пароль>';"
sudo -u postgres psql -c "CREATE DATABASE iqbot OWNER iqbot;"
Таблицы платформа создаст сама при первом запуске.
Без переменной IQB_DATABASE_URL платформа работает с локальным файлом SQLite; это годится только для проверки на тестовом стенде. В продуктивном режиме (IQB_PRODUCTION=true) без PostgreSQL платформа не запустится и напишет об этом в журнал.
Шаг 2. Распакуйте дистрибутив
Создайте служебного пользователя (запуск от root не рекомендуется, платформа предупреждает об этом при старте) и распакуйте архив в каталог установки. Ниже и далее значения в угловых скобках <> нужно заменить своими, сами скобки при вводе не пишутся.
sudo useradd --system --home /opt/iqbot --shell /usr/sbin/nologin iqbot
sudo mkdir -p /opt/iqbot
sudo unzip iqbot-v<версия>-linux-x64.zip -d /opt/iqbot
sudo chown -R iqbot:iqbot /opt/iqbot
sudo chmod +x /opt/iqbot/iqbot /opt/iqbot/bin/nlu /opt/iqbot/bin/messaging
В каталоге появятся:
| Что | Назначение |
|---|---|
iqbot | Исполняемый файл ядра и Studio. |
bin/nlu | Сервер NLU и языковой сервер. |
bin/messaging | Сервис Messaging. |
modules/ | Архивы модулей платформы. |
Шаг 3. Задайте настройки
Платформа читает файл .env, который лежит рядом с исполняемым файлом iqbot. Создайте /opt/iqbot/.env:
IQB_DATABASE_URL=postgres://iqbot:<пароль>@localhost:5432/iqbot
IQB_IQBFS_STORAGE=database
IQB_PRODUCTION=true
IQB_EXTERNAL_URL=https://bot.example.com
IQB_ADMIN_EMAIL=admin@example.com
IQB_ADMIN_PASSWORD=<стойкий пароль>
| Переменная | Зачем |
|---|---|
IQB_DATABASE_URL | Подключение к PostgreSQL. |
IQB_IQBFS_STORAGE=database | Боты и файлы конфигурации хранятся в базе, а не на диске. При PostgreSQL это значение действует само, строку можно опустить; disk оставляет файлы на диске узла. |
IQB_PRODUCTION=true | Продуктивный режим, см. Чек-лист перед выходом в продуктив. |
IQB_EXTERNAL_URL | Адрес, по которому платформу видят пользователи. Если он не задан, платформа использует http://localhost:3000, и ссылки будут некорректными. |
IQB_ADMIN_EMAIL, IQB_ADMIN_PASSWORD | Создают учётную запись администратора при первом запуске. |
В продуктивном режиме первый администратор создаётся только из этих переменных: страница входа не предложит регистрацию, а в журнале появится ошибка, пока они не заданы. Вне продуктивного режима (тестовый стенд) первым администратором станет тот, кто первым откроет страницу после запуска, поэтому и там лучше задать переменные до того, как порт 3000 станет доступен из сети.
Полный перечень настроек — в разделе Конфигурация iQBot.
Шаг 4. Запустите платформу
cd /opt/iqbot
sudo -u iqbot ./iqbot
При запуске ядро поднимает Studio, NLU и Messaging. Когда всё готово, в журнале появится строка iQBot is ready. По умолчанию консоль администрирования доступна по адресу http://<сервер>:3000/admin/.
Если администратор создан через переменные IQB_ADMIN_EMAIL и IQB_ADMIN_PASSWORD, войдите с этими данными. Иначе откройте страницу консоли и создайте учётную запись администратора в форме первого запуска.
Проверить состояние компонентов можно запросом без авторизации:
curl http://localhost:3000/status
В ответе для каждого компонента указано up или down:
{"core":"up","database":"up","messaging":"up","nlu":"up","nluVersion":"2.0.0","duckling":"n/a","assets":"up"}
Для системы мониторинга есть GET /health (200 только когда всё работает) и GET /metrics в формате Prometheus, см. Мониторинг.
Шаг 5. Установите языковой сервер
NLU разбирает фразы пользователей с помощью языковых моделей. Для каждого языка нужны два файла: векторы слов и модель токенизации. Для русского языка, домена iqbot и размерности 100 они называются:
iqbot.ru.100.bin
iqbot.ru.bpe.model
Файлы поставляются по запросу в службу технической поддержки: support@iqstore.ru. Каждый языковой файл весит около 1 ГБ. Положите их в отдельный каталог, например /opt/iqbot-lang, и запустите языковой сервер:
/opt/iqbot/bin/nlu lang --port 3150 --host 127.0.0.1 --langDir /opt/iqbot-lang
По умолчанию сервер работает автономно (--offline), с размерностью 100 и доменом iqbot; размерность в имени файла (iqbot.ru.100.bin) должна совпадать с ключом --dim. На каждый язык размерности 100 нужно около 1,3 ГБ оперативной памяти (модели размерности 300 втрое больше, см. Требования к серверам), загрузка занимает 10–15 секунд на язык. Сообщение Killed при загрузке обычно означает, что система остановила процесс из-за нехватки памяти.
Затем укажите адрес языкового сервера в настройках модуля NLU. Откройте файл data/global/config/nlu.json (в режиме IQB_IQBFS_STORAGE=database файл редактируется в разделе «Редактор кода», глобальные настройки модулей, под учётной записью супер-администратора) и задайте:
{
"languageSources": [{ "endpoint": "http://localhost:3150" }]
}
То же можно сделать переменной окружения в файле .env:
IQB_MODULE_NLU_LANGUAGESOURCES=[{"endpoint":"http://localhost:3150"}]
Перезапустите платформу. В консоли администратора откройте раздел «Языки»: русский должен быть в списке установленных. Если для языка бота нет модели, рядом с ботом в списке ботов отображается предупреждение.
Языковой сервер на отдельном сервере
Установите дистрибутив по шагам 2–3, но запустите только языковой сервер командой выше с --host 0.0.0.0 и закройте порт файрволом для всех, кроме сервера iQBot. В nlu.json на сервере iQBot укажите адрес этого сервера.
Шаг 6. Duckling (по желанию)
Duckling извлекает системные сущности: время, числа, суммы, адреса электронной почты, телефоны. Он поставляется готовым образом iqbot-platform/duckling (запрашивается вместе с остальными образами) и запускается контейнером рядом с платформой:
docker run -d --name duckling --restart unless-stopped -p 127.0.0.1:8000:8000 <реестр>/iqbot-platform/duckling:latest
curl http://127.0.0.1:8000
Адрес http://localhost:8000 платформа использует по умолчанию. Если Duckling на другом сервере, укажите адрес на вкладке «Языковой сервер и Duckling» страницы «Настройки сервера» консоли (параметр ducklingURL в nlu.json) и перезапустите платформу.
Если системные сущности не нужны, отключите Duckling там же (параметр ducklingEnabled) или переменной в .env, иначе NLU будет обращаться к недоступному сервису, а /status покажет duckling: down:
IQB_MODULE_NLU_DUCKLINGENABLED=false
Шаг 7. Запустите платформу как службу
Чтобы платформа и языковой сервер стартовали вместе с сервером и перезапускались при сбое, оформите их службами systemd. Ниже пример, адаптируйте пути под свою установку.
/etc/systemd/system/iqbot.service:
[Unit]
Description=iQBot
After=network.target postgresql.service iqbot-lang.service
[Service]
User=iqbot
WorkingDirectory=/opt/iqbot
ExecStart=/opt/iqbot/iqbot --production
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
/etc/systemd/system/iqbot-lang.service:
[Unit]
Description=iQBot language server
After=network.target
[Service]
User=iqbot
ExecStart=/opt/iqbot/bin/nlu lang --port 3150 --host 127.0.0.1 --langDir /opt/iqbot-lang
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now iqbot-lang iqbot
Шаг 8. HTTPS
Платформа не обрабатывает сертификаты. Разместите перед портом 3000 обратный прокси-сервер с HTTPS, например NGINX, и задайте IQB_EXTERNAL_URL с адресом https://.... Подробнее — в разделе Безопасность iQBot.
Подготовка к продуктиву
После выполнения всех настроек откройте в консоли администратора раздел «Готовность к продуктиву» и убедитесь, что нужные пункты отмечены галочкой (описание — в разделе Чек-лист перед выходом в продуктив). На странице «Настройки сервера» задайте почту платформы (сброс пароля сотрудниками) и профили ИИ-шлюзов, если боты обращаются к iQGPT; способ входа сотрудников (единый вход, второй фактор) описан в разделе Аутентификация и единый вход. Затем подключите бота к платформе iQChannels, как описано в разделе «Подключение к iQChannels» руководства пользователя.