Переменные окружения¶
Живут в /opt/minik/.env. После правки перезапустите трекер:
Большинство значений установщик проставляет сам — руками трогают единицы.
Не всякая переменная доезжает из .env
Установщик генерирует docker-compose.yml с фиксированным списком
переменных сервера, и .env подставляется только в него. Переменная,
которой в этом списке нет, до контейнера не доедет — её нужно дописать в
environment: сервиса server. Из .env работают: MINIK_IMAGE,
MINIK_VERSION, PUBLIC_BASE_URL, ADMIN_EMAIL, ADMIN_PASSWORD,
JWT_SECRET, TRACKER_SECRET_KEY, POSTGRES_PASSWORD,
CLICKHOUSE_PASSWORD, CENTRIFUGO_*, GEOIP_*, PHP_FPM_ADDR,
INTERNAL_DENY_CIDR, HTTP_ACCESS_LOG, PPROF, EVENTQ_MAXLEN,
REDIS_MAXMEMORY, MINIK_LICENSE_KEY, LICENSE_SERVER_URL,
LICENSE_CHECK_INTERVAL. Отдельно ACME_EMAIL: её читает сам установщик
и кладёт в конфиг Caddy. Правки самого docker-compose.yml не переживают
обновление — повторите их после update.
Базовое¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
DATABASE_URL |
postgres://minik:minik@localhost:5432/minik?sslmode=disable |
подключение к PostgreSQL; установщик собирает его из POSTGRES_PASSWORD |
CLICKHOUSE_DSN |
clickhouse://default:@localhost:9000/default |
подключение к ClickHouse, пароль из CLICKHOUSE_PASSWORD |
REDIS_URL |
— | подключение к Redis |
LISTEN_ADDR |
:8080 |
адрес прослушивания |
PUBLIC_BASE_URL |
http://localhost:8080 (в compose — http://localhost) |
публичный адрес установки: из него строятся ссылки кампаний и входящий postback-URL. Незаданное значение не вызывает ошибку — ссылки молча собираются с localhost |
WEB_DIST |
/app/web |
каталог собранной панели внутри образа |
ADMIN_EMAIL, ADMIN_PASSWORD |
admin@local / admin |
учётка администратора, создаётся один раз при первом запуске |
ADMIN_PASSWORD действует только на пустой базе: на уже поднятой установке
пароль меняют в панели, а забытый сбрасывают
с сервера. Установщик
подставляет случайный пароль сам; оставленное значение admin трекер пишет в
лог предупреждением.
Пустой REDIS_URL — только для разработки
Без Redis очередь событий живёт в памяти процесса и теряется при перезапуске. Установщик всегда поднимает Redis и прописывает адрес.
Секреты¶
| Переменная | Назначение |
|---|---|
JWT_SECRET |
подпись токенов сессий; короче 16 байт — сервер не стартует |
TRACKER_SECRET_KEY |
ключ шифрования хранимых секретов (токен Telegram-бота, ключи интеграций, приватные ключи ACME, семена 2FA) и подписи токенов браузерных конверсий |
POSTGRES_PASSWORD, CLICKHOUSE_PASSWORD |
пароли баз; попадают в DSN сервера |
CENTRIFUGO_API_KEY, CENTRIFUGO_HMAC_SECRET |
доступ к брокеру realtime и подпись его токенов |
CENTRIFUGO_API_URL, CENTRIFUGO_PUBLIC_WS |
внутренний адрес API брокера и публичный websocket-адрес для браузера |
MINIK_DEV |
1 понижает проверку секретов ниже до предупреждения — только для локальной разработки |
Установщик генерирует эти значения случайными при первой установке и хранит в
.env с правами 600.
Сервер не стартует на дефолтных секретах
Если JWT_SECRET, TRACKER_SECRET_KEY или непустой
CENTRIFUGO_HMAC_SECRET содержат подстроку change-me — то есть остались
значениями из репозитория, — процесс завершается с ошибкой. Эти значения
публичны: с ними подделывается админ-сессия и расшифровывается всё
хранимое. Задайте случайные; MINIK_DEV=1 снимает проверку, но такую
установку нельзя выставлять в интернет.
Не меняйте секреты на живой установке
Смена JWT_SECRET разлогинит всех. Смена TRACKER_SECRET_KEY сделает
нечитаемыми зашифрованные значения — например токен Telegram-бота.
Реальный IP и CDN¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
TRUSTED_PROXIES |
loopback и приватные сети: 127.0.0.0/8, ::1/128, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7 |
список CIDR и адресов, чьему X-Forwarded-For можно верить |
TRUST_EDGE_HEADERS |
выключено | 1 — доверять заголовкам CDN CF-Connecting-IP и X-Country |
X-Forwarded-For читается справа налево: клиентом считается первый адрес,
который не входит в TRUSTED_PROXIES. Если запрос пришёл не от доверенного
прокси, берётся реальный TCP-адрес. X-Real-IP не учитывается вовсе — его
подделал бы любой посетитель.
За Cloudflare нужен явный флаг
Пока TRUST_EDGE_HEADERS выключен, CF-Connecting-IP и X-Country
отбрасываются, и в отчётах окажется гео edge-узла CDN. Включайте флаг
только когда CDN действительно стоит перед трекером: обычный обратный
прокси передаёт эти заголовки от посетителя как есть, и включённый флаг
отдаёт ему управление гео, уникальностью и фильтрами по IP. Второй
рабочий вариант — перечислить публичные подсети CDN в TRUSTED_PROXIES.
GeoIP¶
| Переменная | Назначение |
|---|---|
GEOIP_MMDB |
путь к GeoLite2-City.mmdb — страна, регион, город |
GEOIP_ASN_MMDB |
GeoLite2-ASN.mmdb — нужен для детекта дата-центров по ASN |
GEOIP_ISP_MMDB |
GeoIP2-ISP.mmdb — поле ISP и фильтр мобильного оператора |
Без баз гео остаётся пустым, а фильтры по стране не работают. Базы MaxMind скачиваются бесплатно после регистрации.
Файлы кладут в /opt/minik/data/geoip/, а в переменной указывают путь внутри
контейнера — этот каталог примонтирован туда как /data/geoip:
Валюты¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
FX_RATES_URL |
https://open.er-api.com/v6/latest |
источник курсов: открытый ExchangeRate-API без ключа, ~160 валют |
FX_REFRESH_INTERVAL |
6h |
как часто обновлять курсы |
Курсы нужны, чтобы cost и revenue в разных валютах сводились в базовую валюту воркспейса.
Антифрод и боты¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
BOT_INTEL_ENABLED |
true |
общий выключатель IP-интеллекта и базы ботов |
IPINTEL_REFRESH |
24h |
периодичность обновления списков |
IPINTEL_DATACENTER_ASN_SOURCE |
публичный список | ASN-денилист хостингов |
IPINTEL_DATACENTER_CIDR_SOURCE |
публичный список | CIDR-листы дата-центров |
IPINTEL_VPN_CIDR_SOURCE |
публичный список | CIDR-листы VPN |
IPINTEL_PROXY_CIDR_SOURCE |
выключен | список proxy-подсетей |
BOT_UA_LIST_SOURCE |
публичный список | база сигнатур User-Agent ботов |
TOR_LIST_URL |
список Tor Project | список exit-нод Tor |
Каждый источник — либо HTTPS-URL, либо путь к локальному файлу (оффлайн-режим).
Пусто — публичное значение по умолчанию, off — отключить сигнал.
HTTPS¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
ACME_EMAIL |
пусто | почта аккаунта Let's Encrypt (только письма об истечении). Установщик записывает её в конфиг Caddy — сертификаты для трекинг-доменов выпускает edge |
ACME_DIRECTORY |
боевой эндпоинт Let's Encrypt | эндпоинт ACME для встроенного клиента. Для тестов — staging Let's Encrypt: без лимитов, но сертификаты недоверенные |
TLS_WARM_ADDR |
caddy:443 |
адрес edge для прогрева сертификата сразу после добавления домена; пусто — прогрев выключен |
PHP¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
PHP_FPM_ADDR |
пусто (PHP выключен) | адрес PHP-FPM. Флаг установщика --with-php ставит tcp://php:9000 |
LANDINGS_DIR |
/data/landings в контейнере |
каталог с файлами лендингов и скриптами потоков |
INTERNAL_DENY_CIDR |
пусто | подсеть, из которой запрещены служебные /metrics и /tls-ask. --with-php ставит 10.89.71.0/24 — сеть контейнера PHP |
INTERNAL_DENY_CIDR закрывает путь «PHP арендатора → сервер»: без него скрипт
на лендинге мог бы прочитать метрики всей установки и перечислить домены чужих
воркспейсов. Меняете подсеть PHP — поменяйте и эту переменную.
Конверсии из браузера¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
MINIK_CONV_TOKEN_ENFORCE |
выключено | отклонять конверсии /action и /px.gif без валидного токена клика |
Пока выключено, конверсия с плохим или отсутствующим токеном записывается, но
не уходит наружу — ни в CAPI, ни в вебхуки, ни в исходящий S2S. Включайте,
когда все лендинги обновлены до SDK, отдающего токен: счётчик
minik_conversion_token_invalid_total в метриках должен стоять на нуле.
Производительность и очереди¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
HTTP_ACCESS_LOG |
1 |
пер-запросный HTTP-лог. 0 для нагрузочных тестов и высокого RPS — строка на каждый клик стоит реальной латентности |
EVENTQ_MAXLEN |
200000 |
потолок очереди кликов в Redis; очереди трейсов, конверсий и постбэков — по трети от него |
REDIS_MAXMEMORY |
768mb |
лимит памяти Redis |
PPROF |
выключено | 1 включает профилировщик на /debug/pprof; наружу edge отдаёт 404 |
EVENTQ_MAXLEN и REDIS_MAXMEMORY меняют парой
Очереди не вытесняются по TTL. Если их потолок перерастёт лимит памяти, Redis выбросит полезный кеш и начнёт отказывать в записи. Ориентир — примерно 1,3 КБ на клик и 1,8 КБ на трейс.
Лицензия¶
| Переменная | По умолчанию | Назначение |
|---|---|---|
MINIK_LICENSE_KEY |
— | ключ лицензии; его же задаёт флаг установщика --license-key |
LICENSE_SERVER_URL |
https://license.minik.sh/api/v1/license |
адрес сервера лицензий |
LICENSE_CHECK_INTERVAL |
1h |
как часто перепроверять лицензию |
Состояние лицензии хранится в PostgreSQL и видно в Настройках → Лицензия — вкладка доступна владельцу инсталляции. Подробности — в установке.