Files
PnvPanel/.env.example
T
Leonid Pershin 5b398f9c59
CI / Backend (build + test) (push) Successful in 1m16s
CI / Frontend (lint + typecheck + build) (push) Successful in 35s
Enhance Telegram bot functionality and configuration options
- Added new inline button features to the `/configs` command, allowing users to view their configurations in a single message with active links and a back button.
- Implemented a menu for unlinking Telegram accounts, providing a clearer user experience when managing account connections.
- Updated the `.env.example` file to include a new `Telegram__PublicSiteUrl` setting, enabling a button for accessing the panel's website directly from the bot.
- Enhanced documentation to reflect the new features and configuration options available in the Telegram bot.
2026-07-02 19:39:14 +03:00

64 lines
5.5 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
# ── Сид администратора (создаётся при первом старте, если не существует) ───
# Логин в систему — по username. Email в системе не используется.
AdminSeed__Username=admin
AdminSeed__Password=change-me-strong-admin-password
# ── Роли по умолчанию ─────────────────────────────────────────────────────
# Квота конфигов для системной роли "user" (выдаётся при регистрации).
Roles__DefaultUserMaxConfigs=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