Skip to content

Latest commit

 

History

History
145 lines (89 loc) · 5.87 KB

File metadata and controls

145 lines (89 loc) · 5.87 KB

Руководство по использованию Docker

Этот документ описывает, как собрать и запускать сервис TestizerFunnelEngine в Docker.

Подходит как для локального запуска, так и для сервера.

1. Требования

Перед началом нужны:

  • установленный Docker;
  • файл .env в корне проекта с корректными настройками:
    • доступ к базе MySQL (MODX);
    • настройки Brevo (API ключ, базовый адрес, списки);
    • параметры приложения (APP_ENV, APP_DRY_RUN и так далее).

Контейнер использует те же переменные окружения, что и локальный запуск Python.

2. Сборка Docker-образа

Из корня проекта:

docker build -t testizer-funnel-engine .

После выполнения этой команды у вас будет образ с именем testizer-funnel-engine, в который упакован весь код проекта и зависимости из requirements.txt.

3. Разовый запуск основной задачи

Основная задача сервиса соответствует локальной команде:

python -m app.main

В Docker это будет выглядеть так:

docker run --rm --env-file .env testizer-funnel-engine

Что важно:

  • --env-file .env передает переменные окружения из локального .env внутрь контейнера;
  • контейнер внутри будет подключаться к MySQL по параметрам DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME, DB_CHARSET.

Если база данных и Docker-контейнер находятся на одной машине, возможно, нужно будет изменить DB_HOST. Например:

  • вместо 127.0.0.1 использовать host.docker.internal (зависит от окружения и хостинга).

4. Dry run и боевой режим

Сервис умеет работать в двух режимах:

  • APP_DRY_RUN=true

    Ничего реально не отправляет в Brevo, только делает запросы, пишет логи и может использоваться для проверки логики.

  • APP_DRY_RUN=false

    Полноценный боевой режим: контакты уходят в Brevo, записи в воронке и покупки фиксируются по-настоящему.

Примеры:

Запуск в dry run:

docker run --rm --env-file .env -e APP_DRY_RUN=true testizer-funnel-engine

Запуск в боевом режиме:

docker run --rm --env-file .env -e APP_DRY_RUN=false testizer-funnel-engine

Если переменная APP_DRY_RUN уже указана в .env, можно не пробрасывать её через -e, а управлять режимом прямо в .env.

5. Использование Docker вместе с расписанием

Есть два базовых варианта.

5.1. Расписание на стороне хоста

На сервере можно:

  • настроить cron (или планировщик в панели хостинга), который раз в N минут выполняет команду вида:
docker run --rm --env-file /path/to/.env testizer-funnel-engine

Каждый такой запуск делает один полный цикл:

  • забирает кандидатов из MODX;
  • отправляет контакты в Brevo;
  • записывает вход в воронку;
  • подтягивает покупки и обновляет статус.

Повторные запуски безопасны: логика работы опирается на состояние таблицы funnel_entries и не дублирует данные.

5.2. Внешний оркестратор

Если в будущем сервис будет запускаться в Kubernetes, Docker Swarm или другой системе оркестрации:

  • используется тот же образ testizer-funnel-engine;
  • команда запуска внутри контейнера: python -m app.main;
  • переменные окружения и расписание задаются на стороне оркестратора.

6. Запуск тестов внутри Docker (опционально)

Для дополнительной проверки можно прогнать тесты прямо в контейнере:

docker run --rm testizer-funnel-engine python -m pytest

Это не обязательный шаг для продакшена, но полезен:

  • при отладке;
  • при ручной проверке перед выкладкой;
  • если на сервере нет локального Python, но есть Docker.

7. Быстрый чек-лист по Docker

  1. Собрать образ:

    docker build -t testizer-funnel-engine .
  2. Проверить работу в режиме dry run:

    docker run --rm --env-file .env -e APP_DRY_RUN=true testizer-funnel-engine
  3. После проверки перевести в боевой режим:

    docker run --rm --env-file .env -e APP_DRY_RUN=false testizer-funnel-engine
  4. Подключить Docker-команду к расписанию на сервере и запускать с нужной периодичностью.