Перейти к содержанию

Установка через Docker

Для упрощения работы с брокером можно код приложения упаковать в Docker image и использовать полученный образ для запуска приложения в вашей инфрастуктуре.

Создание образа

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

mkdir doc_printer_project

В данном каталоге создаем подкаталог docprinter-broker и распаковываем полученный архив с кодом Doc Printer Broker'а

создаем файл для сборки

vim Dockerfile

Следующего содержания

FROM python:3.10-slim as Base

RUN python -m venv /opt/venv
# Make sure we use the virtualenv:
ENV PATH="/opt/venv/bin:$PATH"

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

COPY docprinter-broker/requirements.txt ./
RUN pip install --no-cache-dir --upgrade  -r requirements.txt


FROM python:3.10-slim as build-image

COPY --from=Base /opt/venv /opt/venv

WORKDIR /code

COPY /docprinter-broker/ ./

EXPOSE 3001

ENV PATH="/opt/venv/bin:$PATH"

CMD ["python", "source/main.py", "--no_crypt"]

И файл .dockerignore для ограничения файлов вносимых в образ

venv
.env

Dockerfile*
ssl

# Ignore git files
**/.git
**/.gitkeep
**/.gitignore
**/.gitattributes
# Ignore documentation
**/docs
**/*.md

# Python temp files
**/__pycache__/
**/*.py[cod]
**/*$py.class

Выполняем сборку образа командой

docker build -t doc_printer_broker:latest  -f Dockerfile .

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

docker images

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

Запуск контейнера

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

Второй вариант пробросить файл в конфигурации внутрь создаваемого контейнера.

Заводим каталог для работы брокера

mkdir doc_printer_broker

В данном каталоге создаем файл docker-compose.yml следующего содержания

version: "3"
services:
  doc_printer_broker:
    image: doc_printer_broker:latest 

    container_name: doc-print-broker-prod
    restart: always
    ports: 
      - 3001:3001
    volumes:
      - $PWD/data/config/agents.yaml:/code/config/agents.yaml
      - $PWD/data/config/server.yaml:/code/config/server.yaml
      - $PWD/data/certs/bundle.crt:/code/config/certs/server.crt:r
      - $PWD/data/certs/crt.key:/code/config/certs/server.key:r
      - $PWD/data/logs:/code/logs

Обратите внимание на секцию volumes.

Файлы подключаемые к контейнеру размешаем в подкаталоге data.

Обязательные параметры:

  • $PWD/data/config/agents.yaml
  • $PWD/data/config/server.yaml

Файл настройки агентов и брокера. Копируем из архива с брокером в подкаталог data/config и вносим настройки для своего проекта

Опциональные параметры:

  • $PWD/data/certs/bundle.crt
  • $PWD/data/certs/crt.key

Файл ssl ключа и сертификата в случае настройки работы c брокером через https соединение.

  • $PWD/data/logs

Каталог с log файлами можно пробросить наружу для просмотра логов. Можно этого не делать и использовать команду docker compose logs.

В итоге будет следующая структура каталогов / файлов

broker_docker_compose_files.png

Запускаем проект командой

docker compose up -d

На выходе получаем сервис запущенный в контейнере и принимающий соединение на порту 3001 хоста. Проверить доступность брокера можно сделав запрос по адресу брокера к api

curl -i -H "Content-Type: application/json" http://192.168.3.10:3001/status

Или открыть в браузере страницу http://192.168.3.10:3001/status

Здесь 192.168.3.10 ip адрес (или dns имя) сервера с установленным брокером. В вашем случае задаете адрес вашего сервера. А 3001 порт проброшенный в контейнер с брокером. В случае если были заданы сертификаты соединение следует выполнять по https

Info

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

curl -i -H "Content-Type: application/json" -H "Authorization: Basic bW9rtSWtbas6BHTKLQasUjFmUmn6MEhjTfeRXa==" https://doc-print-broker.example.com:3001/status

Info

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