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

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

Сервис бизнес-логики запускается и работает в Docker-контейнере. Информация о работе с Docker и использовании приложения Java в Docker-контейнерах представлена на сайте Microsoft.

Перед развертыванием сервиса на стенде необходимо собрать проект и подготовить файл для создания Docker-образа. Вы можете использовать приватный базовый образ из дистрибутива Атомкод или публичные официальные образы Microsoft из реестра Microsoft Container Registry (MCR).

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

  1. Соберите Java-сервис с помощью Gradle.

    Для сборки проекта используйте сервер сборки или рабочую станцию с предустановленными Java и Gradle.

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

    export JAVA_HOME=/usr/lib/jvm/bellsoft-java17-amd64
    gradle -v
    [ -d ./tmp ] && echo "already exist" || mkdir -p ./tmp
    export _JAVA_OPTIONS=-Djava.io.tmpdir=${WORKSPACE}/tmp
    gradle clean
    gradle build
    # Следующая команда не является обязательной
    gradle dockerCreateDockerfile

    В директории build/libs/ будет создан исполняемый JAR-файл с именем вида <your-service-name>-1.0.0.jar.

  2. Создайте Dockerfile.

    В директории с исходным кодом сервиса бизнес-логики создайте файл с именем Dockerfile (без расширения).

    Dockerfile должен иметь следующее содержимое:

    # Замените базовый образ, если необходимо
    FROM bellsoft/liberica-openjdk-debian:17.0.9-11

    RUN mkdir /opt/app

    COPY startup.sh /startup.sh
    RUN chmod +x startup.sh

    COPY build/libs/*.jar /opt/app/platform_service.jar

    COPY otelJavaAgents/md-opentelemetry-javaagent-expantion-1.1-all.jar /opt/otelJavaAgents/md-opentelemetry-javaagent-expantion-1.1-all.jar
    COPY otelJavaAgents/opentelemetry-javaagent.jar /opt/otelJavaAgents/opentelemetry-javaagent.jar

    ENTRYPOINT ["/startup.sh"]

    EXPOSE 443
  3. В Dockerfile настройте права пользователя для запуска процессов.

    Базовые образы, как публичные, так и приватные, по умолчанию запускают процессы с правами суперпользователя (root). Использование прав суперпользователя в эксплуатационной среде создает угрозы безопасности и нарушает принцип наименьших привилегий (Principle of Least Privilege).

    Для снижения рисков рекомендуется собирать образы ваших сервисов так, чтобы основной процесс запускался от имени непривилегированного пользователя.

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

    # Создание новой группы и пользователя с именем 'app'
    RUN addgroup -S app && \ # Создание системной (-S) группы 'app'
    adduser -S app -G app && \ # Создание системного (-S) пользователя 'app' в группе 'app'
    mkdir -p /app && \ # Создание рабочей директории, если ее нет
    chown -R app:app /app && \ # Рекурсивная замена владельца директории /app на app:app
    chmod -R 700 /app # Установка прав: только владелец (app) может читать, писать, исполнять

    # Переключение на созданного пользователя для всех последующих инструкций
    USER app

    Если вы используете базовый образ на основе Debian или Astra Linux, в Dockerfile для сборки образа с сервисом бизнес-логики добавьте следующий блок команд:

    # Создание новой группы и системного пользователя с именем 'app'
    RUN addgroup --system app && \ # Создание системной группы 'app'
    adduser --system --group app && \ # Создание системного пользователя 'app' и добавление его в группу 'app'
    mkdir -p /app && \ # Создание рабочей директории, если ее нет
    chown -R app: /app && \ # Рекурсивная замена владельца директории /app на пользователя 'app' и его группу по умолчанию
    chmod -R 700 /app # Установка прав: только владелец (app) может читать, писать, исполнять

    # Переключение на созданного пользователя для всех последующих инструкций
    USER app

В результате в директории с исходным кодом содержатся необходимые артефакты для сборки Docker-образа.