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

Доставка разработанного сервиса бизнес-логики на стенд Атомкод

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

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

  • У вас есть доступ по SSH к серверу сборки и к серверу стенда Атомкод с установленным интерфейсом командной строки для управления Docker, Docker CLI. Если на сервере стенда Атомкод для управления Docker-контейнерами вы хотите использовать веб-интерфейс, убедитесь, что нужное программное обеспечение, например, Portainer, установлено.
  • Docker-репозиторий, например, Nexus, развернут, учетные данные для доступа к Docker-репозиторию известны.
  • Вам известны следующие параметры стенда: свободный IP-адрес в сети pmd-network, полное доменное имя сервера (FQDN), на котором развернут стенд Атомкод.

Чтобы доставить сервис бизнес-логики на стенд Атомкод:

  1. Соберите Docker-образ.

    На сервере сборки в SSH-консоли выполните следующую команду:

       
    # docker build -f Dockerfile -t <TAG> .
    # -f Dockerfile (необязательно, если файл называется 'Dockerfile' и находится в текущей директории)
    # -t <TAG> задает имя и тег образа
    # . указывает на текущую директорию как на контекст сборки

    # docker build -f <Dockerfile> -t <адрес Docker-репозитория>/<имя проекта>/<имя вашего сервиса>:<версия образа> <контекст сборки>

    # пример команды при использовании репозитория Nexus и файла с именем Dockerfile
    docker build -t nexus.pmd.local:8083/myapp/myservice:1.0.0 .

  2. В Docker-репозиторий поместите Docker-образ.

    Перед загрузкой Docker-образа в Docker-репозиторий необходимо присвоить Docker-образу тег, соответствующий пути в Docker-репозитории, и пройти аутентификацию.

    1. Аутентифицируйтесь в Docker-репозитории.

      На сервере сборки в SSH-консоли выполните следующую команду и введите учетные данные по запросу.

      # docker login <адрес Docker-репозитория>

      # пример команды при использовании Docker-репозитория Nexus:
      docker login nexus.pmd.local:8083

    2. Присвойте Docker-образу тег, указывающий на целевой Docker-репозиторий.

      На сервере сборки в SSH-консоли выполните следующую команду:


      # docker tag <источник> <цель>

      # <источник> — имя и тег существующего локального образа, который вы хотите переименовать.
      # <цель> — новое полное имя (тег), которое вы хотите присвоить образу. Именно это имя будет использоваться для `docker push`

      # docker tag <локальное имя образа>:<локальный тег> <адрес Docker-репозитория>/<имя проекта>/<имя вашего сервиса>:<версия образа>

      # пример команды при использовании Docker-репозитория Nexus
      docker tag my-service:latest nexus.pmd.local:8083/myapp/myservice:1.0.0

    3. Загрузите Docker-образ в Docker-репозиторий с помощью команды docker push.

      На сервере сборки в SSH-консоли выполните следующую команду:

      # docker push <адрес Docker-репозитория>/<имя проекта>/<имя вашего сервиса>:<версия образа>

      # пример команды при использовании Docker-репозитория Nexus
      docker push nexus.pmd.local:8083/myapp/myservice:1.0.0

    После успешного выполнения этих команд Docker-образ доступен в Docker-репозитории для развертывания на стенде.

  3. Запустите Docker-контейнер на сервере стенда Атомкод.

    На сервере стенда Атомкод в SSH-консоли выполните следующие команды:

    # Если ранее сервис-бизнес логики был развернут на стенде Атомкод, 
    # перед командой "docker run" выполните следующие команды:
    # docker stop <имя вашего сервиса>
    # docker rm <имя вашего сервиса>
    docker run -d \
    --name <имя вашего сервиса> \
    --ip <внутренний IP-адрес Docker-контейнера в сети pmd-network> \
    --network pmd-network \
    --restart always \
    -e ApiConfiguration__ClientSecrets__0__ClientId="<имя первого клиента межсервисного взаимодействия>" \
    -e ApiConfiguration__ClientSecrets__0__Secret="<секрет первого клиента межсервисного взаимодействия>" \
    <Повторите предыдущие две строки для всех клиентов межсервисного взаимодействия разработанного сервиса> \
    -e ConfigServer="<по умолчанию https://proxy.pmd.local>" \
    -e identityConfiguration__identityServiceUrl="https://<FQDN стенда>/identity" \
    -e nginx__configurationEndpoint="https://<по умолчанию https://proxy.pmd.local>/api/dups/configure/get" \
    -e Kafka__Server: "<FQDN сервера kafka, по умолчанию kafka.pmd.local>:<Порт kafka, по умолчанию 9094>" \
    -e Kafka__AuditProducerTopic: "<Имя стенда>-Audit" \
    <При необходимости укажите другие переменные окружения сервиса> \
    -v /opt/docker-conts/internal-certs/certificate.pem:/cert/certificate.pem \
    -v /opt/docker-conts/internal-certs/certificate.key.pem:/cert/certificate.key.pem \
    -v /opt/docker-conts/internal-certs/root.crt:/etc/ssl/certs/internal-root.crt \
    -v /opt/docker-conts/external-certs/CA-stand.pem:/etc/ssl/certs/CA-stand.crt \
    <тег Docker-образа, определенный в пункте 2 этой инструкции>

    В качестве альтернативы вы можете выполнить эти действия в веб-интерфейсе Portainer. Если ранее сервис-бизнес логики не был развернут на стенде Атомкод, выполните следующие действия:

    1. Откройте веб-интерфейс Portainer, указав в адресной строке браузера https://<адрес сервера стенда Атомкод>:9000.

    2. Перейдите в раздел Containers и нажмите Add container.

    3. В окне, которое открывается, укажите следующие параметры:

      • Name: введите имя разработанного сервиса <имя вашего сервиса>;
      • Image: введите адрес образа nexus.pmd.local:8083/<имя вашего сервиса>:1.0.0;
      • Network: из раскрывающегося списка выберите pmd-network.
    4. Нажмите Advanced container settings и в следующих вкладках укажите параметры:

      • Network (обязательный параметр): в поле IPv4 Address введите уточненный IP-адрес, например, 10.0.10.123.

      • Env (необязательный параметр): добавьте все переменные окружения, например, ApiConfiguration__ClientSecrets_0__ClientId, ConfigServer, по одной, нажимая Add variable. Руководствуйтесь списком переменных окружения в блоке команд для SSH-консоли.

      • Volumes (обязательный параметр): добавьте необходимые монтирования и укажите следующие параметры:

        • Container: путь в контейнере;
        • Host: путь на сервере;
      • Restart policy (обязательный параметр): выберите Always.

    5. Нажмите Deploy the container.

    Если ранее сервис-бизнес логики был развернут на стенде Атомкод, и вы развертываете этот сервис не впервые, выполните следующие действия:

    1. Откройте веб-интерфейс Portainer и перейдите в раздел Containers.

    2. Найдите старый контейнер и нажмите на нем Duplicate/Edit.

    3. Измените следующие параметры:

      • Image (обязательный параметр): измените версию тега на новую, например, измените :1.0.0 на :2.0.0.
      • Env (необязательный параметр): добавьте или измените переменные окружения.
    4. Нажмите Deploy the container.

    Docker-контейнер с именем разработанного сервиса бизнес-логики запускается и отображается в AdminTools в разделе Services с одним активным узлом.

  4. Настройте доступ к сервису бизнес-логики через прокси-сервер Nginx.

    Эта настройка необходима для доступа других сервисов Атомкод к разработанному сервису бизнес-логики, а также для перехода из AdminTools к интерактивной документации API этого сервиса в Swagger UI.

    На стенде Атомкод в Docker-контейнере nginxproxy в SSH-консоли выполните следующие действия:

    4.1. Перейдите в директорию /opt/nginx/servers/private/locations, создайте файл <имя вашего сервиса>.conf и добавьте в файл следующее содержимое:

    location /services/<имя вашего сервиса> {
    set $up_<имя вашего сервиса> app_<имя вашего сервиса>;
    set $new_request_uri $request_uri;
    if ($new_request_uri ~* /services/<имя вашего сервиса>/(.*)){
    set $new_request_uri $1;
    }
    proxy_pass https://$up_<имя вашего сервиса>/$new_request_uri;
    proxy_set_header Connection "keep-alive";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    }

    4.2. Перейдите в директорию /opt/nginx/servers/private/upstreams, создайте файл app_<имя вашего сервиса>.conf и добавьте в файл следующее содержимое:

    upstream app_<имя вашего сервиса> {
    server <ip-адрес, выбранный для вашего сервиса>:3443 fail_timeout=2s;
    }

    4.3. Убедитесь, что в текущей конфигурации Nginx нет ошибок и выполните следующую команду:

    nginx -t

    Если команда выполнилась без ошибок, выполните следующую команду для перезагрузки конфигурации Nginx:

    nginx -s reload

Стенд Атомкод с развернутым сервисом бизнес-логики готов к работе.