Skip to content

Инструкция по запуску с Docker Compose

1. Установка и запуск

Подготовка

Убедитесь, что у вас установлен container runtime - docker и плагин docker-compose

docker -v
docker compose

Если runtime не установлен, установите для своей ОС, например

curl -L https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo reboot

Данный скрипт также установит актуальный docker-compose

Шаг 1: Создание docker-compose.yml

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

version: "3.9"
services:
  pve-proxyer:
    image: harbor.service.it-pvk.ru/prm-proxy/promotivation-proxy:1.0.0-production
# рекомендуется использовать тэг lattest так как он содержит 
# релизную стабильную сборку, 
# для использования пред-релизной сборки используйте другой тэг
    container_name: prm-proxyer
    ports:
      - "7621:7621"  # Проброс порта для основного приложения данный порт должен соответствовать порту в конфигурации
    volumes:
      - ./conf.yml:/app/conf.yml:ro   # Монтируем конфигурационный файл
      - ./cert.pem:/app/cert.pem:ro       # Монтируем сертификат, если необходим
    environment:
      - PYTHONUNBUFFERED=1            # Устанавливаем переменную окружения
    restart: always                   # Автоматический рестарт контейнера при сбое

Шаг 2: Запуск Docker Compose

После того как файл docker-compose.yml создан, запустите его с помощью команды:

docker compose up -d --build

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

Шаг 3: Проверка работы контейнера

Чтобы убедиться, что контейнер работает корректно, выполните:

docker compose ps

Эта команда покажет статус контейнеров. Убедитесь, что ваш контейнер в статусе Up.

Если вам необходимо проверить логи контейнера - выполните

docker logs <container-id>

Шаг 4: Остановка контейнера

Если нужно остановить контейнеры, используйте команду:

docker compose down

или

docker compose down -v

последняя команда также удалит монтирование из контейнера

2. Необходимые файлы для работы


Docker compose

docker-compose.yml
version: "3.9"
services:
  pve-proxy:
    image: harbor.service.it-pvk.ru/prm-proxy/promotivation-proxy:1.0.0-production
    ports:
      - "7621:7621"  # Порт для вашего основного приложения
    volumes:
      - ./conf.yml:/app/conf.yml:ro  # Монтируем конфиг
      - ./cert.pem:/app/cert.pem:ro  # Монтируем сертификат
    environment:
      - PYTHONUNBUFFERED=1
    restart: always

Конфигурация

conf.yml

— конфигурационный файл, который содержит настройки для вашего приложения.

Пример:

site:
  base_url: "https://{домен}.ru"  # Сервис, куда необходимо проксировать запросы
service:
  app_port: 7621                    # Порт открываемый для проксирования - по этому порту необходимо сделать проброс портов из сервиса
  host: "0.0.0.0"

fields:
  login: false  #Список полей где true - шифрование необходимо
  password: true #Список полей где true - шифрование необходимо
  idExternal: true #Список полей где true - шифрование необходимо
  # и другие поля...

encrypt:
  cert_file: "cert.pem"                # Путь к файлу сертификата для публичного ключа

logging:
  level: "DEBUG"                      # Уровень логирования сервиса

debug_mode:                         # Шифрование ответа (Отключите для продакшен-окружения)
  raw: False

3. Как и какие запросы отправлять на сервис

Данный сервис, запущенный в Docker, выполняет роль прокси, который:

1. принимает HTTP-запросы на выделенный порт
2. модифицирует их по определенным правилам
3. шифрует поля, если это необходимо по conf.yml
4. перенаправляет запросы на целевой сервис (base_url)
5. получает ответа от целевого сервиса (base_url)
6. прокси парсит и отправляет его обратно клиенту

Пример запроса в прокси Получение данных от сервиса (например, баланс)

Нам необходимо отправить запрос на

https://{домен}.ru/api/v2/user/add

Для данного кейса файл конфигурации будет следующим

site:
  base_url: "https://{домен}.ru"  # Сервис, куда необходимо проксировать запросы
service:
  app_port: 7621                   # Порт открываемый для проксирования - по этому порту необходимо сделать проброс портов из сервиса
  host: "0.0.0.0"

fields:
  login: false  #Список полей где true - шифрование необходимо
  password: true #Список полей где true - шифрование необходимо
  idExternal: true #Список полей где true - шифрование необходимо
  surname: true #Список полей где true - шифрование необходимо
  name: true #Список полей где true - шифрование необходимо
  patronymic: true  #Список полей где true - шифрование необходимо
  birthday: true  #Список полей где true - шифрование необходимо
  phone: true  #Список полей где true - шифрование необходимо
  mail: true  #Список полей где true - шифрование необходимо
  innCompany: true  #Список полей где true - шифрование необходимо
  sendNotification: true  #Список полей где true - шифрование необходимо
  # и другие поля...

encrypt:
  cert_file: "cert.pem"                # Путь к файлу сертификата для публичного ключа

logging:
  level: "DEBUG"                      # Уровень логирования сервиса

debug_mode:                         # Шифрование ответа (Отключите для продакшен-окружения)
  raw: False

Следовательно, сервис, который должен обращаться к api.prostodar.ru, будет обращаться к

http://<proxy_ip>:7621

И запрос будет выглядеть следующим образом

Метод: POST
URL: http://localhost:7621/api/v2/user/add
Тело запроса (JSON):

{
  "idExternal": "dkfsa124ksad",
  "surname": "Иванов",
  "name": "Иван",
  "patronymic": "Иванович",
  "birthday": "01.01.2001",
  "phone": "9139134466",
  "mail": "mail@mail.ru",
  "innCompany": "1234567890",
  "sendNotification": "sms"
}

Ответ от прокси-сервиса (JSON):

{
    "idExternal": "dkfsa124ksad",
    "status": "OK"
}

Прокси получает ответ от целевого сервиса, парсит его и отправляет обратно клиенту в формате JSON.