From b1eed5605c98b091c11c264d204ab5022dc33342 Mon Sep 17 00:00:00 2001 From: AVS Date: Wed, 5 Aug 2026 17:39:24 +0500 Subject: [PATCH] Fix README: use 'docker-compose up -d' to disable admin panel (restart does not reload .env); add endpoints/env reference --- README.md | 60 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 875f9fe..87ac405 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ - Множество приложений с индивидуальными токенами - Каждое приложение привязывается к своему боту Telegram -- Веб-интерфейс для управления приложениями +- Веб-интерфейс для управления приложениями (админ-панель) +- Логирование с ротацией +- Экспорт/импорт настроек - Docker для простого развертывания ## Быстрый старт (Docker) @@ -17,11 +19,12 @@ cp .env.example .env docker-compose up -d ``` -Откройте `http://localhost:8880/adtn` для управления приложениями (требуется `ADMIN_PANEL_ENABLED=true`). +После запуска админ-панель доступна на `http://localhost:8880/adtn` (при `ADMIN_PANEL_ENABLED=true`). ## Управление админ-панелью По умолчанию админ-панель **отключена** (`ADMIN_PANEL_ENABLED=false`). +Включение/отключение управляется флагом `ADMIN_PANEL_ENABLED` в `.env`. **Включить для настройки:** ```bash @@ -33,9 +36,26 @@ docker-compose up -d **Выключить после настройки:** ```bash # В .env вернуть ADMIN_PANEL_ENABLED=false -docker-compose restart tnproxy +docker-compose up -d ``` -Админ-панель вернёт 404. API `/send` и `/health` продолжают работать. + +> **Важно:** используйте именно `docker-compose up -d`, а НЕ `docker-compose restart`. +> `restart` не пересоздаёт контейнер и не перечитывает `.env` — в контейнере останется +> прежнее значение флага, и админ-панель продолжит работать даже после изменения файла. +> `docker-compose up -d` пересоздаёт контейнер с новыми переменными окружения. + +Когда админ-панель отключена, `/adtn`, `/logtn` и прочие админ-маршруты не регистрируются +и возвращают 404. API `/send` и `/health` продолжают работать. + +## Вход в админ-панель + +Логин-страница: `/logtn`. Учётные данные по умолчанию создаются автоматически при первом +запуске (см. `AdminUser.create_default` в `models.py`). После входа откроется дашборд `/adtn`. + +Защита: +- Ограничение доступа по IP через `ALLOWED_ADMIN_IPS` (список через запятую; пусто = все). +- Отдельная сессионная подпись `ADMIN_SESSION_SECRET` (рекомендуется задать своё значение). +- Уведомления об успешном/неудачном входе на email (если настроен SMTP). ## Использование @@ -62,28 +82,54 @@ Content-Type: application/json ```powershell $body = @{text = "Alert!"} | ConvertTo-Json -Invoke-RestMethod -Uri "http://localhost:8080/send" -Method Post -Body $body -Headers @{ +Invoke-RestMethod -Uri "http://localhost:8880/send" -Method Post -Body $body -Headers @{ "Content-Type" = "application/json" "X-App-Token" = "YOUR_APP_TOKEN" } ``` +> Порт в примере — `8880` (маппинг Docker `8880:8080`). Без Docker сервер по умолчанию +> слушает порт `8080` (переменная `SERVER_PORT`). + ## API Endpoints | Method | Path | Description | |--------|------|-------------| | POST | /send | Отправить сообщение | | GET | /health | Проверка здоровья | -| GET | /adtn | Веб-интерфейс | +| GET | /adtn | Дашборд админ-панели (только админ) | +| GET | /logtn | Страница входа | +| POST | /logtn | Вход | +| POST | /logout | Выход | | POST | /adtn/applications | Создать приложение | | DELETE | /adtn/applications/{id} | Удалить приложение | | POST | /adtn/applications/{id}/toggle | Включить/отключить | +| GET | /adtn/logs | Логи (управление ротацией) | +| POST | /adtn/logs | Обновить настройки логов | +| GET | /adtn/password | Смена пароля | +| GET | /adtn/export | Экспорт настроек (JSON) | +| POST | /adtn/import | Импорт настроек (JSON) | +| GET | /adtn/api | Справка по API | + +## Переменные окружения (`.env`) + +| Переменная | По умолчанию | Описание | +|-----------|-------------|----------| +| `SECRET_KEY` | `change-me-in-production` | Секретный ключ приложения | +| `ADMIN_SESSION_SECRET` | = `SECRET_KEY` | Подпись сессий админ-панели | +| `ADMIN_PANEL_ENABLED` | `false` | Включить админ-панель | +| `ALLOWED_ADMIN_IPS` | пусто (все) | IP-адреса, разделённые запятыми | +| `DATABASE_URL` | `sqlite:///data/tnproxy.db` | URL базы данных | +| `LOG_DIR` | `/app/logs` | Каталог логов | +| `LOG_LEVEL` | `INFO` | Уровень логирования | +| `LOG_ROTATE_MAX_BYTES` / `LOG_ROTATE_BACKUP_COUNT` | `10485760` / `5` | Ротация логов | +| `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`, `SMTP_FROM`, `SMTP_TO` | — | Email-уведомления | ## Структура проекта ``` . -├── config.py # Конфигурация +├── config.py # Конфигурация (чтение .env / переменных окружения) ├── server.py # FastAPI сервер ├── models.py # Модели SQLAlchemy ├── database.py # База данных