Инструкция по запуску с 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.