add dockerfile

This commit is contained in:
Maxim
2025-12-11 20:22:16 +03:00
parent 87f3d0a36c
commit e50b183d07
4 changed files with 205 additions and 0 deletions

10
.dockerignore Normal file
View File

@@ -0,0 +1,10 @@
venv/
__pycache__/
*.pyc
*.pyo
.git/
.gitignore
.claude/
*.md
.env
*.sqlite3

171
API.md Normal file
View File

@@ -0,0 +1,171 @@
# API документация eng_bot_metrics
## Базовый URL
```
http://localhost:8000
```
---
## Эндпоинты
### 1. Дашборд статистики
```
GET /
```
**Описание:** Главная страница с визуальной статистикой кликов.
**Отображает:**
- Общее количество переходов в бота и канал
- Статистика за сегодня
- Статистика за последнюю неделю
- График переходов за последние 30 дней
- Последние 20 событий
**Ответ:** HTML страница
---
### 2. Трекинг перехода в бота
```
POST /api/track/bot/
```
**Описание:** Записывает событие перехода пользователя в Telegram бота.
**Метод:** `POST`
**Заголовки:**
```
Content-Type: application/json
```
**Тело запроса:** Не требуется (можно отправить пустой POST)
**Автоматически сохраняет:**
- IP адрес пользователя
- User-Agent браузера
- Referrer (откуда пришёл пользователь)
- Временная метка
**Успешный ответ:**
```json
{
"status": "ok",
"event": "bot"
}
```
**Пример использования (JavaScript):**
```javascript
fetch('/api/track/bot/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
```
**Пример использования (curl):**
```bash
curl -X POST http://localhost:8000/api/track/bot/
```
---
### 3. Трекинг перехода в канал
```
POST /api/track/channel/
```
**Описание:** Записывает событие перехода пользователя в Telegram канал.
**Метод:** `POST`
**Заголовки:**
```
Content-Type: application/json
```
**Тело запроса:** Не требуется (можно отправить пустой POST)
**Автоматически сохраняет:**
- IP адрес пользователя
- User-Agent браузера
- Referrer (откуда пришёл пользователь)
- Временная метка
**Успешный ответ:**
```json
{
"status": "ok",
"event": "channel"
}
```
**Пример использования (JavaScript):**
```javascript
fetch('/api/track/channel/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
```
**Пример использования (curl):**
```bash
curl -X POST http://localhost:8000/api/track/channel/
```
---
### 4. Админ-панель Django
```
GET /admin/
```
**Описание:** Стандартная админ-панель Django для управления данными.
**Требует:** Авторизация суперпользователя
**Создание суперпользователя:**
```bash
./deploy.sh createsuperuser
```
---
## Пример интеграции на лендинге
```html
<a href="https://t.me/your_bot" onclick="trackBot()">Перейти в бота</a>
<a href="https://t.me/your_channel" onclick="trackChannel()">Перейти в канал</a>
<script>
function trackBot() {
fetch('/api/track/bot/', { method: 'POST' });
}
function trackChannel() {
fetch('/api/track/channel/', { method: 'POST' });
}
</script>
```
---
## Сводная таблица
| URL | Метод | Описание |
|-----|-------|----------|
| `/` | GET | Дашборд со статистикой |
| `/api/track/bot/` | POST | Трекинг клика по боту |
| `/api/track/channel/` | POST | Трекинг клика по каналу |
| `/admin/` | GET | Админ-панель Django |

20
Dockerfile Normal file
View File

@@ -0,0 +1,20 @@
FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python manage.py collectstatic --noinput 2>/dev/null || true
EXPOSE 8000
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "eng_bot_metrics.wsgi:application"]

4
requirements.txt Normal file
View File

@@ -0,0 +1,4 @@
Django==6.0
asgiref==3.11.0
sqlparse==0.5.4
gunicorn==23.0.0