Перейти к основному содержимому
Версия: 3.0

Установка 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» руководства пользователя.