Перейти к основному содержимому

Развертывание Атомкод в эксплуатационной среде

Для развертывания в эксплуатационной среде Атомкод требуется провести подготовку.

Подготовка к развертыванию

к сведению

Для работы с проектами, включающими более трех тысяч классов, необходимо дополнить конфигурацию PostgreSQL, исходя из следующего положения: произведение параметров max_connections и max_locks_per_transaction должно быть больше общего количества классов во всех проектах, умноженного на 2,5. Например, если во всех проектах Атомкод создано 50000 классов, значение произведения должно быть 125000. Рекомендуемое значение параметра max_connections равно 500, а значение параметра max_locks_per_transaction должно быть равно 250. По умолчанию при установке Атомкод max_connections = 500, а max_locks_per_transaction = 64. Значения этих параметров можно изменить в файле group_vars/all.yml директории инсталлятора в переменной postgres_run_params.

предупреждение

Убедитесь в следующем:

  • Серверы соответствуют аппаратным и программным требованиям.
  • DNS-сервер содержит записи для Сервера Приложений и Сервера БД, а также все серверы и пользовательские компьютеры в сети стенда используют этот DNS-сервер для разрешения имен.

При помощи программы для передачи файлов по ssh (например, WinSCP) переместите архив с дистрибутивом Атомкод в директорию /opt, на серверы с ролями Сервер БД, Сервер Приложений и Ansible-мастер.

Дополнительные действия для сервера под управлением ОС Astra Linux 1.7.5 и выше

В ОС Astra Linux версии 1.7.5 и выше имеется встроенный механизм проверки Docker-образов и Docker-контейнеров наличия уязвимостей. Для установки Атомкод 5.0 и выше отключите эту проверку согласно инструкции, описанной в официальной документации Astra Linux.

В зависимости от версии Docker отключите проверку наличия уязвимостей следующим образом:

  • Для Docker версии 25.0.5.astra2+ci5 и ниже в файле /etc/docker/daemon.json опишите параметры debug и astra-sec-level, как показано в следующем примере:

    {
    "debug" : true,
    "astra-sec-level" : 6
    }
  • Для более новых версий Docker в Astra Linux настройте базу данных oval-db, например, с помощью следующей команды:

    sudo oval-db config

Подготовка к развертыванию на сервере с ролью Сервер Приложений

Перейдите в консоль ssh на сервер с ролью Сервер Приложений.

Повысьте права командой

sudo -i
к сведению

Для корректной работы Атомкод необходимо задать значение параметра fs.inotify.max_user_instances в операционной системе не меньше, чем 524288.

Чтобы задать значение параметра, выполните команду

echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Обеспечьте разрешение имени сервера с ролью Сервер Приложений на самом сервере. Для проверки корректности разрешения имени сервера воспользуйтесь командой:

ping <Имя Сервера>

где:

  • Имя Сервера: FQDN сервера с ролью Сервер Приложений, например, test.pmd.local.

В результате выполнения команды должен отображаться ip-адрес сервера с ролью Сервер Приложений.

Перейдите в директорию /opt командой

cd /opt

Распакуйте архив с дистрибутивом

tar xzvf platformmd.*.tar.gz

Перейдите в директорию /opt/platform/scripts/ командой

cd /opt/platform/scripts/

Добавьте права на запуск файлов командой

chmod +x *.sh

Запустите скрипт подготовки системы в зависимости от ОС:

  • ./prepare_system_AstraLinux.sh;
  • ./prepare_system_Ubuntu.sh;
  • ./prepare_system_Debian.sh.

Скрипт установит или обновит Docker и прочие необходимые пакеты.

подсказка

Если на сервере отсутствует подключение к сети Интернет, но существует локальный прокси-сервер для pip-пакетов, создайте файл /etc/pip.conf с содержимым:

[global]
index-url = https://<Адрес прокси сервера>/simple/
trusted-host = <Адрес сервера с прокси>

После создания этого файла все попытки установить пакеты через pip будут выполняться через локальный прокси-сервер, а не из Интернета.

Перезагрузите систему (ответьте Y, система перезагрузится).

Повысьте права после перезагрузки командой

sudo -i

Сертификаты для предварительного развертывания можно создать самостоятельно или взять из архива с дистрибутивом.

  1. Для создания сертификата воспользуйтесь Руководством по генерации самоподписанных сертификатов или Вашим удостоверяющим центром.

  2. Для использования сертификатов перейдите в директорию /opt/platform/files/ дистрибутива. Для использования своих сертификатов необходимо заменить содержимое файлов сертификатов на свои данные. В директории /opt/platform/files/ находятся описания следующих сертификатов:

    • external-certificate.pem: цепочка сертификатов серверов домена pmd.local, включающая сертификат сервера test.pmd.local, а также все промежуточные УЦ и корневой УЦ для внешнего домена. Сертификаты используются для работы со стендом в браузере по протоколу https. Порядок сертификатов в цепочке следующий:
      • сертификат сервера test.pmd.local;
      • сертификаты промежуточных удостоверяющих центров;
      • корневой сертификат.
    • external-certificate.key.pem: ключ сертификата сервера из файла external-certificate.pem.
    • external-root.crt: цепочка сертификатов, включающая в себя все промежуточные УЦ и корневой УЦ. Это те же, сертификаты, что в файле external-certificate.pem.
    • git-root.crt: корневой сертификат, которым подписан сертификат внешнего git-репозитория проектов devtools, если такой сертификат используется.
    • llm-root.crt: корневой сертификат, которым подписаны сертификаты, использующиеся на LLM, если такой сертификат используется.
    • internal-certificate.pem: цепочка сертификатов аналогичная цепочке в сертификате external-certificate.pem, используется для внутреннего межсервисного взаимодействия стенда. Эта цепочка сертификатов может как совпадать с цепочкой сертификатов из external-certificate.pem, так и отличаться от них.
    • internal-certificate.key.pem: ключ сертификата сервера из файла internal-certificate.pem.
    • internal-root.crt: цепочка сертификатов, включающая в себя все промежуточные УЦ и корневой УЦ для внутреннего домена.
    • langfuse.crt: корневой сертификат, которым подписан сертификат сервера Langfuse.
    предупреждение

    В составе дистрибутива эти файлы относятся к серверу только в домене pmd.local. Если сервер с ролью Сервер Приложений находится в другом домене, содержимое файлов с префиксом external следует заменить.
    Также можно заменить содержимое файлов с префиксом internal.
    Внутренние сертификаты могут не совпадать с внешними.

Запустите скрипт, который скопирует файлы сертификатов командами:

cd /opt/platform/scripts/
./copy_certs.sh

Запустите скрипт, который установит portainer и выгрузит docker-образы Атомкод в локальный docker-registry командой

./install_portainer_and_images.sh
подсказка

После выполнения скрипта переопределите при необходимости пароль для portainer, перейдя по ссылке https://test.pmd.local:9000.
Предустановленные логин и пароль: логин: admin пароль: zaq1!QAZxsw2.

Подготовка к развертыванию на сервере с ролью Сервер БД

Перейдите в консоль ssh на сервер с ролью Сервер БД.

Повысьте права командой

sudo -i

Обеспечьте разрешение имени сервера с ролью с ролями Сервер Приложений и Сервер БД. Для проверки корректности разрешения имени сервера воспользуйтесь командой:

ping <Имя Сервера>

где:

  • Имя Сервера: FQDN сервера с ролью Сервер Приложений, например, test.pmd.local.

В результате выполнения команды должен отображаться ip-адрес сервера с ролью Сервер Приложений.

Перейдите в директорию /opt командой

cd /opt

Распакуйте архив с дистрибутивом

tar xzvf platformmd.*.tar.gz

Перейдите в директорию /opt/platform/scripts/ командой

cd /opt/platform/scripts/

Добавьте права на запуск файлов командой

chmod +x *.sh

Сертификаты для предварительного развертывания можно создать самостоятельно или взять из архива с дистрибутивом.

  1. Для создания сертификата воспользуйтесь Руководством по генерации самоподписанных сертификатов или Вашим удостоверяющим центром.

  2. Для использования сертификатов перейдите в директорию /opt/platform/files/ дистрибутива. Для использования своих сертификатов необходимо заменить содержимое файлов сертификатов на свои данные. В директории /opt/platform/files/ находятся описания следующих сертификатов:

    • external-certificate.pem: цепочка сертификатов серверов домена pmd.local, включающая сертификат сервера test.pmd.local, а также все промежуточные УЦ и корневой УЦ для внешнего домена. Сертификаты используются для работы со стендом в браузере по протоколу https. Порядок сертификатов в цепочке следующий:
      • сертификат сервера test.pmd.local;
      • сертификаты промежуточных удостоверяющих центров;
      • корневой сертификат.
    • external-certificate.key.pem: ключ сертификата сервера из файла external-certificate.pem.
    • external-root.crt: цепочка сертификатов, включающая в себя все промежуточные УЦ и корневой УЦ. Это те же, сертификаты, что в файле external-certificate.pem.
    • git-root.crt: корневой сертификат, которым подписан сертификат внешнего git-репозитория проектов devtools, если таковой используется.
    • internal-certificate.pem: цепочка сертификатов аналогичная цепочке в сертификате external-certificate.pem, используется для внутреннего межсервисного взаимодействия стенда. Эта цепочка сертификатов может как совпадать с цепочкой сертификатов из external-certificate.pem, так и отличаться от них.
    • internal-certificate.key.pem: ключ сертификата сервера из internal-certificate.pem.
    • internal-root.crt: цепочка сертификатов, включающая в себя все промежуточные УЦ и корневой УЦ для внутреннего домена.
    • langfuse.crt: корневой сертификат, которым подписан сертификат сервера Langfuse.
    предупреждение

    В составе дистрибутива эти файлы относятся к серверу только в домене pmd.local. Если сервер с ролью Сервер Приложений находится в другом домене, содержимое файлов с префиксом external следует заменить. Также можно заменить содержимое файлов с префиксом internal. Внутренние сертификаты могут не совпадать с внешними.

Запустите скрипт, который скопирует файлы сертификатов командами:

cd /opt/platform/scripts/
./copy_certs.sh

Запустите скрипт подготовки системы в зависимости от ОС:

  • ./prepare_system_AstraLinux.sh;
  • ./prepare_system_Ubuntu.sh;
  • ./prepare_system_Debian.sh.

Скрипт установит или обновит Docker и прочие необходимые пакеты.

подсказка

Если на сервере отсутствует подключение к сети Интернет, но существует локальный прокси-сервер для pip-пакетов, создайте файл /etc/pip.conf с содержимым:

[global]
index-url = https://<Адрес прокси сервера>/simple/
trusted-host = <Адрес сервера с прокси>

После создания этого файла все попытки установить пакеты через pip будут выполняться через локальный прокси-сервер, а не из Интернета.

Перезагрузите систему (ответьте Y, система перезагрузится).

Повысьте права после перезагрузки командой

sudo -i

Перейдите в директорию с docker-образами командой

cd /opt/platform/docker

Импортируйте docker-образы командой

docker load --input platformmd_DBserver.tar

Подготовка к развертыванию на сервере с ролью Ansible-мастер

Перейдите в консоль ssh на сервер с ролью Ansible-мастер.

Повысьте права командой

sudo -i

Обеспечьте разрешение имени сервера с ролью с ролями Сервер Приложений и Сервер БД. Для проверки корректности разрешения имени сервера воспользуйтесь командой:

ping <Имя Сервера>

где:

  • Имя Сервера: FQDN сервера с ролью Сервер Приложений, например, test.pmd.local.

В результате выполнения команды должен отображаться ip-адрес сервера с ролью Сервер Приложений.

Перейдите в директорию /opt командой

cd /opt

Распакуйте архив с дистрибутивом

tar xzvf platformmd.*.tar.gz

Перейдите в директорию /opt/platform/scripts/ командой

cd /opt/platform/scripts/

Добавьте права на запуск файлов командой

chmod +x *.sh

Запустите скрипт подготовки системы в зависимости от ОС:

  • ./prepare_system_AstraLinux.sh;
  • ./prepare_system_Ubuntu.sh;
  • ./prepare_system_Debian.sh.

Скрипт установит или обновит Docker и прочие необходимые пакеты.

подсказка

Если на сервере отсутствует подключение к сети Интернет, но существует локальный прокси-сервер для pip-пакетов, создайте файл /etc/pip.conf с содержимым:

[global]
index-url = https://<Адрес прокси сервера>/simple/
trusted-host = <Адрес сервера с прокси>

После создания этого файла все попытки установить пакеты через pip будут выполняться через локальный прокси-сервер, а не из Интернета.

Перезагрузите систему (ответьте Y, система перезагрузится).

Повысьте права после перезагрузки командой

sudo -i

Сертификаты для предварительного развертывания можно создать самостоятельно или взять из архива с дистрибутивом.

  1. Для создания сертификата воспользуйтесь Руководством по генерации самоподписанных сертификатов или Вашим удостоверяющим центром.

  2. Для использования сертификатов перейдите в директорию /opt/platform/files/ дистрибутива. Для использования своих сертификатов необходимо заменить содержимое файлов сертификатов на свои данные. В директории /opt/platform/files/ находятся описания следующих сертификатов:

    • external-root.crt: цепочка сертификатов, включающая в себя все промежуточные УЦ и корневой УЦ для внешнего домена, используется для ссылок https://test.pmd.local.
    • internal-root.crt: цепочка сертификатов, включающая в себя все промежуточные УЦ и корневой УЦ для внутреннего домена, используется для внутреннего межсервисного взаимодействия.
    • langfuse.crt: корневой сертификат, которым подписан сертификат сервера Langfuse.
    предупреждение

    В составе дистрибутива эти файлы относятся к серверу только в домене pmd.local. Если сервер с ролью Сервер Приложений находится в другом домене, содержимое файлов с префиксом external требуется заменить. Домен для внутреннего межсервисного взаимодействия не обязан совпадать с доменом Сервера Приложений.

Выполните команды, при помощи которых операционная система будет доверять сертификатам:

cp /opt/platform/files/external-root.crt /usr/local/share/ca-certificates/platformmd-external-root.crt
cp /opt/platform/files/external-root.crt /usr/local/share/ca-certificates/platformmd-internal-root.crt
update-ca-certificates

Выполните скрипт установки ansible:

cd /opt/platform/scripts/
./install_ansible.sh

Скопируйте открытый ключ пользователя ansible из файла /home/ansible/.ssh/id_rsa.pub с сервера с ролью Ansible-мастер на серверы с ролями Сервер Приложений и Сервер БД в содержимое файла /home/ansible/.ssh/authorized_keys.

Выполните скрипт подготовки Inventory-стенда:

к сведению

Если вы планируете использовать большие языковые модели, то предварительно разверните сервер vLLM.

./make_inventory.sh -s <имя стенда> -t <адрес сервера Приложений> -b <адрес сервера БД> -u <пароль пользователя с правами администратора postgres> -l <пароль пользователя сервисов Атомкод в postgres> -v <версия устанавливаемого релиза Атомкод> -a <ветка> -h <git-хост> -r <репозиторий> -m <расположение git>

где:

  • имя сервера Приложений: имя стенда, которое используется для удобства работы с inventory. Имя может как совпадать с FQDN Сервера Приложений так и отличаться. Имя директории стенда в inventory совпадает с именем стенда, так что следует избегать символов, недопустимых в имени директорий;
  • имя сервера БД: полное доменное имя сервера с ролью Сервер БД, например, dbserver.pmd.local;
  • адрес сервера Приложений: FQDN сервера с ролью Сервер Приложений
  • пароль пользователя с правами администратора postgres: пароль для postgres-пользователя с логином postgres, который обладает правами superuser в postgres на сервере с ролью Сервер БД;
  • пароль пользователя сервисов Атомкод в postgres: пароль для postgres-пользователя с логином platform, который будет владельцем баз данных Атомкод в postgres на сервере с ролью Сервер БД;
  • версия устанавливаемого релиза Атомкод: версия Атомкод, например, 4.1.0;
  • ветка: ветка git-репозитория проектов devtools, например, develop;
  • git-хост: адрес сервера с git-репозиториями проектов devtools, например, внутренний хост стенда в домене pmd.local: http://devtoolsgit.pmd.local:80/git;
  • репозиторий: имя репозитория проектов devtools, например локально на стенде по-умолчанию создается pmd-repo;
  • расположение git: указание на используемый git-репозиторий, если используется внутренний git-репозиторий стенда, то указывается local, если внешний — external.

Пример:

./make_inventory.sh -s appServer -t appServer.pmd.local -b dbServer.pmd.local -u Pass1 -l Pass2 -v 4.1.0 -a develop -h http://devtoolsgit.pmd.local:80/git -r pmd-repo -m local

Откройте в текстовом редакторе файл /opt/platform/installer/inventory/<Имя стенда>/group_vars/all.yml и проверьте, что значения всех параметров заданы верно, следуя комментариям в файле. Проверьте, что в файле /opt/platform/installer/inventory/<Имя стенда>/hosts.yml указаны верные имена серверов с ролями Сервер Приложений и Сервер БД.

Если необходимо сменить имя внутреннего домена Атомкод, создайте файл /opt/platform/installer/inventory/<Имя стенда>/group_vars/nginxproxy.yml с содержимым: internal_domain: <внутренний домен> , где <внутренний домен>, например, vector.local.

Скопируйте свой файл лицензии в директорию /opt/platform/installer/files, переименовав его в license.lic.

к сведению

Если у Вас нет файла лицензии, установите лицензию позже, после развёртывания Атомкод.

Изменение комплекта устанавливаемых сервисов при развертывании Атомкод

Вы можете изменить комплект устанавливаемых сервисов в файле /opt/platform/installer/inventory/<Имя стенда>/group_vars/all.yml. Чтобы изменить комплект устанавляваемых сервисов:

  • перейдите в директорию /opt/platform/installer/group_vars/editions
  • в этой директории найдите файлы, имена которых совпадают с названием комплекта сервисов;
  • просмотрите содержимое этих файлов, чтобы увидеть, какие сервисы и devtools-проекты входят в состав каждого из комплектов;
  • закомментируйте ненужные строки в файлах.

Изменение параметров установки Атомкод

Чтобы изменить параметры установки Атомкод в файле /opt/platform/installer/group_vars/all.yml руководствуйтесь комментариями в этом файле.

подсказка

Если для разных стендов необходимы различные значения переменных, укажите их в файле /opt/platform/installer/inventory/ИмяСтенда/group_vars/all.yml. Переменные, указанные в этом файле имеют более высокий приоритет.

Чтобы взаимодействовать на стенде с с языковыми моделями, задайте следующие значения переменных, в зависимости от используемых языковых моделей:

# LLM
llm_default_model_server: "http://<адрес сервера generation non think>:<порт, который слушает vLLM для модели non think>/v1"
llm_default_embedder_server: "http://<адрес сервера embedder>:<порт, который слушает vLLM для модели embedder>/v1"
llm_default_embedder_type: "openai" # в релизе 5.0 только такое значение
llm_default_reasoning_server: "http://<адрес сервера generation think>:<порт, который слушает vLLM для модели think>/v1"
llm_default_voiceai_server: "https://<адрес сервера с VoiceAi>:<порт, который слушает http VoiceAi сервис>"
llm_default_voiceai_socket: "wss://<адрес сервера с VoiceAi>:<порт, который слушает ws VoiceAi сервис>"
llm_rag_embedding_settings_url: "" # пусто, устаревший параметр
llm_langfuse_enabled: "false" # Если используете langfuse, укажите "true"
llm_langfuse_url: "https://langfuse.test.local" # Если используете langfuse, укажите его адрес.
llm_langfuse_environment: "{{ stand_name.split('.')[0] }}" # Можно задать environment для langfuse.
llm_langfuse_public_key: "" # Если используете langfuse, укажите публичный ключ
llm_langfuse_secret_key: "" # Если используете langfuse, укажите секретный ключ
llm_router_model_host_url: "" # пусто, устаревший параметр
llm_router_model: "" # пусто, устаревший параметр
llm_router_api_key: "" # пусто, устаревший параметр
llm_generation_model_host_url: "" # пусто, устаревший параметр
llm_generation_model: "" # пусто, устаревший параметр
llm_generation_api_key: "" # пусто, устаревший параметр
llm_agent_host_url: "http://<адрес сервера generation non think>:<порт, который слушает vLLM для модели non think>/v1"
llm_agent_model: "<Имя non think модели>"
llm_agent_main_api_key: "<API key non think модели>"
llm_fast_model_host_url: "http://<адрес сервера generation non think>:<порт, который слушает vLLM для модели non think>/v1"
llm_fast_model: "<Имя non think модели>"
llm_fast_model_api_key: "<API key non think модели>"
llm_smart_model_host_url: "http://<адрес сервера generation think>:<порт, который слушает vLLM для модели think>/v1"
llm_smart_model: "<Имя think модели>"
llm_smart_model_api_key: "<API key think модели>"
llm_doc_embedder_url: "http://<адрес сервера embedder>:<порт, который слушает vLLM для модели embedder>/v1"
llm_doc_embedder_api_key: "<API key embedding модели>"

Чтобы использовать сервис обработки голосовых данных VoiceAI на сервере с ролью Сервер Приложений, укажите значения следующих переменных:

  • llm_default_voiceai_socket: wss://voiceai.<внутренний домен стенда>:8765
  • llm_default_voiceai_server: https://<Адрес сервера Приложений>/services/voiceai

В этом случае сервис RagManager будет обращаться к сервису VoiceAi напрямую через внутреннюю Docker-сеть.

Если вы хотите распознавать аудио на стенде Атомкод без доступа в интернет, настройте офлайн-распознавание аудио.

Развертывание Атомкод

Запустите установку Атомкод

./run_ansible_playbooks_multistand.sh -s <Имя стенда> -d <Внутренний домен Атомкод> -b <Имя сервера БД>

где:

  • Имя стенда: имя стенда, например, test.pmd.local;
  • Внутренний домен Атомкод: внутренний домен Атомкод, используемый для межсервисного взаимодействия, например, pmd.local.
  • Имя сервера БД: полное доменное имя сервера с ролью Сервер БД.

Дождитесь завершения развертывания, это может занять 20-30 минут.

Дополнительные действия по настройке после развертывания Атомкод

Добавление лицензии вручную

Если файл license.lic не был добавлен в директорию /opt/platform/installer/files перед установкой, установите лицензию вручную. Для установки лицензии после развертывания Атомкод:

  • перейдите в консоль администрирования (также Platform AdminTools);
  • введите логин и пароль администратора, возьмите их из раздела Проверка результата.
к сведению

Если пользователь admin отсутствует, воспользуйтесь пользователем install с паролем Install123$567.

  • В административной консоли перейдите в раздел Licenses.
  • Нажмите кнопку +Add license.
  • Нажмите кнопку Browse, выберите файл с лицензией и нажмите кнопку Открыть.
  • Нажмите кнопку Apply License.