- Added new configuration options for user plans in `.env.example`, including `Plans__MaxCustomConfigCount` and `Plans__MinCustomConfigCount`. - Introduced `MapPlanEndpoints` in `Program.cs` to handle plan-related API routes. - Implemented `SetUserPlan` endpoint in `RoleEndpoints` to allow admins to assign plans to users. - Removed deprecated role request approval endpoints from `AdminSupportEndpoints`. - Updated `ITelegramNotifier` and related classes to reflect changes in role request handling and payment notifications. - Refactored role management commands to remove `MaxConfigs` and focus on `MaxIpLimit` and billing settings. - Enhanced billing request handling to accommodate plan changes instead of role changes. - Updated various interfaces and command handlers to support new plan management features.
78 lines
6.9 KiB
Bash
78 lines
6.9 KiB
Bash
# PnvPanel — пример переменных окружения.
|
|
# Скопируй в .env и заполни значения. Ключи вида Section__Key биндятся в IOptions<T> ASP.NET Core.
|
|
# ВСЕ значения-секреты ниже обязательно заменить перед запуском (особенно *_PASSWORD, *SigningKey, *BotToken).
|
|
|
|
# ── PostgreSQL (контейнер db) ─────────────────────────────────────────────
|
|
POSTGRES_DB=pnvpanel
|
|
POSTGRES_USER=pnvpanel
|
|
POSTGRES_PASSWORD=change-me-strong-db-password
|
|
|
|
# Строка подключения приложения (host = имя сервиса БД в docker-compose)
|
|
ConnectionStrings__Default=Host=db;Port=5432;Database=pnvpanel;Username=pnvpanel;Password=change-me-strong-db-password
|
|
|
|
# ── JWT ───────────────────────────────────────────────────────────────────
|
|
Jwt__Issuer=PnvPanel
|
|
Jwt__Audience=PnvPanel
|
|
Jwt__SigningKey=change-me-min-32-chars-random-secret
|
|
Jwt__AccessTokenMinutes=15
|
|
Jwt__RefreshTokenDays=30
|
|
|
|
# ── Data Protection (шифрование секретов нод 3x-ui at-rest) ────────────────
|
|
# Путь к тому с key-ring (должен быть примонтирован и переживать перезапуск контейнера)
|
|
DataProtection__KeyRingPath=/app/keys
|
|
|
|
# ── Файловое хранилище (вложения тикетов поддержки) ─────────────────────────
|
|
# Путь на диске для скриншотов к тикетам — должен быть на постоянном томе (см. docker-compose.yml,
|
|
# FileStorage__RootPath там уже задан явно под volume 'ticket_uploads', эту строку трогать не нужно).
|
|
# FileStorage__RootPath=/app/uploads
|
|
|
|
# ── Сид администратора (создаётся при первом старте, если не существует) ───
|
|
# Логин в систему — по username. Email в системе не используется.
|
|
AdminSeed__Username=admin
|
|
AdminSeed__Password=change-me-strong-admin-password
|
|
|
|
# ── Роли по умолчанию ─────────────────────────────────────────────────────
|
|
# Стартовая квота конфигов нового пользователя (AppUser.ConfigQuota при регистрации; далее меняется
|
|
# самостоятельно через страницу тарифа /plan, не привязана к роли).
|
|
Roles__DefaultUserMaxConfigs=3
|
|
# Лимит одновременных IP на клиента (limitIp в 3x-ui) для системной роли "user"; -1 = без лимита.
|
|
Roles__DefaultUserMaxIpLimit=2
|
|
|
|
# ── Тарифы (самообслуживание) ────────────────────────────────────────────
|
|
# Верхняя граница ручного ввода количества конфигов при смене тарифа — защита от абьюза.
|
|
Plans__MaxCustomConfigCount=50
|
|
# Нижняя граница ручного ввода — не даёт занизить квоту ниже разумного минимума.
|
|
Plans__MinCustomConfigCount=3
|
|
|
|
# ── Rate limiting ────────────────────────────────────────────────────────
|
|
# Лимит запросов/мин на auth-эндпоинты (login/register/refresh/telegram/subscription). По умолчанию 20.
|
|
# RateLimiting__AuthPermitLimit=20
|
|
|
|
# ── Telegram-бот ──────────────────────────────────────────────────────────
|
|
# Если BotToken пуст — бот не стартует, панель работает без него. Транспорт — только long polling
|
|
# (webhook не реализован, отдельного режима/URL для него нет). Username бота для диплинков
|
|
# (кнопка «Привязать Telegram»/QR) панель узнаёт сама через Bot API (getMe) — задавать его отдельно
|
|
# не нужно и негде (раньше был Telegram__BotUsername — убран, чтобы не ломать диплинк опечаткой/пробелом).
|
|
Telegram__BotToken=
|
|
# Telegram id(ы) администраторов (через запятую). Дают права админа в боте (кнопки активации)
|
|
# и получают уведомления о запросах на активацию. Узнать id: @userinfobot.
|
|
# Не связано с сид-админом выше — привязка Telegram к сид-админу делается вручную в UI.
|
|
Telegram__AdminTelegramUserIds=123456789
|
|
# Прокси для запросов к Bot API (обычно socks5://[user:pass@]host:port) — на случай, если Telegram
|
|
# заблокирован напрямую с сети сервера. Пусто (по умолчанию) — без прокси, прямое подключение.
|
|
# Telegram__ProxyUrl=socks5://127.0.0.1:39372
|
|
# Ссылка на сайт панели — кнопка «🌐 Сайт панели» в главном меню бота. Пусто — кнопки не будет.
|
|
# Telegram__PublicSiteUrl=https://dashboard.example.com
|
|
|
|
# ── ASP.NET Core ──────────────────────────────────────────────────────────
|
|
ASPNETCORE_ENVIRONMENT=Production
|
|
ASPNETCORE_HTTP_PORTS=8080
|
|
|
|
# ── Доверенные прокси (X-Forwarded-For/Proto) ──────────────────────────────
|
|
# TLS терминируется вне compose внешним прокси/шлюзом. Чтобы клиент не мог подделать свой IP/схему
|
|
# напрямую (в обход прокси), по умолчанию доверяется только loopback (дефолт ASP.NET Core). Если
|
|
# прокси стоит не на loopback (отдельный контейнер/хост), перечисли его через запятую — конкретные
|
|
# IP через KnownProxies и/или сети в формате CIDR через KnownNetworks.
|
|
# ForwardedHeaders__KnownProxies=203.0.113.10
|
|
# ForwardedHeaders__KnownNetworks=172.18.0.0/16
|