diff --git a/README.md b/README.md index cd332d8..ded2e5a 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,8 @@ | `BRUTE_FORCE_WINDOW_SECONDS` | Длительность окна, в котором считаются неудачные попытки. | `900` | | `BRUTE_FORCE_LOCK_SECONDS` | Время временной блокировки после превышения лимита. | `1800` | | `MY_DEVICES_SECTION_ENABLED` | Включить раздел «Мои устройства» в меню подписки (`true`/`false`). | `false` | +| `WEBAPP_SESSION_SECRET` | (Опционально) HMAC-секрет для подписи сессий Web App. Если пусто — генерируется при старте, но тогда сессии станут невалидными после перезапуска контейнера. Для прода задайте явно. | `см. раздел «Генерация секретов»` | +| `WEBHOOK_SECRET_TOKEN` | (Опционально) Secret token для проверки подлинности вебхуков Telegram. Если пусто — генерируется при старте. Для прода задайте явно, чтобы значение пережило рестарт. | `см. раздел «Генерация секретов»` | | `REQUIRED_CHANNEL_ID` | (Опционально) ID канала, на который пользователь должен подписаться перед использованием. Оставьте пустым, если проверка не нужна. | `-1001234567890` | | `REQUIRED_CHANNEL_LINK` | (Опционально) Публичная ссылка или invite на канал для кнопки «Проверить подписку». | `https://t.me/your_channel` | @@ -171,13 +173,39 @@ | `TRIAL_TRAFFIC_LIMIT_GB`| Лимит трафика для пробного периода в ГБ. | -3. **Запустите контейнеры:** +3. **Сгенерируйте секреты (рекомендуется):** + + Переменные `WEBAPP_SESSION_SECRET` и `WEBHOOK_SECRET_TOKEN` могут быть пустыми — тогда они автоматически сгенерируются при каждом старте контейнера. Однако в проде это означает, что после рестарта все сессии Web App станут невалидными, а Telegram придётся перерегистрировать webhook. Поэтому для боевого окружения задайте оба значения вручную. + + Сгенерировать криптостойкие значения можно одной из команд: + + ```bash + # вариант 1 — Python (есть в любом окружении с Python 3) + python -c "import secrets; print(secrets.token_urlsafe(32))" + + # вариант 2 — openssl + openssl rand -base64 32 | tr -d '=+/' | cut -c1-43 + + # вариант 3 — /dev/urandom (Linux/macOS) + head -c 32 /dev/urandom | base64 | tr -d '=+/' | cut -c1-43 + ``` + + Запустите команду дважды и подставьте полученные значения в `.env`: + + ```env + WEBAPP_SESSION_SECRET=<первое_значение> + WEBHOOK_SECRET_TOKEN=<второе_значение> + ``` + + > ⚠️ Не используйте одно и то же значение для обеих переменных и не коммитьте `.env` в git. + +4. **Запустите контейнеры:** ```bash docker compose up -d ``` Эта команда скачает образ и запустит сервис в фоновом режиме. -4. **Настройка вебхуков (Обязательно):** +5. **Настройка вебхуков (Обязательно):** Вебхуки являются **обязательным** компонентом для работы бота, так как они используются для получения уведомлений от платежных систем (YooKassa, FreeKassa, CryptoPay, Platega, SeverPay) и панели Remnawave. Вам понадобится обратный прокси (например, Nginx) для обработки HTTPS-трафика и перенаправления запросов на контейнер с ботом. @@ -198,7 +226,7 @@ Web App не должен проксироваться на `WEB_SERVER_PORT`: этот порт оставьте для Telegram, платежных и Remnawave webhooks. -5. **Просмотр логов:** +6. **Просмотр логов:** ```bash docker compose logs -f remnawave-tg-shop ```