# English Bot - Metrics Dashboard Приложение для отслеживания переходов в Telegram бота и канал. ## Структура проекта ``` eng-bot/ ├── backend/ # Django API + Dashboard ├── frontend/ # Nuxt.js фронтенд ├── docker-compose.yml ├── nginx.conf # Внутренний nginx (роутинг между сервисами) └── nginx.external.example.conf # Пример внешнего nginx ``` ## Быстрый старт ```bash # Сборка и запуск docker compose up -d --build # Просмотр логов docker compose logs -f # Остановка docker compose down ``` ## URL-адреса приложения ### Локальная разработка (порт 3001) | URL | Описание | |-----|----------| | `http://localhost:3001/` | Главная страница (Nuxt фронтенд) | | `http://localhost:3001/stats/` | Дашборд статистики (Django) | | `http://localhost:3001/admin/` | Django Admin панель | ### API Endpoints | Метод | URL | Описание | |-------|-----|----------| | `POST` | `/api/track/bot/` | Отслеживание перехода в бота | | `POST` | `/api/track/channel/` | Отслеживание перехода в канал | ### Примеры запросов ```bash # Трекинг перехода в бота curl -X POST http://localhost:3001/api/track/bot/ # Трекинг перехода в канал curl -X POST http://localhost:3001/api/track/channel/ ``` ## Архитектура ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Клиент │────▶│ Nginx │────▶│ Frontend │ │ │ │ :3001 │ │ (Nuxt) │ └─────────────┘ └──────┬──────┘ └─────────────┘ │ │ /api/*, /stats/, /admin/, /static/ ▼ ┌─────────────┐ │ Backend │ │ (Django) │ └─────────────┘ ``` ## Конфигурация ### Переменные окружения **Backend:** - `DEBUG` - режим отладки (по умолчанию `False` в docker) - `DATA_DIR` - путь к данным/БД (по умолчанию `/app/data`) **Frontend:** - `NUXT_PUBLIC_API_BASE` - базовый URL API (по умолчанию `http://localhost:3001`) ### Порты | Сервис | Внутренний порт | Внешний порт | |--------|-----------------|--------------| | Nginx | 80 | 3001 | | Frontend | 3000 | - | | Backend | 8000 | - | ## Продакшен ### Внешний Nginx Для продакшена используйте `nginx.external.example.conf` как основу: ```bash # Скопировать конфиг sudo cp nginx.external.example.conf /etc/nginx/sites-available/eng-bot.conf # Отредактировать домен sudo nano /etc/nginx/sites-available/eng-bot.conf # Включить сайт sudo ln -s /etc/nginx/sites-available/eng-bot.conf /etc/nginx/sites-enabled/ # Получить SSL сертификат sudo certbot --nginx -d your-domain.com # Перезапустить nginx sudo systemctl reload nginx ``` ### Защита /stats/ Рекомендуется закрыть доступ к статистике. Варианты: 1. **По IP** - раскомментируйте блок с `allow/deny` в nginx.external.example.conf 2. **Basic Auth** - раскомментируйте блок с `auth_basic` Создание пароля для Basic Auth: ```bash sudo htpasswd -c /etc/nginx/.htpasswd admin ``` ## Разработка ### Локальный запуск без Docker **Backend:** ```bash cd backend python -m venv venv source venv/bin/activate pip install -r requirements.txt python manage.py migrate python manage.py runserver 8000 ``` **Frontend:** ```bash cd frontend npm install npm run dev ``` ## База данных SQLite база хранится в Docker volume `backend-data` по пути `/app/data/db.sqlite3`. ```bash # Бэкап БД docker compose exec backend cat /app/data/db.sqlite3 > backup.sqlite3 # Создание суперпользователя Django docker compose exec backend python manage.py createsuperuser ```