Skip to content

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

В MARV конфигурация разделена на несколько логических блоков и файлов:

  • Основная конфигурация сервера - config.{MODE}.yml (блоки app, infrastructure, domain, observability).
  • Конфигурация ботов - bots.{MODE}.json (Telegram и др.)
  • Конфигурация продуктов/платежей - products.{MODE}.json

Где хранится и как читается:

  • Определение режима: используется gin.Mode():
    • debug (по умолчанию) - config.debug.yml, bots.debug.json, products.debug.json
    • release - config.release.yml, bots.release.json, products.release.json
    • test - config.test.yml, bots.test.json, products.test.json
  • Имена файлов формируются в коде (infrastructure/config/factory.go). Каждый store читается из каталога config/ в корне модуля: базовый каталог определяется по расположению исполняемого файла (go run<корень модуля>/config, бинарь в bin/<родитель>/config), а не из «сырого» рабочего каталога процесса. Явный каталог можно задать через WithConfigDir(...).
  • Для каждого store есть fallback без суффикса режима: если config.{MODE}.yml отсутствует, читается config.yml; аналогично bots.json и products.json.
  • Валидация: основная конфигурация валидируется по схеме infrastructure/config/schemas/config.schema.json; для products - products.schema.json; для bots - bots.schema.json.

Важно:

  • Боты НЕ указываются в config.{MODE}.yml - для них отдельный файл bots.{MODE}.json.
  • Продукты также выделены в отдельный файл products.{MODE}.json (с fallback на products.json, если файл под режим отсутствует).
  • Любое значение из config.{MODE}.yml можно переопределить переменной окружения с префиксом MARV__.
    • Используйте двойное подчёркивание __ для обозначения вложенности (MARV__APP__SERVER__PORT=9090app.server.port).
    • Значения передаются как строки — Koanf приведёт их к нужному типу при unmarshal. Для time.Duration указывайте валидный формат (300s, 15m, 24h).

См. подробности в следующих подразделах.