Files
remnawave-minishop/docs/configuration.md
T

22 KiB
Raw Blame History

Настройка окружения

Конфигурация читается из .env. За основу удобно взять .env.example и заполнить значения под свою панель, домены и платежные провайдеры.

cp .env.example .env
nano .env

Основные настройки

Переменная Назначение
BOT_TOKEN Токен Telegram-бота.
ADMIN_IDS Telegram ID администраторов через запятую.
DEFAULT_LANGUAGE Язык по умолчанию для пользователей: ru или en.
DEFAULT_CURRENCY_SYMBOL Символ валюты по умолчанию в интерфейсе (например RUB, USD).
SUPPORT_LINK Ссылка на поддержку.
SERVER_STATUS_URL Ссылка на страницу статуса сервиса.
TERMS_OF_SERVICE_URL Ссылка на условия использования (отдельно от пользовательского соглашения).
PRIVACY_POLICY_URL Ссылка на политику конфиденциальности в Web App.
USER_AGREEMENT_URL Ссылка на пользовательское соглашение в Web App.
REQUIRED_CHANNEL_ID ID канала, на который пользователь должен подписаться перед использованием.
REQUIRED_CHANNEL_LINK Ссылка на канал для кнопки проверки подписки.
WEBHOOK_BASE_URL Публичный базовый URL для вебхуков (Telegram, платежи, панель). Обязателен: без него приложение не запускается.
TRUSTED_PROXIES Список IP или CIDR reverse proxy, которым доверяют заголовок X-Forwarded-For (через запятую).
START_COMMAND_DESCRIPTION Текст описания команды /start для меню Telegram (BotFather).
DISABLE_WELCOME_MESSAGE Если true, приветственное сообщение на /start не отправляется.

Если используется проверка подписки на канал, добавьте бота администратором в этот канал. После первой успешной проверки пользователь продолжает работу без повторной блокировки действий.

Remnawave

Переменная Назначение
PANEL_API_URL URL API панели Remnawave, например https://panel.domain.com/api.
PANEL_API_KEY API-ключ панели.
PANEL_WEBHOOK_SECRET Секрет для проверки вебхуков Remnawave.
USER_SQUAD_UUIDS Internal Squads, в которые добавляются пользователи.
USER_EXTERNAL_SQUAD_UUID External Squad для пользователей, если он используется.
USER_TRAFFIC_LIMIT_GB Лимит трафика для режима без JSON-каталога тарифов. 0 означает безлимит.
USER_TRAFFIC_STRATEGY Стратегия лимита трафика для режима без JSON-каталога тарифов.
USER_HWID_DEVICE_LIMIT Лимит HWID-устройств для пользователей. 0 означает безлимит.

При включенном каталоге тарифов значения squad_uuids, monthly_gb, traffic_packages и hwid_device_limit берутся из выбранного тарифа. Подробно это описано в tariffs.md.

Платежи

Переменная Назначение
PAYMENT_METHODS_ORDER Порядок кнопок оплаты через запятую: severpay, wata, freekassa, platega, yookassa, stars, cryptopay.
YOOKASSA_ENABLED Включает YooKassa.
YOOKASSA_SHOP_ID / YOOKASSA_SECRET_KEY Данные магазина YooKassa.
YOOKASSA_RETURN_URL URL возврата пользователя после оплаты.
YOOKASSA_DEFAULT_RECEIPT_EMAIL Email по умолчанию для чеков YooKassa.
YOOKASSA_VAT_CODE Код НДС для чеков.
YOOKASSA_AUTOPAYMENTS_ENABLED Включает автопродление через сохраненные способы оплаты YooKassa.
YOOKASSA_AUTOPAYMENTS_REQUIRE_CARD_BINDING Управляет обязательной привязкой карты при оплате.
FREEKASSA_ENABLED Включает FreeKassa.
FREEKASSA_MERCHANT_ID / FREEKASSA_API_KEY / FREEKASSA_SECOND_SECRET Данные FreeKassa и секрет уведомлений.
FREEKASSA_PAYMENT_IP Внешний IP сервера для запроса оплаты FreeKassa.
FREEKASSA_PAYMENT_METHOD_ID ID метода оплаты FreeKassa.
FREEKASSA_TRUSTED_IPS Список IP источников вебхуков FreeKassa (через запятую).
PLATEGA_ENABLED Включает Platega.
PLATEGA_BASE_URL Базовый URL API Platega.
PLATEGA_MERCHANT_ID / PLATEGA_SECRET Данные Platega.
PLATEGA_PAYMENT_METHOD Общий ID метода в API Platega; при отдельных кнопках СБП/крипто может использоваться как fallback для метода СБП (см. PLATEGA_SBP_METHOD).
PLATEGA_SBP_ENABLED / PLATEGA_CRYPTO_ENABLED Отдельные кнопки «СБП» и «крипто» в Platega.
PLATEGA_SBP_METHOD / PLATEGA_CRYPTO_METHOD ID методов Platega для СБП и крипто.
PLATEGA_RETURN_URL / PLATEGA_FAILED_URL URL возврата после оплаты или ошибки.
SEVERPAY_ENABLED Включает SeverPay.
SEVERPAY_MID / SEVERPAY_TOKEN Данные SeverPay.
SEVERPAY_BASE_URL Базовый URL API SeverPay.
SEVERPAY_RETURN_URL URL возврата после оплаты.
SEVERPAY_LIFETIME_MINUTES Время жизни платежной ссылки.
WATA_ENABLED Включает Wata.
WATA_API_TOKEN Bearer-токен терминала Wata.
WATA_BASE_URL Базовый URL API Wata (https://api.wata.pro/api/h2h, для песочницы https://api-sandbox.wata.pro/api/h2h).
WATA_RETURN_URL / WATA_FAILED_URL URL возврата после успешной или неуспешной оплаты.
WATA_PAYMENT_LINK_TTL_DAYS Время жизни платежной ссылки в днях, от 1 до 30.
WATA_WEBHOOK_VERIFY_SIGNATURE Проверять X-Signature вебхука через RSA/SHA512.
WATA_PUBLIC_KEY Необязательный публичный ключ Wata для проверки вебхуков; если пусто, backend загрузит его из API.
WATA_TRUSTED_IPS IP-адреса Wata, с которых принимаются вебхуки.
CRYPTOPAY_ENABLED Включает CryptoPay.
CRYPTOPAY_TOKEN Токен CryptoPay App.
CRYPTOPAY_NETWORK Сеть: mainnet или testnet.
CRYPTOPAY_CURRENCY_TYPE Тип валюты: fiat или crypto.
CRYPTOPAY_ASSET Актив (например RUB, USDT).
STARS_ENABLED Включает Telegram Stars.

Вебхуки платежных систем должны проксироваться на порт WEB_SERVER_PORT. Примеры маршрутов есть в deployment.md.

Тарифы

Переменная Назначение
TARIFFS_CONFIG_PATH Путь к JSON-каталогу тарифов. По умолчанию data/tariffs.json.
TARIFF_TRAFFIC_WARNING_LEVELS Проценты предупреждений по трафику, например 85,90,95.
RUB_PRICE_1_MONTH, RUB_PRICE_3_MONTHS, RUB_PRICE_6_MONTHS, RUB_PRICE_12_MONTHS Цены подписок в рублях для режима без JSON-каталога.
STARS_PRICE_1_MONTH, STARS_PRICE_3_MONTHS, STARS_PRICE_6_MONTHS, STARS_PRICE_12_MONTHS Цены подписок в Telegram Stars для режима без JSON-каталога.
1_MONTH_ENABLED, 3_MONTHS_ENABLED, 6_MONTHS_ENABLED, 12_MONTHS_ENABLED Доступность периодов подписки для режима без JSON-каталога.
TRAFFIC_PACKAGES Пакеты трафика в рублях для режима без JSON-каталога, например 10:199,50:799.
STARS_TRAFFIC_PACKAGES Пакеты трафика в Telegram Stars для режима без JSON-каталога.

Если файл из TARIFFS_CONFIG_PATH существует, бот использует каталог тарифов. Если файла нет, применяется конфигурация из переменных .env.

В штатном docker-compose.yml данные хранятся в named volumes. Если для локальной разработки включён bind mount ./data:/app/data, админка сможет сохранять data/tariffs.json, каталог тем (data/themes), кеш логотипа Web App (data/webapp-logo) и animated emoji (data/webapp-emoji) прямо в рабочую копию. Если bind mount включён на Ubuntu-сервере, создайте подкаталоги и отдайте data UID 10001, под которым работает приложение внутри контейнера:

mkdir -p data/themes data/webapp-logo data/webapp-emoji
chown -R 10001:10001 data
chmod -R u+rwX data

После изменения compose-файла или прав пересоздайте контейнер:

docker compose up -d --build --force-recreate

Переопределения из веб-админки сохраняются в БД и применяются поверх .env без перезапуска. Для платежных методов кнопка отображается только если соответствующий *_ENABLED=true и сервис настроен.

Редактор тарифов в админке сохраняет не override в БД, а сам JSON-файл TARIFFS_CONFIG_PATH. Редактор настроек админки, наоборот, работает через allowlist из backend/bot/app/web/admin_settings_manifest.py и сохраняет overrides в БД. Через него можно менять только заявленные в manifest параметры приложения; остальные параметры остаются в .env. Подробнее: admin.md.

Web App и email-вход

Переменная Назначение
WEBAPP_ENABLED Включает Web App в том же контейнере.
WEBAPP_SERVER_HOST / WEBAPP_SERVER_PORT Внутренний aiohttp server для WebApp API/auth/theme assets. По умолчанию порт 8081; статический frontend отдается отдельным nginx image.
SUBSCRIPTION_MINI_APP_URL Публичный URL Web App.
WEBAPP_TITLE Заголовок Web App.
WEBAPP_THEMES_DIR Каталог тем Web App. По умолчанию data/themes; внутри ожидаются папки <key>/theme.json и опциональные CSS/ассеты.
WEBAPP_DEFAULT_THEME Опциональный override темы по ключу, например light или neon. Если пусто, используется default из дескрипторов тем.
WEBAPP_SESSION_SECRET HMAC-секрет сессий Web App.
WEBHOOK_SECRET_TOKEN Секретный токен, с которым Telegram шлёт обновления на вебхук.
WEBAPP_SESSION_TTL_SECONDS Время жизни сессии Web App.
WEBAPP_AUTH_MAX_AGE_SECONDS Максимальный возраст initData Telegram Mini App.
WEBAPP_LOGIN_TOKEN_TTL_SECONDS Время жизни ссылки «войти с другого устройства» / внешнего логина.
TELEGRAM_OAUTH_CLIENT_ID / TELEGRAM_OAUTH_CLIENT_SECRET Данные Telegram OAuth / OpenID Connect из BotFather.
TELEGRAM_OAUTH_REQUEST_ACCESS Дополнительные разрешения Telegram Login, например write.
SMTP_HOST, SMTP_PORT, SMTP_FALLBACK_PORTS SMTP-подключение для email-кодов; резервные порты перебираются при ошибке основного.
SMTP_TIMEOUT_SECONDS Таймаут одной попытки подключения и отправки.
SMTP_STARTTLS / SMTP_USE_SSL STARTTLS на обычном порту (например 587) и SSL-обёртка (часто порт 465).
SMTP_USERNAME / SMTP_PASSWORD Логин и пароль или SMTP key.
SMTP_FROM_EMAIL / SMTP_FROM_NAME Отправитель писем с кодом; адрес из SMTP_FROM_EMAIL должен быть разрешён у провайдера.
EMAIL_CODE_TTL_SECONDS Срок действия email-кода.
EMAIL_CODE_RESEND_SECONDS Пауза перед повторной отправкой кода.
EMAIL_CODE_MAX_ATTEMPTS Максимум попыток ввода одного кода.
BRUTE_FORCE_MAX_FAILURES Количество неудачных попыток до временной блокировки.
BRUTE_FORCE_WINDOW_SECONDS Окно учета неудачных попыток.
BRUTE_FORCE_LOCK_SECONDS Длительность временной блокировки.
MY_DEVICES_SECTION_ENABLED Показывает раздел "Мои устройства" и включает API устройств.

Логотип, emoji-логотип, основной accent-цвет и тема редактируются в разделе Админка -> Внешний вид и сохраняются как overrides в базе. Переменные WEBAPP_PRIMARY_COLOR, WEBAPP_LOGO_URL, WEBAPP_LOGO_USE_EMOJI, WEBAPP_LOGO_EMOJI и WEBAPP_LOGO_EMOJI_FONT в .env считаются устаревшими для первичной настройки и игнорируются при загрузке env. Настройка домена, BotFather и callback URL описана в webapp.md, а создание кастомных тем - в webapp-themes.md.

SMTP и вход по email

Вход по email в Web App включается только если заполнены все обязательные поля SMTP: SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD, SMTP_FROM_EMAIL. Имя отправителя SMTP_FROM_NAME необязательно. Пока конфигурация неполная, интерфейс входа по email не показывается.

Рекомендуемый типичный вариант — порт 587 с STARTTLS (SMTP_STARTTLS=True, SMTP_USE_SSL=False), как в примере для Brevo в .env.example. Для порта 465 обычно используют обёртку SSL: выставьте SMTP_USE_SSL=True и при необходимости SMTP_STARTTLS=False; приложение также считает порт 465 SSL-режимом автоматически при отправке.

Если основной порт недоступен, перебираются порты из SMTP_FALLBACK_PORTS (список через запятую, после SMTP_PORT). Таймаут одной попытки подключения и отправки задаёт SMTP_TIMEOUT_SECONDS.

Порядок действий при подключении нового SMTP:

  1. В панели почтового провайдера создайте SMTP-доступ и подтвердите адрес отправителя (from), совпадающий с SMTP_FROM_EMAIL.
  2. Перенесите хост, порт, логин и пароль (или API-ключ SMTP) в .env.
  3. Перезапустите контейнер приложения, чтобы подхватить переменные.
  4. Проверьте вход: на странице Web App запросите код на почту; при ошибках смотрите логи контейнера.

Для ограничений по частоте отправки кодов см. EMAIL_CODE_* и BRUTE_FORCE_* в таблице выше.

Пробный период

Переменная Назначение
TRIAL_ENABLED Включает пробный период.
TRIAL_DURATION_DAYS Длительность пробного периода в днях.
TRIAL_TRAFFIC_LIMIT_GB Лимит трафика пробного периода. 0 означает безлимит.
TRIAL_TRAFFIC_STRATEGY Стратегия лимита трафика пробного периода.

Реферальная программа

Переменная Назначение
REFERRAL_WELCOME_BONUS_DAYS Бонус пользователю, который пришел по реферальной ссылке.
REFERRAL_ONE_BONUS_PER_REFEREE Ограничивает бонусы одним успешным платежом приглашенного пользователя.
REFERRAL_BONUS_DAYS_* Бонусные дни пригласившему по периодам подписки.
REFEREE_BONUS_DAYS_* Бонусные дни приглашенному по периодам подписки.
LEGACY_REFS Разрешает ссылки формата ref_<telegram_id>.

В режиме продажи трафика без JSON-каталога бонусы по периодам не отображаются, потому что покупка не привязана к сроку подписки.

Уведомления о подписке

Переменная Назначение
SUBSCRIPTION_NOTIFICATIONS_ENABLED Включает напоминания о подписке в Telegram.
SUBSCRIPTION_NOTIFY_ON_EXPIRE Уведомлять в день окончания.
SUBSCRIPTION_NOTIFY_AFTER_EXPIRE Уведомлять после окончания.
SUBSCRIPTION_NOTIFY_DAYS_BEFORE За сколько дней до окончания напоминать.

Чеки самозанятого (LKNPD)

Интеграция с API lknpd.nalog.ru использует переменные с префиксом NALOGO_:

Переменная Назначение
NALOGO_INN ИНН самозанятого.
NALOGO_PASSWORD Пароль для LKNPD / «Мой налог».
NALOGO_API_URL Базовый URL API (по умолчанию https://lknpd.nalog.ru/api).
NALOGO_RECEIPT_NAME_SUBSCRIPTION Название позиции чека для подписки; в тексте можно использовать {months}.
NALOGO_RECEIPT_NAME_TRAFFIC Название для пакета трафика; плейсхолдер {gb}.

Нужны оба поля NALOGO_INN и NALOGO_PASSWORD; иначе отправка чеков отключается (в логах будет предупреждение).

Happ crypt4 для ссылок подключения

Переменная Назначение
CRYPT4_ENABLED Включить шифрование ссылок happ crypt4.
CRYPT4_REDIRECT_URL Базовый URL редиректа для кнопки подключения (обёртка с query, например ?url=).

Логирование и уведомления в Telegram

Переменная Назначение
LOG_LEVEL Уровень логов: DEBUG, INFO, WARNING, ERROR, CRITICAL.
LOGS_PAGE_SIZE Размер страницы журнала в админке.
LOG_CHAT_ID ID чата или группы для служебных уведомлений.
LOG_THREAD_ID ID топика в супергруппе (опционально).
LOG_NEW_USERS Уведомлять о новых регистрациях.
LOG_PAYMENTS Уведомлять об успешных платежах.
LOG_PROMO_ACTIVATIONS Уведомлять об активации промокодов.
LOG_TRIAL_ACTIVATIONS Уведомлять об активации пробного периода.
LOG_SUSPICIOUS_ACTIVITY Уведомлять о подозрительных попытках.
LOG_ADMIN_ACTIONS Писать в журнал админки действия пользователей из ADMIN_IDS.

Часть этих переключателей доступна для правки через Web App (allowlist в backend/bot/app/web/admin_settings_manifest.py), см. admin.md.

Миниатюры inline-режима

Превью для inline-результатов задаются INLINE_REFERRAL_THUMBNAIL_URL, INLINE_USER_STATS_THUMBNAIL_URL, INLINE_FINANCIAL_STATS_THUMBNAIL_URL, INLINE_SYSTEM_STATS_THUMBNAIL_URL (значения по умолчанию есть в .env.example).

Секреты

WEBAPP_SESSION_SECRET и WEBHOOK_SECRET_TOKEN могут генерироваться при старте, но для рабочего окружения их лучше задать явно. Иначе после рестарта сессии Web App станут невалидными, а Telegram получит новый secret_token для вебхука (старые запросы от API Telegram могут перестать проходить проверку до следующей переустановки вебхука).

openssl rand -hex 32