# AutoRia Telegram Bot — Docker

Запуск бота в контейнере. Команды ниже выполняйте из **корня репозитория** (рядом с `docker-compose.yml`).

## Требования

- Docker 20.10+
- Docker Compose 2.0+ (или `docker compose`)
- Рекомендуется **не меньше ~2 GB RAM** для одного процесса Chrome при парсинге
- Доступ в интернет

## Быстрый старт

### 1. Переменные окружения

```bash
cp env.example .env
```

В `.env` обязательно задайте:

| Переменная | Описание |
|------------|----------|
| `BOT_TOKEN` | Токен бота от [@BotFather](https://t.me/BotFather) (вид `123456789:AA...`) |
| `TOKEN_PHONE` | Данные для TurboSMS HTTP API (см. ниже) |

Опционально вместо `BOT_TOKEN` можно использовать `TELEGRAM_BOT_TOKEN` (нормализация в `config.py`).

### 2. TurboSMS (`TOKEN_PHONE`)

API ожидает заголовок `Authorization: Basic <base64(логин:пароль)>`, где **логин и пароль** берутся в [кабинете TurboSMS](https://turbosms.ua) в разделе подключения к шлюзу / **HTTP API** (не пароль от входа на сайт).

В `.env` допустимо **два формата**:

1. **Пара в открытом виде** (удобно для Docker):  
   `TOKEN_PHONE=мій_логін:пароль_шлюзу`  
   В коде она кодируется в Base64 автоматически.

2. **Уже готовая Base64-строка** (как в документации TurboSMS):  
   `TOKEN_PHONE=dGVzdDp0ZXN0`

Успешный ответ API: в JSON `response_code: 0`. Код **301 / `INVALID_TOKEN`** означает неверные учётные данные или отключённый HTTP API.

### 3. Каталоги на хосте

```bash
mkdir -p logs temp
```

### 4. Сборка и запуск

```bash
docker-compose build
docker-compose up -d
docker-compose logs -f autoria-bot
```

Имя сервиса в `docker-compose.yml`: `autoria-bot`; контейнер: `autoria_telegram_bot`.

## Переменные окружения (обзор)

Полный список с комментариями — в **`env.example`**. Важное:

| Переменная | Описание |
|------------|----------|
| `DATABASE_URL` | В образе по умолчанию задаётся в `docker-compose.yml`: `sqlite+aiosqlite:////app/data/database.db` |
| `CHROME_HEADLESS` | `true` / `false` — в Docker обычно `true` (`--headless=new`) |
| `PARSING_START_SMS_TEST_ENABLED` | `true` — при каждом «Запуск» парсинга уходит одна тестовая SMS на номер из следующей строки (по умолчанию выключено) |
| `PARSING_START_SMS_TEST_NUMBER` | Номер для тестовой SMS, если включено |
| `PARSING_DELAY`, `MAX_PARSING_LIMIT` | Заданы в примере; **интервалы между объявлениями в коде** сейчас **3–5 мин** и **10–15 мин** между итерациями парсинга (не из `PARSING_DELAY`) |

## Тома (volumes)

Фрагмент из актуального `docker-compose.yml`:

```yaml
volumes:
  - autoria_database:/app/data   # SQLite: database.db внутри тома
  - ./logs:/app/logs
  - ./temp:/app/temp
```

Именованный том `autoria_database` нужен, чтобы при монтировании с хоста не получить «каталог вместо файла» и не сломать SQLite.

**Резервная копия БД:**

```bash
docker volume ls   # найти том, например project_autoria_database
docker run --rm -v ИМЯ_ТОМА:/data -v "$PWD":/backup alpine \
  cp /data/database.db /backup/database.db.backup
```

**Просмотр БД в контейнере:**

```bash
docker exec -it autoria_telegram_bot ls -la /app/data
```

## Поведение парсинга и SMS

- Одновременно выполняется **не больше одного** сеанса парсинга (один Chrome на процесс бота). Второй пользователь получит сообщение, что парсинг занят.
- Ответ TurboSMS проверяется по **`response_code`** в JSON (HTTP 200 при ошибке токена возможен).
- Повторная отправка на номер блокируется записями в `sent_phones` с `is_successful=1` (см. `doc/SMS_MONITORING_GUIDE.md` и логи при ложных «успехах» после старых версий).

## Управление контейнером

```bash
docker-compose up -d
docker-compose down
docker-compose restart
docker-compose ps
docker-compose logs -f autoria-bot
docker-compose logs --tail=100 autoria-bot
docker stats autoria_telegram_bot
docker exec -it autoria_telegram_bot bash
```

## Диагностика

```bash
# Healthcheck из compose
docker exec autoria_telegram_bot python -c "import requests; print(requests.get('https://api.telegram.org', timeout=10).status_code)"

# Chrome / ChromeDriver (в образе — google-chrome-stable)
docker exec autoria_telegram_bot google-chrome --version
docker exec autoria_telegram_bot chromedriver --version
```

Скрипт на хосте Linux (симлинки snap и т.д.): **`bash doc/scripts/CHECK_CHROME_DETAILED.sh`**.

### Типичные проблемы

1. **Бот падает при старте** — проверьте `BOT_TOKEN`, логи: `docker-compose logs autoria-bot`.
2. **`INVALID_TOKEN` в логах TurboSMS** — исправьте `TOKEN_PHONE` (формат выше), включите HTTP API в кабинете.
3. **Chrome / OOM / обрывы сессии** — мало RAM; увеличьте память контейнера или swap на хосте.
4. **SMS не уходят на старые номера** — в БД уже стоит успешная отправка; см. раздел про `sent_phones` и `doc/SMS_MONITORING_GUIDE.md`.

## Разработка и обновление

```bash
docker-compose build --no-cache
docker-compose up --build -d
docker-compose run --rm autoria-bot bash
```

Обновление версии: `docker-compose down` → `git pull` → `docker-compose up --build -d`.

## Безопасность

- Не коммитьте `.env` с реальными токенами.
- Ограничивайте доступ к серверу (firewall, SSH-ключи).

## Прочее

Лимиты CPU/RAM в старых `docker-compose` без ключа `deploy` задаются на стороне Docker / хоста или через актуальный синтаксис вашей версии Compose.

Полный список документов — **[doc/README.md](README.md)**.
