mirror of
https://github.com/snoups/remnashop.git
synced 2026-04-18 17:04:13 +00:00
docs: update 0.7.4 release notes, env vars and requirements
This commit is contained in:
@@ -1,27 +1,66 @@
|
||||
---
|
||||
title: "Assets"
|
||||
description: "Configuring banners and translations for Remnashop"
|
||||
description: "Configuring banners, translations and QR code logo for Remnashop"
|
||||
---
|
||||
|
||||
## Banners
|
||||
|
||||
The bot supports custom banners for each page category and locale: `menu`, `dashboard`, `subscription`, `promocode`, `referral`.
|
||||
The bot supports custom banners for each page and locale. Supported page names: `menu`, `dashboard`, `subscription`, `promocode`, `referral`, `default`.
|
||||
|
||||
To set a custom banner, name the file according to the target page and make sure it uses one of the supported formats: `jpg`, `jpeg`, `png`, `gif`, `webp`.
|
||||
Supported formats: `jpg`, `jpeg`, `png`, `gif`, `webp`.
|
||||
|
||||
Banners should be placed at: `/opt/remnashop/assets/banners/(locale)/`
|
||||
Banners should be placed at: `/opt/remnashop/assets/banners/`
|
||||
|
||||
Example: `/opt/remnashop/assets/banners/en/menu.gif`
|
||||
### Fallback chain
|
||||
|
||||
When loading a banner, the system searches in the following order:
|
||||
|
||||
1. `banners/{user_locale}/{page}` — page-specific banner for the user's locale
|
||||
2. `banners/{user_locale}/default` — default banner for the user's locale
|
||||
3. `banners/{default_locale}/{page}` — page-specific banner for the default locale
|
||||
4. `banners/{default_locale}/default` — default banner for the default locale
|
||||
5. `banners/default` — global fallback
|
||||
|
||||
### Usage examples
|
||||
|
||||
- **One image for everything** — place a single `banners/default.jpg`
|
||||
- **One image per locale** — place `banners/{locale}/default.jpg` for each locale
|
||||
- **Per-page images** — place `banners/{locale}/{page}.jpg` for each page and locale
|
||||
|
||||
### File structure example
|
||||
|
||||
```
|
||||
banners/
|
||||
├── default.jpg ← global fallback for all pages and locales
|
||||
├── ru/
|
||||
│ ├── default.jpg ← default for all pages in ru locale
|
||||
│ ├── menu.jpg
|
||||
│ └── subscription.jpg
|
||||
└── en/
|
||||
├── default.jpg
|
||||
└── menu.jpg
|
||||
```
|
||||
|
||||
<Warning>
|
||||
Do not delete the `default.jpg` file — it is required for the bot to work properly.
|
||||
The `banners/default.jpg` file is the global fallback and is required for the bot to work properly. Do not delete it.
|
||||
</Warning>
|
||||
|
||||
---
|
||||
|
||||
## Translations
|
||||
|
||||
You can edit any translation file located at: `/opt/remnashop/assets/translations/(locale)/`
|
||||
Translation files are located at: `/opt/remnashop/assets/translations/{locale}/`
|
||||
|
||||
| File | Description |
|
||||
| ------------------- | ---------------------------------------------------- |
|
||||
| `buttons.ftl` | Button labels |
|
||||
| `messages.ftl` | Messages and dialog texts |
|
||||
| `notifications.ftl` | Notification texts |
|
||||
| `events.ftl` | Event-triggered messages |
|
||||
| `utils.ftl` | Utility strings (statuses, labels, etc.) |
|
||||
| `custom.ftl` | Custom translations for plan names, menu buttons, etc. |
|
||||
|
||||
The `custom.ftl` file is intended for user-defined keys — for example, translated plan names or extra menu button labels. Add your keys here instead of editing the main files.
|
||||
|
||||
After making changes, restart the container for them to take effect.
|
||||
|
||||
@@ -33,4 +72,15 @@ After making changes, restart the container for them to take effect.
|
||||
|
||||
<Warning>
|
||||
Translation persistence across bot updates is not currently supported. When updating, your previous assets will be archived at: `/opt/remnashop/assets/*.bak`
|
||||
</Warning>
|
||||
</Warning>
|
||||
|
||||
---
|
||||
|
||||
## QR Code Logo
|
||||
|
||||
You can add a custom logo to the center of generated invite QR codes.
|
||||
|
||||
- **Path:** `assets/logo.png`
|
||||
- **Format:** PNG, preferably with a transparent background
|
||||
|
||||
If the file exists, it will automatically be overlaid in the center of every generated QR code.
|
||||
|
||||
@@ -5,83 +5,84 @@ description: "Description of all environment variables for configuring Remnashop
|
||||
|
||||
## General
|
||||
|
||||
| Variable | Default | Description |
|
||||
| -------------------- | :-------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `APP_DOMAIN` | — | Bot domain without HTTP/HTTPS and without trailing slash. Used for webhooks. |
|
||||
| `APP_CRYPT_KEY` | — | Encryption key for sensitive data in the database. Must be a valid 44-character Base64 string. |
|
||||
| `APP_HOST` | `0.0.0.0` | Address on which the application runs. |
|
||||
| `APP_PORT` | `5000` | Application port. |
|
||||
| `APP_LOCALES` | `ru` | Comma-separated list of supported locales. Example: `en, ru` |
|
||||
| `APP_DEFAULT_LOCALE` | `ru` | Default locale. |
|
||||
| `APP_ORIGINS` | — | Comma-separated list of allowed CORS origins. |
|
||||
| Variable | Required | Default | Description |
|
||||
| -------------------- | :------: | --------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `APP_DOMAIN` | ✅ | — | Bot domain without HTTP/HTTPS and without trailing slash. Used for webhooks. |
|
||||
| `APP_CRYPT_KEY` | ✅ | — | Encryption key for sensitive data in the database. Must be a valid 44-character Base64 string. |
|
||||
| `APP_HOST` | ❌ | `0.0.0.0` | Address on which the application runs. |
|
||||
| `APP_PORT` | ❌ | `5000` | Application port. |
|
||||
| `APP_LOCALES` | ❌ | `ru` | Comma-separated list of supported locales. Example: `en, ru` |
|
||||
| `APP_DEFAULT_LOCALE` | ❌ | `ru` | Default locale. |
|
||||
| `APP_ORIGINS` | ❌ | — | Comma-separated list of allowed CORS origins. |
|
||||
|
||||
---
|
||||
|
||||
## Bot
|
||||
|
||||
| Variable | Default | Description |
|
||||
| -------------------------- | ------- | --------------------------------------------------------------------------------------------------- |
|
||||
| `BOT_TOKEN` | — | Telegram Bot API token. Obtain it from [@BotFather](https://t.me/BotFather). |
|
||||
| `BOT_SECRET_TOKEN` | — | Secret token for verifying webhooks from Telegram. |
|
||||
| `BOT_OWNER_ID` | — | Telegram ID of the bot owner. Grants elevated permissions. |
|
||||
| `BOT_SUPPORT_USERNAME` | — | Telegram username of the support account for deep-linking (without @). |
|
||||
| `BOT_MINI_APP` | `false` | Behavior of the "connect" button: `false` — browser, `true` — WebApp, URL — open specified address. |
|
||||
| `BOT_RESET_WEBHOOK` | `false` | Whether to reset the webhook on startup. |
|
||||
| `BOT_DROP_PENDING_UPDATES` | `false` | Whether to ignore pending updates on startup. |
|
||||
| `BOT_SETUP_COMMANDS` | `true` | Whether to set up bot commands on startup. |
|
||||
| `BOT_USE_BANNERS` | `true` | Whether to use banners in bot messages. |
|
||||
| Variable | Required | Default | Description |
|
||||
| -------------------------- | :------: | ------- | --------------------------------------------------------------------------------------------------- |
|
||||
| `BOT_TOKEN` | ✅ | — | Telegram Bot API token. Obtain it from [@BotFather](https://t.me/BotFather). |
|
||||
| `BOT_SECRET_TOKEN` | ✅ | — | Secret token for verifying webhooks from Telegram. |
|
||||
| `BOT_OWNER_ID` | ✅ | — | Telegram ID of the bot owner. Grants elevated permissions. |
|
||||
| `BOT_SUPPORT_USERNAME` | ✅ | — | Telegram username of the support account for deep-linking (without @). |
|
||||
| `BOT_MINI_APP` | ❌ | `false` | Behavior of the "connect" button: `false` — browser, `true` — WebApp, URL — open specified address. |
|
||||
| `BOT_RESET_WEBHOOK` | ❌ | `false` | Whether to reset the webhook on startup. |
|
||||
| `BOT_DROP_PENDING_UPDATES` | ❌ | `false` | Whether to ignore pending updates on startup. |
|
||||
| `BOT_SETUP_COMMANDS` | ❌ | `true` | Whether to set up bot commands on startup. |
|
||||
| `BOT_USE_BANNERS` | ❌ | `true` | Whether to use banners in bot messages. |
|
||||
| `BOT_PROXY_URL` | ❌ | — | SOCKS5 proxy URL for Telegram API access. Useful if the server is behind TSPU/DPI. Supports `socks5://` (local DNS) and `socks5h://` (remote DNS). Example: `socks5://user:password@1.2.3.4:1080` |
|
||||
|
||||
---
|
||||
|
||||
## Remnawave
|
||||
|
||||
| Variable | Default | Description |
|
||||
| ---------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||
| `REMNAWAVE_HOST` | `remnawave` | Hostname or Docker service name for connecting to the Remnawave API. Without HTTP/HTTPS and without trailing slash. |
|
||||
| `REMNAWAVE_TOKEN` | — | Remnawave API token. Created in the panel: Settings → API Tokens. |
|
||||
| `REMNAWAVE_WEBHOOK_SECRET` | — | Secret token for verifying webhooks from Remnawave. Must match `WEBHOOK_SECRET_HEADER` in the panel's `.env`. |
|
||||
| `REMNAWAVE_CADDY_TOKEN` | — | Token for authentication via Caddy (optional). |
|
||||
| `REMNAWAVE_COOKIE` | — | Cookie for requests in `key=value` format (optional). |
|
||||
| `REMNAWAVE_CF_CLIENT_ID` | — | Cloudflare Access Client ID (optional). |
|
||||
| `REMNAWAVE_CF_CLIENT_SECRET` | — | Cloudflare Access Client Secret (optional). |
|
||||
| Variable | Required | Default | Description |
|
||||
| ---------------------------- | :------: | ----------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||
| `REMNAWAVE_TOKEN` | ✅ | — | Remnawave API token. Created in the panel: Settings → API Tokens. |
|
||||
| `REMNAWAVE_WEBHOOK_SECRET` | ✅ | — | Secret token for verifying webhooks from Remnawave. Must match `WEBHOOK_SECRET_HEADER` in the panel's `.env`. |
|
||||
| `REMNAWAVE_HOST` | ❌ | `remnawave` | Hostname or Docker service name for connecting to the Remnawave API. Without HTTP/HTTPS and without trailing slash. |
|
||||
| `REMNAWAVE_CADDY_TOKEN` | ❌ | — | Token for authentication via Caddy. |
|
||||
| `REMNAWAVE_COOKIE` | ❌ | — | Cookie for requests in `key=value` format. |
|
||||
| `REMNAWAVE_CF_CLIENT_ID` | ❌ | — | Cloudflare Access Client ID. |
|
||||
| `REMNAWAVE_CF_CLIENT_SECRET` | ❌ | — | Cloudflare Access Client Secret. |
|
||||
|
||||
---
|
||||
|
||||
## Database
|
||||
|
||||
| Variable | Default | Description |
|
||||
| ----------------------- | -------------- | --------------------------------------------------------- |
|
||||
| `DATABASE_PASSWORD` | — | Password for connecting to PostgreSQL. |
|
||||
| `DATABASE_HOST` | `remnashop-db` | Database host. |
|
||||
| `DATABASE_PORT` | `5432` | Database port. |
|
||||
| `DATABASE_NAME` | `remnashop` | Database name. |
|
||||
| `DATABASE_USER` | `remnashop` | Database user. |
|
||||
| `DATABASE_POOL_SIZE` | `30` | Connection pool size. |
|
||||
| `DATABASE_MAX_OVERFLOW` | `30` | Maximum additional connections beyond the pool. |
|
||||
| `DATABASE_POOL_TIMEOUT` | `10` | Timeout for waiting for a connection from the pool (sec). |
|
||||
| `DATABASE_POOL_RECYCLE` | `3600` | Connection lifetime in the pool (sec). |
|
||||
| `DATABASE_ECHO` | `false` | Log SQL queries. |
|
||||
| `DATABASE_ECHO_POOL` | `false` | Log connection pool events. |
|
||||
| Variable | Required | Default | Description |
|
||||
| ----------------------- | :------: | -------------- | --------------------------------------------------------- |
|
||||
| `DATABASE_PASSWORD` | ✅ | — | Password for connecting to PostgreSQL. |
|
||||
| `DATABASE_HOST` | ❌ | `remnashop-db` | Database host. |
|
||||
| `DATABASE_PORT` | ❌ | `5432` | Database port. |
|
||||
| `DATABASE_NAME` | ❌ | `remnashop` | Database name. |
|
||||
| `DATABASE_USER` | ❌ | `remnashop` | Database user. |
|
||||
| `DATABASE_POOL_SIZE` | ❌ | `30` | Connection pool size. |
|
||||
| `DATABASE_MAX_OVERFLOW` | ❌ | `30` | Maximum additional connections beyond the pool. |
|
||||
| `DATABASE_POOL_TIMEOUT` | ❌ | `10` | Timeout for waiting for a connection from the pool (sec). |
|
||||
| `DATABASE_POOL_RECYCLE` | ❌ | `1800` | Connection lifetime in the pool (sec). |
|
||||
| `DATABASE_ECHO` | ❌ | `false` | Log SQL queries. |
|
||||
| `DATABASE_ECHO_POOL` | ❌ | `false` | Log connection pool events. |
|
||||
|
||||
---
|
||||
|
||||
## Redis
|
||||
|
||||
| Variable | Default | Description |
|
||||
| ---------------- | ----------------- | -------------------------- |
|
||||
| `REDIS_HOST` | `remnashop-redis` | Redis host. |
|
||||
| `REDIS_PORT` | `6379` | Redis port. |
|
||||
| `REDIS_NAME` | `0` | Redis database number. |
|
||||
| `REDIS_PASSWORD` | — | Redis password (optional). |
|
||||
| Variable | Required | Default | Description |
|
||||
| ---------------- | :------: | ----------------- | ---------------------- |
|
||||
| `REDIS_HOST` | ❌ | `remnashop-redis` | Redis host. |
|
||||
| `REDIS_PORT` | ❌ | `6379` | Redis port. |
|
||||
| `REDIS_NAME` | ❌ | `0` | Redis database number. |
|
||||
| `REDIS_PASSWORD` | ❌ | — | Redis password. |
|
||||
|
||||
---
|
||||
|
||||
## Logging
|
||||
|
||||
| Variable | Default | Description |
|
||||
| ----------------- | -------- | ----------------------------------------------------------- |
|
||||
| `LOG_TO_FILE` | `true` | Write logs to file. |
|
||||
| `LOG_LEVEL` | `DEBUG` | Log level: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. |
|
||||
| `LOG_ROTATION` | `100MB` | Log file rotation condition. Example: `100MB` or `00:00`. |
|
||||
| `LOG_COMPRESSION` | `zip` | Compression format for archived logs. |
|
||||
| `LOG_RETENTION` | `3 days` | Retention period for archived logs. |
|
||||
| Variable | Required | Default | Description |
|
||||
| ----------------- | :------: | -------- | ----------------------------------------------------------- |
|
||||
| `LOG_TO_FILE` | ❌ | `true` | Write logs to file. |
|
||||
| `LOG_LEVEL` | ❌ | `DEBUG` | Log level: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. |
|
||||
| `LOG_ROTATION` | ❌ | `100MB` | Log file rotation condition. Example: `100MB` or `00:00`. |
|
||||
| `LOG_COMPRESSION` | ❌ | `zip` | Compression format for archived logs. |
|
||||
| `LOG_RETENTION` | ❌ | `3 days` | Retention period for archived logs. |
|
||||
|
||||
@@ -8,7 +8,8 @@ description: "This page lists the hardware and software requirements for running
|
||||
#### Compatible Remnawave Panel versions
|
||||
| Remnashop Version | Remnawave Panel Version |
|
||||
|-------------------|------------------------ |
|
||||
| `0.7.0` | `>= 2.6.0` `<= 2.6.4` |
|
||||
| `0.7.4` | `>= 2.7.0` `< 2.8.0` |
|
||||
| `0.7.0` — `0.7.3` | `>= 2.6.0` `< 2.7.0` |
|
||||
| `0.6.6` | `>= 2.3.2` `<= 2.5.7` |
|
||||
|
||||
---
|
||||
|
||||
@@ -5,6 +5,36 @@ description: "History of changes"
|
||||
|
||||
---
|
||||
|
||||
#### 0.7.4 (April 7, 2026)
|
||||
|
||||
New:
|
||||
- Added support for **Remnawave 2.7.x**
|
||||
- Added **MONTH_ROLLING** traffic reset strategy: traffic resets based on the subscription creation date rather than a fixed calendar day
|
||||
- Added optional **SOCKS5 proxy** support for Telegram API access (configurable via `BOT_PROXY_URL` in env)
|
||||
- Added **Remnawave version compatibility check**: the bot warns if the connected panel version is outdated or unsupported
|
||||
- Added **one-time purchase discount** management: separate personal and one-time discounts per user, with the higher value applied automatically
|
||||
- Added **trial availability toggle** in the user editor
|
||||
- Added **discount type indicator** on subscription screens showing whether the active discount is personal or one-time
|
||||
- Increased maximum length for menu button labels and plan names from **16 to 32 characters**
|
||||
- Improved YooKassa payment creation: added retry logic on connection errors
|
||||
- Added permission checks when changing user roles: preventing self-demotion, protecting the Owner role, and enforcing role hierarchy
|
||||
|
||||
Fixes:
|
||||
- Fixed role hierarchy comparison in admin list: edit access is now correctly calculated based on actor vs. target role
|
||||
- Fixed role deletion button visibility in the Administrators dialog
|
||||
- Fixed subscription statistics: counts now correctly reflect only active (current) subscriptions per user
|
||||
- Fixed trial statistics: now counts distinct users instead of total trial subscriptions
|
||||
- Fixed discount calculation: the effective discount is now the maximum of personal and one-time discounts
|
||||
- Fixed purchase discount reset after a successful payment
|
||||
- Fixed amount formatting in payments
|
||||
- Fixed `/delete_commands` not being called when `setup_commands` is disabled
|
||||
- Fixed update check notification incorrectly triggering in some cases
|
||||
- Fixed Redis connection configuration
|
||||
- Fixed translator leaving blank lines after removing optional placeholders
|
||||
- Transactions in user history are now sorted by creation date (newest first)
|
||||
|
||||
---
|
||||
|
||||
#### 0.7.3 (March 29, 2026)
|
||||
|
||||
Fixes:
|
||||
|
||||
@@ -1,27 +1,66 @@
|
||||
---
|
||||
title: "Ассеты"
|
||||
description: "Настройка баннеров и переводов Remnashop"
|
||||
description: "Настройка баннеров, переводов и логотипа QR-кода Remnashop"
|
||||
---
|
||||
|
||||
## Баннеры
|
||||
|
||||
Бот поддерживает кастомные баннеры для каждой категории страниц и локали: `menu`, `dashboard`, `subscription`, `promocode`, `referral`.
|
||||
Бот поддерживает кастомные баннеры для каждой страницы и локали. Поддерживаемые названия страниц: `menu`, `dashboard`, `subscription`, `promocode`, `referral`, `default`.
|
||||
|
||||
Чтобы установить кастомный баннер, назовите файл в соответствии с целевой страницей и убедитесь, что он использует один из поддерживаемых форматов: `jpg`, `jpeg`, `png`, `gif`, `webp`.
|
||||
Поддерживаемые форматы: `jpg`, `jpeg`, `png`, `gif`, `webp`.
|
||||
|
||||
Баннеры должны быть размещены по пути: `/opt/remnashop/assets/banners/(locale)/`
|
||||
Баннеры должны быть размещены по пути: `/opt/remnashop/assets/banners/`
|
||||
|
||||
Пример: `/opt/remnashop/assets/banners/en/menu.gif`
|
||||
### Порядок поиска баннера
|
||||
|
||||
При загрузке баннера система ищет файл в следующем порядке:
|
||||
|
||||
1. `banners/{locale_пользователя}/{страница}` — страничный баннер для локали пользователя
|
||||
2. `banners/{locale_пользователя}/default` — дефолтный баннер для локали пользователя
|
||||
3. `banners/{locale_по_умолчанию}/{страница}` — страничный баннер для локали по умолчанию
|
||||
4. `banners/{locale_по_умолчанию}/default` — дефолтный баннер для локали по умолчанию
|
||||
5. `banners/default` — глобальный запасной баннер
|
||||
|
||||
### Примеры использования
|
||||
|
||||
- **Одно изображение для всего** — разместите единственный файл `banners/default.jpg`
|
||||
- **Своё изображение для каждой локали** — разместите `banners/{locale}/default.jpg` для каждой локали
|
||||
- **Изображения для каждой страницы** — разместите `banners/{locale}/{страница}.jpg` для каждой страницы и локали
|
||||
|
||||
### Пример структуры файлов
|
||||
|
||||
```
|
||||
banners/
|
||||
├── default.jpg ← глобальный запасной баннер для всех страниц и локалей
|
||||
├── ru/
|
||||
│ ├── default.jpg ← дефолтный баннер для всех страниц в локали ru
|
||||
│ ├── menu.jpg
|
||||
│ └── subscription.jpg
|
||||
└── en/
|
||||
├── default.jpg
|
||||
└── menu.jpg
|
||||
```
|
||||
|
||||
<Warning>
|
||||
Не удаляйте файл `default.jpg` — он необходим для корректной работы бота.
|
||||
Файл `banners/default.jpg` является глобальным запасным баннером и необходим для корректной работы бота. Не удаляйте его.
|
||||
</Warning>
|
||||
|
||||
---
|
||||
|
||||
## Переводы
|
||||
|
||||
Вы можете редактировать любой файл перевода, расположенный по пути: `/opt/remnashop/assets/translations/(locale)/`
|
||||
Файлы переводов находятся по пути: `/opt/remnashop/assets/translations/{locale}/`
|
||||
|
||||
| Файл | Описание |
|
||||
| ------------------- | --------------------------------------------------------- |
|
||||
| `buttons.ftl` | Подписи кнопок |
|
||||
| `messages.ftl` | Сообщения и тексты диалогов |
|
||||
| `notifications.ftl` | Тексты уведомлений |
|
||||
| `events.ftl` | Сообщения, отправляемые по событиям |
|
||||
| `utils.ftl` | Вспомогательные строки (статусы, подписи и т.п.) |
|
||||
| `custom.ftl` | Пользовательские переводы для названий планов, кнопок меню и т.п. |
|
||||
|
||||
Файл `custom.ftl` предназначен для пользовательских ключей — например, переводов названий планов или дополнительных кнопок меню. Добавляйте свои ключи сюда, не изменяя основные файлы.
|
||||
|
||||
После внесения изменений необходимо перезапустить контейнер, чтобы они вступили в силу.
|
||||
|
||||
@@ -33,4 +72,15 @@ description: "Настройка баннеров и переводов Remnasho
|
||||
|
||||
<Warning>
|
||||
В настоящее время сохранение переводов при обновлении бота не поддерживается. При обновлении ваши предыдущие ассеты будут заархивированы по пути: `/opt/remnashop/assets/*.bak`
|
||||
</Warning>
|
||||
</Warning>
|
||||
|
||||
---
|
||||
|
||||
## Логотип QR-кода
|
||||
|
||||
Вы можете добавить кастомный логотип в центр генерируемых QR-кодов приглашений.
|
||||
|
||||
- **Путь:** `assets/logo.png`
|
||||
- **Формат:** PNG, желательно с прозрачным фоном
|
||||
|
||||
Если файл существует, он автоматически будет наложен в центр каждого сгенерированного QR-кода.
|
||||
|
||||
@@ -5,83 +5,84 @@ description: "Описание всех переменных окружения
|
||||
|
||||
## Основные
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
| ------------------- | ------------ | --------------------------------------------------------------------------------------- |
|
||||
| `APP_DOMAIN` | — | Домен бота без HTTP/HTTPS и без завершающего слеша. Используется для вебхуков. |
|
||||
| `APP_CRYPT_KEY` | — | Ключ шифрования конфиденциальных данных в БД. Валидная Base64-строка длиной 44 символа. |
|
||||
| `APP_HOST` | `0.0.0.0` | Адрес, на котором запускается приложение. |
|
||||
| `APP_PORT` | `5000` | Порт приложения. |
|
||||
| `APP_LOCALES` | `ru` | Список поддерживаемых локалей через запятую. Пример: `en, ru` |
|
||||
| `APP_DEFAULT_LOCALE`| `ru` | Локаль по умолчанию. |
|
||||
| `APP_ORIGINS` | — | Список разрешённых CORS-источников через запятую. |
|
||||
| Переменная | Обязательная | По умолчанию | Описание |
|
||||
| -------------------- | :----------: | ------------ | --------------------------------------------------------------------------------------- |
|
||||
| `APP_DOMAIN` | ✅ | — | Домен бота без HTTP/HTTPS и без завершающего слеша. Используется для вебхуков. |
|
||||
| `APP_CRYPT_KEY` | ✅ | — | Ключ шифрования конфиденциальных данных в БД. Валидная Base64-строка длиной 44 символа. |
|
||||
| `APP_HOST` | ❌ | `0.0.0.0` | Адрес, на котором запускается приложение. |
|
||||
| `APP_PORT` | ❌ | `5000` | Порт приложения. |
|
||||
| `APP_LOCALES` | ❌ | `ru` | Список поддерживаемых локалей через запятую. Пример: `en, ru` |
|
||||
| `APP_DEFAULT_LOCALE` | ❌ | `ru` | Локаль по умолчанию. |
|
||||
| `APP_ORIGINS` | ❌ | — | Список разрешённых CORS-источников через запятую. |
|
||||
|
||||
---
|
||||
|
||||
## Бот
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
| ------------------------- | ------------ | ------------------------------------------------------------------------------------------------- |
|
||||
| `BOT_TOKEN` | — | Токен Telegram Bot API. Получите у [@BotFather](https://t.me/BotFather). |
|
||||
| `BOT_SECRET_TOKEN` | — | Секретный токен для верификации вебхуков от Telegram. |
|
||||
| `BOT_OWNER_ID` | — | Telegram ID владельца бота. Предоставляет расширенные права. |
|
||||
| `BOT_SUPPORT_USERNAME` | — | Telegram username аккаунта поддержки для deep-link (без @). |
|
||||
| `BOT_MINI_APP` | `false` | Поведение кнопки «подключить»: `false` — браузер, `true` — WebApp, URL — открыть указанный адрес. |
|
||||
| `BOT_RESET_WEBHOOK` | `false` | Сбрасывать ли вебхук при запуске. |
|
||||
| `BOT_DROP_PENDING_UPDATES`| `false` | Игнорировать ли накопившиеся обновления при запуске. |
|
||||
| `BOT_SETUP_COMMANDS` | `true` | Устанавливать ли команды бота при запуске. |
|
||||
| `BOT_USE_BANNERS` | `true` | Использовать ли баннеры в сообщениях бота. |
|
||||
| Переменная | Обязательная | По умолчанию | Описание |
|
||||
| -------------------------- | :----------: | ------------ | ------------------------------------------------------------------------------------------------- |
|
||||
| `BOT_TOKEN` | ✅ | — | Токен Telegram Bot API. Получите у [@BotFather](https://t.me/BotFather). |
|
||||
| `BOT_SECRET_TOKEN` | ✅ | — | Секретный токен для верификации вебхуков от Telegram. |
|
||||
| `BOT_OWNER_ID` | ✅ | — | Telegram ID владельца бота. Предоставляет расширенные права. |
|
||||
| `BOT_SUPPORT_USERNAME` | ✅ | — | Telegram username аккаунта поддержки для deep-link (без @). |
|
||||
| `BOT_MINI_APP` | ❌ | `false` | Поведение кнопки «подключить»: `false` — браузер, `true` — WebApp, URL — открыть указанный адрес. |
|
||||
| `BOT_RESET_WEBHOOK` | ❌ | `false` | Сбрасывать ли вебхук при запуске. |
|
||||
| `BOT_DROP_PENDING_UPDATES` | ❌ | `false` | Игнорировать ли накопившиеся обновления при запуске. |
|
||||
| `BOT_SETUP_COMMANDS` | ❌ | `true` | Устанавливать ли команды бота при запуске. |
|
||||
| `BOT_USE_BANNERS` | ❌ | `true` | Использовать ли баннеры в сообщениях бота. |
|
||||
| `BOT_PROXY_URL` | ❌ | — | URL SOCKS5-прокси для подключения к Telegram API. Актуально при блокировке через ТСПУ/DPI. Поддерживает `socks5://` (локальный DNS) и `socks5h://` (удалённый DNS). Пример: `socks5://user:password@1.2.3.4:1080` |
|
||||
|
||||
---
|
||||
|
||||
## Remnawave
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
| --------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| `REMNAWAVE_HOST` | `remnawave` | Хост или имя Docker-сервиса для подключения к API Remnawave. Без HTTP/HTTPS и без слеша. |
|
||||
| `REMNAWAVE_TOKEN` | — | API-токен Remnawave. Создаётся в панели: Настройки → API Токены. |
|
||||
| `REMNAWAVE_WEBHOOK_SECRET` | — | Секретный токен для верификации вебхуков от Remnawave. Должен совпадать с `WEBHOOK_SECRET_HEADER` в `.env` панели. |
|
||||
| `REMNAWAVE_CADDY_TOKEN` | — | Токен для аутентификации через Caddy (опционально). |
|
||||
| `REMNAWAVE_COOKIE` | — | Cookie для запросов в формате `key=value` (опционально). |
|
||||
| `REMNAWAVE_CF_CLIENT_ID` | — | Cloudflare Access Client ID (опционально). |
|
||||
| `REMNAWAVE_CF_CLIENT_SECRET`| — | Cloudflare Access Client Secret (опционально). |
|
||||
| Переменная | Обязательная | По умолчанию | Описание |
|
||||
| ---------------------------- | :----------: | ------------ | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| `REMNAWAVE_TOKEN` | ✅ | — | API-токен Remnawave. Создаётся в панели: Настройки → API Токены. |
|
||||
| `REMNAWAVE_WEBHOOK_SECRET` | ✅ | — | Секретный токен для верификации вебхуков от Remnawave. Должен совпадать с `WEBHOOK_SECRET_HEADER` в `.env` панели. |
|
||||
| `REMNAWAVE_HOST` | ❌ | `remnawave` | Хост или имя Docker-сервиса для подключения к API Remnawave. Без HTTP/HTTPS и без слеша. |
|
||||
| `REMNAWAVE_CADDY_TOKEN` | ❌ | — | Токен для аутентификации через Caddy. |
|
||||
| `REMNAWAVE_COOKIE` | ❌ | — | Cookie для запросов в формате `key=value`. |
|
||||
| `REMNAWAVE_CF_CLIENT_ID` | ❌ | — | Cloudflare Access Client ID. |
|
||||
| `REMNAWAVE_CF_CLIENT_SECRET` | ❌ | — | Cloudflare Access Client Secret. |
|
||||
|
||||
---
|
||||
|
||||
## База данных
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
| ----------------------- | -------------- | ---------------------------------------------- |
|
||||
| `DATABASE_PASSWORD` | — | Пароль для подключения к PostgreSQL. |
|
||||
| `DATABASE_HOST` | `remnashop-db` | Хост базы данных. |
|
||||
| `DATABASE_PORT` | `5432` | Порт базы данных. |
|
||||
| `DATABASE_NAME` | `remnashop` | Название базы данных. |
|
||||
| `DATABASE_USER` | `remnashop` | Пользователь базы данных. |
|
||||
| `DATABASE_POOL_SIZE` | `30` | Размер пула соединений. |
|
||||
| `DATABASE_MAX_OVERFLOW` | `30` | Максимум дополнительных соединений сверх пула. |
|
||||
| `DATABASE_POOL_TIMEOUT` | `10` | Таймаут ожидания соединения из пула (сек). |
|
||||
| `DATABASE_POOL_RECYCLE` | `3600` | Время жизни соединения в пуле (сек). |
|
||||
| `DATABASE_ECHO` | `false` | Логировать SQL-запросы. |
|
||||
| `DATABASE_ECHO_POOL` | `false` | Логировать события пула соединений. |
|
||||
| Переменная | Обязательная | По умолчанию | Описание |
|
||||
| ----------------------- | :----------: | -------------- | ---------------------------------------------- |
|
||||
| `DATABASE_PASSWORD` | ✅ | — | Пароль для подключения к PostgreSQL. |
|
||||
| `DATABASE_HOST` | ❌ | `remnashop-db` | Хост базы данных. |
|
||||
| `DATABASE_PORT` | ❌ | `5432` | Порт базы данных. |
|
||||
| `DATABASE_NAME` | ❌ | `remnashop` | Название базы данных. |
|
||||
| `DATABASE_USER` | ❌ | `remnashop` | Пользователь базы данных. |
|
||||
| `DATABASE_POOL_SIZE` | ❌ | `30` | Размер пула соединений. |
|
||||
| `DATABASE_MAX_OVERFLOW` | ❌ | `30` | Максимум дополнительных соединений сверх пула. |
|
||||
| `DATABASE_POOL_TIMEOUT` | ❌ | `10` | Таймаут ожидания соединения из пула (сек). |
|
||||
| `DATABASE_POOL_RECYCLE` | ❌ | `1800` | Время жизни соединения в пуле (сек). |
|
||||
| `DATABASE_ECHO` | ❌ | `false` | Логировать SQL-запросы. |
|
||||
| `DATABASE_ECHO_POOL` | ❌ | `false` | Логировать события пула соединений. |
|
||||
|
||||
---
|
||||
|
||||
## Redis
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
| --------------- | ----------------- | ----------------------------- |
|
||||
| `REDIS_HOST` | `remnashop-redis` | Хост Redis. |
|
||||
| `REDIS_PORT` | `6379` | Порт Redis. |
|
||||
| `REDIS_NAME` | `0` | Номер базы данных Redis. |
|
||||
| `REDIS_PASSWORD`| — | Пароль Redis (опционально). |
|
||||
| Переменная | Обязательная | По умолчанию | Описание |
|
||||
| ---------------- | :----------: | ----------------- | --------------------------- |
|
||||
| `REDIS_HOST` | ❌ | `remnashop-redis` | Хост Redis. |
|
||||
| `REDIS_PORT` | ❌ | `6379` | Порт Redis. |
|
||||
| `REDIS_NAME` | ❌ | `0` | Номер базы данных Redis. |
|
||||
| `REDIS_PASSWORD` | ❌ | — | Пароль Redis. |
|
||||
|
||||
---
|
||||
|
||||
## Логирование
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
| --------------- | ------------ | --------------------------------------------------------------------- |
|
||||
| `LOG_TO_FILE` | `true` | Записывать логи в файл. |
|
||||
| `LOG_LEVEL` | `DEBUG` | Уровень логирования: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. |
|
||||
| `LOG_ROTATION` | `100MB` | Условие ротации лог-файла. Пример: `100MB` или `00:00`. |
|
||||
| `LOG_COMPRESSION`| `zip` | Формат сжатия архивных логов. |
|
||||
| `LOG_RETENTION` | `3 days` | Срок хранения архивных логов. |
|
||||
| Переменная | Обязательная | По умолчанию | Описание |
|
||||
| ----------------- | :----------: | ------------ | --------------------------------------------------------------------- |
|
||||
| `LOG_TO_FILE` | ❌ | `true` | Записывать логи в файл. |
|
||||
| `LOG_LEVEL` | ❌ | `DEBUG` | Уровень логирования: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. |
|
||||
| `LOG_ROTATION` | ❌ | `100MB` | Условие ротации лог-файла. Пример: `100MB` или `00:00`. |
|
||||
| `LOG_COMPRESSION` | ❌ | `zip` | Формат сжатия архивных логов. |
|
||||
| `LOG_RETENTION` | ❌ | `3 days` | Срок хранения архивных логов. |
|
||||
|
||||
@@ -6,10 +6,11 @@ description: "На этой странице перечислены аппара
|
||||
---
|
||||
|
||||
#### Совместимость версий панели Remnawave
|
||||
| Версия Remnashop | Версия панели Remnawave |
|
||||
|------------------|------------------------- |
|
||||
| `0.7.0` | `>= 2.6.0` `<= 2.6.4` |
|
||||
| `0.6.6` | `>= 2.3.2` `<= 2.5.7` |
|
||||
| Версия Remnashop | Версия панели Remnawave |
|
||||
|-------------------|------------------------- |
|
||||
| `0.7.4` | `>= 2.7.0` `< 2.8.0` |
|
||||
| `0.7.0` — `0.7.3` | `>= 2.6.0` `< 2.7.0` |
|
||||
| `0.6.6` | `>= 2.3.2` `<= 2.5.7` |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -5,6 +5,36 @@ description: "История изменений"
|
||||
|
||||
---
|
||||
|
||||
#### 0.7.4 (7 апреля 2026)
|
||||
|
||||
Новое:
|
||||
- Добавлена поддержка **Remnawave 2.7.x**
|
||||
- Добавлена стратегия сброса трафика **MONTH_ROLLING**: трафик сбрасывается по дате создания подписки, а не по фиксированному дню месяца
|
||||
- Добавлена опциональная поддержка **SOCKS5 прокси** для доступа к Telegram API (настраивается через `BOT_PROXY_URL` в env)
|
||||
- Добавлена **проверка совместимости версии Remnawave**: бот предупреждает, если версия подключённой панели устарела или не поддерживается
|
||||
- Добавлено управление **скидкой на покупку**: отдельные личная и одноразовая скидка на пользователя, применяется наибольшая
|
||||
- Добавлена кнопка переключения **доступности пробного периода** в редакторе пользователя
|
||||
- Добавлен **индикатор типа скидки** на экранах подписки: показывает, личная скидка или одноразовая
|
||||
- Увеличена максимальная длина названий кнопок меню и названий планов с **16 до 32 символов**
|
||||
- Улучшено создание платежа в YooKassa: добавлена логика повторных попыток при ошибке соединения
|
||||
- Добавлены проверки прав при изменении роли пользователя: запрет на понижение собственной роли, защита роли Владельца и соблюдение иерархии ролей
|
||||
|
||||
Исправления:
|
||||
- Исправлено сравнение ролей в списке администраторов: доступность редактирования теперь корректно рассчитывается относительно роли актора
|
||||
- Исправлено условие отображения кнопки удаления роли в диалоге Администраторы
|
||||
- Исправлена статистика подписок: учитываются только активные (текущие) подписки пользователей
|
||||
- Исправлена статистика пробных периодов: теперь считаются уникальные пользователи, а не общее число пробных подписок
|
||||
- Исправлен расчёт скидки: применяется максимальная из личной и одноразовой скидок
|
||||
- Исправлен сброс покупочной скидки после успешной оплаты
|
||||
- Исправлено форматирование сумм в платежах
|
||||
- Исправлен вызов `/delete_commands` при отключённом `setup_commands`
|
||||
- Исправлено некорректное срабатывание уведомления о доступном обновлении
|
||||
- Исправлена конфигурация подключения к Redis
|
||||
- Исправлен переводчик: пустые строки после удаления опциональных плейсхолдеров больше не остаются
|
||||
- История транзакций пользователя теперь отсортирована по дате создания (сначала новые)
|
||||
|
||||
---
|
||||
|
||||
#### 0.7.3 (29 марта 2026)
|
||||
|
||||
Исправления:
|
||||
|
||||
Reference in New Issue
Block a user