Для упрощения работы с брокером можно код приложения упаковать в 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_prynter_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
.
Файл настройки агентов и брокера. Копируем из архива с брокером в подкаталог data/config
и вносим настройки для своей инсталяции
Файл ssl ключа и сертификата в случае настройки работы c брокером через https соединение.
Каталог с log файлами можно пробросить наружу для просмотра логов. Можно этого не делать и использовать команду docker compose logs
.
В итоге будет следующая структура каталогов / файлов
Запускаем проект командой
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
Если в параметрах используется авторизованное соединение, дополнительно в строке запроса следует указать параметры авторизации для пользователя с правами администратора.
curl -i -H "Content-Type: application/json" -H "Authorization: Basic bW9rtSWtbrsjBHTKLQasUjFmUmn6MEhjTfeRXa==" https://doc-print-broker.example.com:3001/status
Обычные пользователи к статистике доступа не имеют.