Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
78 lines (69 loc) · 5.06 KB
/
Copy path.env.example
File metadata and controls
78 lines (69 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Пример конфигурации окружения. Скопируйте в .env и заполните своими значениями.
# Файл .env добавлен в .gitignore и НЕ должен попадать в репозиторий.
# --- Идентификация узла ---
# ВАЖНО: этот .env подхватывается из текущего рабочего каталога для ВСЕХ узлов.
# Не задавайте здесь узлоспецифичные NODE_ID/BIND_ADDR/HTTP_PORT/ADVERTISE_ADDR/DATA_DIR,
# если запускаете несколько узлов из одного каталога — передавайте их в командной строке
# (см. README, раздел «Запуск кластера»). Заданный здесь адрес навяжется каждому узлу.
#
# Уникальный числовой ID узла в кластере Raft (по умолчанию 1).
# NODE_ID=1
# Профиль окружения: dev | stage | prod (O8). В prod проверяются секреты.
APP_PROFILE=dev
# Формат логов: text | json (O2). JSON удобен для внешнего сбора.
LOG_FORMAT=text
# Порт HTTP-сервера (если не задан BIND_ADDR). Явный HTTP_PORT/--port перекрывает BIND_ADDR (F2).
# HTTP_PORT=21001
# Полный адрес прослушивания HTTP-сервера (host:port). Задавайте в командной строке per-node.
# BIND_ADDR=0.0.0.0:21001
# Полный адрес, публикуемый кластеру (host:port). Если не задан — берётся ADVERTISE_HOST + порт.
# ADVERTISE_ADDR=127.0.0.1:21001
# --- Хранилище ---
# Каталог для персистентных данных (Raft log, state machine, снапшоты).
# Задавайте per-node (например, через DATA_DIR в командной строке).
# DATA_DIR=./data/node1
# --- Redis (архив подтверждённых узлов) ---
# Полная строка подключения, включая пароль. НИКОГДА не коммитьте реальные значения.
# Если Redis запущен с --requirepass, пароль обязателен: redis://:PASSWORD@host:6379/0.
# Если Redis запущен без пароля, укажите URL без части пароля: redis://host:6379/0.
REDIS_URL=redis://:CHANGE_ME@localhost:6379/0
# --- Кластер (для удобства запуска) ---
# ADVERTISE_HOST — хост для ADVERTISE_ADDR, если адрес не задан явно (по умолчанию 127.0.0.1).
ADVERTISE_HOST=127.0.0.1
# --- Внутренний API ---
# Общий токен для внутренних/административных эндпоинтов (/add, /raft/*, /mng/*).
# Обязателен в prod; сгенерируйте длинную случайную строку.
INTERNAL_API_TOKEN=CHANGE_ME_LONG_RANDOM_TOKEN
# --- Логирование ---
# Уровень логов: trace | debug | info | warn | error
RUST_LOG=info
# --- Таймауты (секунды) ---
# Таймаут HTTP-запросов приложения (пересылка на лидера, очистка).
HTTP_TIMEOUT_SECS=10
# Таймаут установки HTTP-соединения приложения.
HTTP_CONNECT_TIMEOUT_SECS=3
# Таймаут Raft HTTP-запросов между узлами.
RAFT_HTTP_TIMEOUT_SECS=30
# Таймаут установки Raft HTTP-соединения между узлами.
RAFT_CONNECT_TIMEOUT_SECS=10
# Таймаут подключения к Redis при старте. При недоступном/неверном Redis узел
# завершается с ошибкой, а не зависает.
REDIS_CONNECT_TIMEOUT_SECS=5
# --- Фоновая очистка «тяжёлых» узлов (ведёт лидер) ---
# Интервал цикла очистки, миллисекунды.
PROCESSOR_INTERVAL_MS=250
# Порог веса (после насыщения, диапазон [0,1)), выше которого узел удаляется.
WEIGHT_THRESHOLD=0.5
# Максимальный размер батча кандидатов на очистку за цикл.
CLEANUP_BATCH_SIZE=100
# --- Публичный API: защита от злоупотреблений (O3) ---
# Доверять заголовку X-Forwarded-For при определении IP клиента для rate limit.
# Включайте ТОЛЬКО если узел стоит за доверенным прокси/балансировщиком (Q4/C44):
# иначе клиент может подделать свой IP.
TRUST_PROXY=false
# Лимит запросов в секунду на публичный POST / (0 — выключено).
PUBLIC_RATE_LIMIT_PER_SEC=50
# Максимальный всплеск для rate limiter.
PUBLIC_RATE_LIMIT_BURST=100
# Advisory-лимит размера тела запроса в байтах.
MAX_REQUEST_BYTES=1048576