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

Обновление Атомкод в эксплуатационной среде

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

Подготовка к обновлению Атомкод

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

Убедитесь, что серверы отвечают минимальным системным требованиям, указанным в разделе Аппаратные и программные требования.

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

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

На сервере Приложений

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

    sudo -i
  2. Перейдите в директорию /opt и распакуйте архив с дистрибутивом (замените * на актуальную версию):

    cd /opt
    tar xzvf platformmd.*.tar.gz
  3. Перейдите в директорию со скриптами и сделайте их исполняемыми:

    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, если такой сертификат используется.
    • 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.

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

    ./install_portainer_and_images.sh

На сервере БД

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

    sudo -i
  2. Перейдите в директорию /opt и распакуйте архив:

    cd /opt
    tar xzvf platformmd.*.tar.gz
  3. Перейдите в директорию с docker-образами и импортируйте их:

    cd /opt/platform/docker
    docker load --input platformmd_DBserver.tar

На сервере Ansible

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

    sudo -i
  2. Перейдите в директорию /opt:

    cd /opt
Резервное копирование Inventory

При распаковке дистрибутива существует возможность перезаписи файлов Inventory. Если в файлах /opt/platform/installer/inventory/<Имя стенда>/group_vars/all.yml и /opt/platform/installer/inventory/<Имя стенда>/hosts.yml содержится важная информация, создайте резервную копию этих файлов.

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

    tar xzvf platformmd.*.tar.gz
  2. Перейдите в директорию со скриптами и сделайте их исполняемыми:

    cd /opt/platform/scripts/
    chmod +x *.sh
  3. Выполните скрипт подготовки Inventory-стенда:

к сведению

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

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

где:

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

Если пароль пользователя сервисов Атомкод в postgres отличается от действующего пароля, то действующий пароль требуется самостоятельно изменить в СУБД Postgres.

Откройте в текстовом редакторе файл /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/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-сеть.

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

Дополнительные действия при обновлении с 4.2 на 5.0

При обновлении Атомкод версии 4.2 на версию 5.0 и выше необходимо удалить следующую базу данных — ragmanager_db.

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

  1. Остановите контейнер ragmanager в Portainer либо в ssh-консоли на сервере Приложений командой:

    docker stop ragmanager
  2. Удалите базу данных ragmanager_db в Postgres. Это можно сделать через приложение для управления БД (например, PGAdmin или DBeaver) или в ssh-консоли на сервере БД командой:

    docker exec posgresqlplatform psql -U postgres -c "DROP DATABASE IF EXISTS ragmanager_db;"

Если в Атомкод используется LLM, то при обновлении с версии 4.2 на 5.0 следует:

  • перейти на сервер с ролью Сервер Приложений;
  • создать файл /opt/docker-conts/external-certs/CA-LLM.pem;
  • поместить в этот файл корневой сертификат, которым подписаны сертификаты, использующиеся на LLM.

Развертывание при обновлении

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

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

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

где:

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

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

Дополнительные действия при обновлении с 4.2 на 5.0

При обновлении Атомкод версии 4.2 на версию 5.0

После завершения обновления Атомкод версии 4.2 на версию 5.0 можно удалить информацию о неактуальных сервисах и контейнерах.

Удаление неактуальных для Атомкод версии 5.0 сервисов

  1. Перейдите в консоль администрирования Атомкод обновлённого стенда в раздел Services.
  2. Перейдите по очереди в следующие сервисы: globalconfigservice, nginxproductfront, storagemonitoringservice.
  3. В каждом сервисе рядом с названием сервиса нажмите кнопку Edit Service.
  4. В открывшейся форме Edit service нажмите кнопку Delete.

Удаление неактуальных контейнеров для Атомкод версии 5.0

Для удаления неактуальных контейнеров выполните следующие действия:

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

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

    sudo -i
  3. Остановите и удалите неактуальные для Атомкод версии 5.0 контейнеры командами:

    docker stop globalconfigservice && docker rm globalconfigservice
    docker stop nginxproductfront && docker rm nginxproductfront
    docker stop storagemonitoringservice && docker rm storagemonitoringservice