Переменные окружения
Файл .env читается контейнером панели. Обязательные переменные отмечены
значком обяз.. Значения по умолчанию — те, что подставляет код.
Приложение
| Переменная | По умолчанию | Описание |
|---|---|---|
APP_PORT | 3000 | порт HTTP API и веб-интерфейса |
METRICS_PORT | 3001 | порт Prometheus-метрик |
API_INSTANCES | 1 | число воркеров API. max — по числу ядер, -1 — ядра минус одно. Не ставьте больше числа физических ядер |
IS_HTTP_LOGGING_ENABLED | false | логировать HTTP-запросы. Тела запросов не пишутся никогда |
ENABLE_DEBUG_LOGS | false | подробные логи приложения |
REMNAWAVE_BRANCH | dev | ветка, о которой приложение сообщает в служебных эндпоинтах |
База данных и кэш
| Переменная | По умолчанию | Описание |
|---|---|---|
DATABASE_URL обяз. | — | строка подключения, например postgresql://xpanel:pass@xpanel-db:5432/xpanel?schema=public |
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB | — | используются только контейнером PostgreSQL, само приложение их не читает |
REDIS_SOCKET | — | путь к unix-сокету Valkey/Redis (альтернатива хосту и порту) |
REDIS_HOST / REDIS_PORT | — / 6379 | адрес Valkey/Redis |
REDIS_USERNAME / REDIS_PASSWORD | — | если включена аутентификация |
REDIS_DB | 0 | номер базы |
Секреты и домены
| Переменная | По умолчанию | Описание |
|---|---|---|
APP_SECRET обяз. | — | 64 символа. Хеши паролей, JWT, шифрование TOTP. Менять после запуска нельзя |
JWT_AUTH_LIFETIME обяз. | — | время жизни access-токена в часах, допустимо от 12 до 168 |
PANEL_DOMAIN обяз. | — | публичный адрес панели, с https:// |
FRONT_END_DOMAIN | * | источник, которому разрешены CORS-запросы |
SUB_PUBLIC_DOMAIN обяз. | — | домен подписки без https:// и без слэша на конце; попадает в profile-web-page-url |
Метрики
| Переменная | Описание |
|---|---|
METRICS_USER обяз. | логин basic auth для http://127.0.0.1:3001/metrics |
METRICS_PASS обяз. | пароль basic auth |
Без METRICS_USER и METRICS_PASS контейнер не стартует.
Telegram
| Переменная | По умолчанию | Описание |
|---|---|---|
IS_TELEGRAM_NOTIFICATIONS_ENABLED | false | включает уведомления в Telegram |
TELEGRAM_BOT_TOKEN | — | токен бота |
TELEGRAM_BOT_API_ROOT | https://api.telegram.org | адрес Bot API; меняйте, если используете локальный Bot API server |
TELEGRAM_BOT_PROXY | — | прокси для запросов к Telegram, например socks5://proxy:1080 |
TELEGRAM_NOTIFY_USERS | — | чаты для событий пользователей |
TELEGRAM_NOTIFY_NODES | — | чаты для событий нод |
TELEGRAM_NOTIFY_CRM | — | чаты CRM-событий |
TELEGRAM_NOTIFY_SERVICE | — | служебные уведомления |
TELEGRAM_NOTIFY_TBLOCKER | — | события torrent-blocker |
Формат чатов: chat_id или chat_id:thread_id для тем. Несколько значений —
через запятую.
Вебхуки
| Переменная | По умолчанию | Описание |
|---|---|---|
WEBHOOK_ENABLED | false | включает отправку вебхуков |
WEBHOOK_URL | — | адрес получателя; несколько адресов — через запятую. Допустимы только http:// и https:// |
WEBHOOK_SECRET_HEADER | — | секрет подписи payload, ровно 64 символа [a-zA-Z0-9] |
Подробнее — в разделе Вебхуки.
Уведомления о порогах
| Переменная | По умолчанию | Описание |
|---|---|---|
BANDWIDTH_USAGE_NOTIFICATIONS_ENABLED | false | уведомлять о достижении порога трафика |
BANDWIDTH_USAGE_NOTIFICATIONS_THRESHOLD | [60, 80] | пороги в процентах, по возрастанию, от 25 до 95, не больше 5 значений |
NOT_CONNECTED_USERS_NOTIFICATIONS_ENABLED | false | уведомлять о пользователях, которые так и не подключились |
NOT_CONNECTED_USERS_NOTIFICATIONS_AFTER_HOURS | [6, 24, 48] | часы после создания пользователя, от 1 до 168, не больше 3 значений |
EXPIRATION_NOTIFICATIONS_ENABLED | false | уведомлять об истечении подписки |
EXPIRATION_NOTIFICATIONS | [-72, -48, -24, 24] | часы относительно expireAt: отрицательные — до истечения, положительные — после. От −168 до 168, ноль запрещён |
Приватность и retention
Автоочистка выключена по умолчанию. Один недельный job обслуживает все
таблицы: он запускается, если включён хотя бы один из переключателей
SERVICE_CLEAN_USAGE_HISTORY или SERVICE_CLEAN_OLD_LOGS.
| Переменная | По умолчанию | Описание |
|---|---|---|
SERVICE_CLEAN_USAGE_HISTORY | false | включает очистку истории трафика |
USAGE_HISTORY_RETENTION_DAYS | 14 | сколько дней хранить nodes_user_usage_history |
SERVICE_CLEAN_OLD_LOGS | false | включает очистку персональных данных и статистики нод |
NODES_USAGE_HISTORY_RETENTION_DAYS | 90 | часовая статистика нод |
HWID_DEVICES_RETENTION_DAYS | 90 | устройства пользователей (hwid_user_devices); отсчёт от последнего появления устройства |
SUBSCRIPTION_REQUEST_HISTORY_RETENTION_DAYS | 30 | история запросов подписки |
AUDIT_LOG_RETENTION_DAYS | 30 | журнал действий администраторов |
SERVICE_DISABLE_USER_USAGE_RECORDS | false | вообще не записывать историю трафика |
SERVICE_DISABLE_SRH_RECORDS | false | вообще не записывать историю запросов подписки |
USER_USAGE_IGNORE_BELOW_BYTES | 0 | не записывать всплески трафика меньше указанного числа байт |
Если история трафика и запросы подписки вам не нужны, надёжнее не чистить их
постфактум, а не собирать: SERVICE_DISABLE_USER_USAGE_RECORDS=true и
SERVICE_DISABLE_SRH_RECORDS=true.
Короткие идентификаторы подписки
| Переменная | По умолчанию | Описание |
|---|---|---|
SHORT_UUID_METHOD | nanoid | nanoid — случайная строка, uuid — UUID v4, custom — свой шаблон |
SHORT_UUID_LENGTH | 16 | длина для метода nanoid, от 16 до 64 |
SHORT_UUID_CUSTOM_PATTERN | — | шаблон для метода custom. Токены: {nanoid:N}, {alpha:N}, {digits:N}, {hex:N}, {uuid} |
Пример: SHORT_UUID_CUSTOM_PATTERN={hex:16}-{hex:16}-{digits:10}. Шаблон обязан
давать от 16 до 64 символов и не меньше ~64 бит случайности.
Экспорт в Redis Streams
| Переменная | По умолчанию | Описание |
|---|---|---|
EXPORT_TO_STREAM_ENABLED | false | публиковать события панели в Redis Streams |
EXPORT_TO_STREAM_MAXLEN | 3000 | приблизительный лимит сообщений в потоке (MAXLEN ~) |
Потоки: ioraw:export:user_usage (дельты трафика), ioraw:export:subscription_requests
(запросы подписки), ioraw:export:node_connections (снимки подключений, retention 1 час).
Удобно для выгрузки в ClickHouse или Vector.