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/pvk-proxyer/pvk-proxyer:latest
# рекомендуется использовать тэг lattest так как он содержит 
# релизную стабильную сборку, 
# для использования пред-релизной сборки используйте другой тэг
    container_name: pve-proxyer
    ports:
      - "7621:7621"  # Проброс порта для основного приложения данный порт должен соответствовать порту в конфигурации
    volumes:
      - ./conf.yml:/app/conf.yml:ro   # Монтируем конфигурационный файл
      - ./pk.pem:/app/pk.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/pvk-proxyer/pvk-proxyer:latest
    ports:
      - "7621:7621"  # Порт для вашего основного приложения
    volumes:
      - ./conf.yml:/app/conf.yml:ro  # Монтируем конфиг
      - ./pk.pem:/app/pk.pem:ro  # Монтируем сертификат
    environment:
      - PYTHONUNBUFFERED=1
    restart: always

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

conf.yml

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

Пример:

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

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

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

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

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

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

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

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

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

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

https://api.prostodar.ru/partner/get_balance/

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

site:
  base_url: "https://api.prostodar.ru"
service:  
app_port: 7621                     

fields:
  partnerName: false  #Список полей где true
  partnerPassword: true #Список полей где true
  requestId: true #Список полей где true
  operatorCode: true #Список полей где true
  # и другие поля...

encrypt:
  cert_file: "*.pem"                

logging:
  level: "DEBUG"                      

debug_mode:
  raw: False                       

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

http://<proxy_ip>:7621

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

Метод: POST
URL: http://localhost:7621/partner/get_balance/
Тело запроса (JSON):

{
"partnerName":"login",
"partnerPassword":"password",
"useAuthByCert":"Y"
}

ЛИБО в query

Метод: POST
URL: http://localhost:7621/partner/get_balance/?partnerName=login&partnerPassword=password&useAuthByCert=Y

В этом примере запрос содержит данные, которые отправляются прокси-сервису. Прокси проверяет, какие поля необходимо зашифровать (например, если user_id требует шифрования) и шифрует их. Затем прокси отправляет запрос на целевой сервис, подменяя домен в запросе.

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

{
  "status": "OK",
  "balance": "15000"
}

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