0944175807f44c51ab613fc9075fed7a3141297c
- Updated CI workflow to provide clearer notifications on test results and deployment readiness. - Added a new job in the deployment workflow to check the status of the last CI run before proceeding with deployment, ensuring that only successful builds are deployed.
Production Environment
Проект для управления ботами и мониторинга инфраструктуры.
Структура проекта
prod/
├── bots/ # Боты и их конфигурации
├── infra/ # Инфраструктура
│ ├── grafana/ # Дашборды Grafana
│ ├── monitoring/ # Модуль мониторинга сервера
│ └── prometheus/ # Конфигурация Prometheus
├── scripts/ # Скрипты развертывания
├── docker-compose.yml # Docker Compose конфигурация
├── env.template # Шаблон переменных окружения
└── README.md # Этот файл
🚀 Быстрый запуск
1. Настройка переменных окружения
Скопируйте шаблон и настройте переменные:
cp env.template .env
Отредактируйте .env файл, добавив реальные значения:
# Telegram Bot Configuration
TELEGRAM_MONITORING_BOT_TOKEN=your_bot_token_here
GROUP_MONITORING_FOR_LOGS=your_telegram_group_id_here
IMPORTANT_MONITORING_LOGS=your_important_logs_channel_id_here
# Monitoring Configuration
THRESHOLD=80.0
RECOVERY_THRESHOLD=75.0
# Prometheus Configuration
PROMETHEUS_RETENTION_DAYS=30
# Grafana Configuration
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=admin
2. Запуск всех сервисов
docker-compose up -d
2.1 Запуск только основного бота (с зависимостями). Можно заменить на AnonBot
docker-compose up -d prometheus telegram-bot
3. Проверка статуса
docker-compose ps
4. Перезапуск контейнера
docker-compose down telegram-bot && docker-compose build --no-cache telegram-bot && docker-compose up -d telegram-bot
📊 Сервисы
- Prometheus (порт 9090) - сбор метрик
- Grafana (порт 3000) - дашборды
- Server Monitor - мониторинг системы + Telegram уведомления
🌐 Доступные адреса и порты
📊 Основные сервисы мониторинга
| Сервис | Порт | Адрес | Описание |
|---|---|---|---|
| Grafana | 3000 | http://localhost:3000 | Дашборды мониторинга (admin/admin) |
| Prometheus | 9090 | http://localhost:9090 | API метрик и веб-интерфейс |
| Server Monitor | 9091 | http://localhost:9091/health | Проверка состояния мониторинга |
| Server Monitor Metrics | 9091 | http://localhost:9091/metrics | Endpoint для Prometheus |
🤖 Telegram Bot сервисы
| Сервис | Порт | Адрес | Описание |
|---|---|---|---|
| Telegram Bot Health | 8080 | http://localhost:8080/health | Health check бота |
| Telegram Bot Metrics | 8080 | http://localhost:8080/metrics | Метрики бота (если включены) |
🔍 Детальная информация о портах
Порт 3000 - Grafana
- Контейнер:
bots_grafana - Назначение: Веб-интерфейс для просмотра дашбордов мониторинга
- Доступ: Публичный (проброс из контейнера)
- Аутентификация: admin/admin (по умолчанию)
Порт 9090 - Prometheus
- Контейнер:
bots_prometheus - Назначение: Сбор и хранение метрик, API для запросов
- Доступ: Публичный (проброс из контейнера)
- Функции:
- Сбор метрик с telegram-bot (порт 8080)
- Сбор метрик с anon-bot (порт 8081)
- Сбор метрик с node_exporter (порт 9100)
- Хранение исторических данных
Порт 8080 - Telegram Bot
- Контейнер:
bots_telegram_bot - Назначение: Основной функционал Telegram бота
- Доступ: Публичный (проброс из контейнера)
- Функции:
- Health check endpoint
- Метрики производительности (если включены)
- API для управления ботом
🌐 Сетевые настройки
- Основная сеть:
bots_network(192.168.100.0/24) - Все сервисы: Работают в одной Docker сети для взаимодействия
- Внешний доступ: Только порты 3000, 8080, 9090
- Внутренние порты: 9091 доступен только внутри Docker сети
🔧 Модуль мониторинга
Модуль автоматически:
- Собирает метрики CPU, RAM, диска каждые 30 секунд
- Отправляет статусы каждые 30 минут в Telegram
- Отправляет алерты при превышении пороговых значений
- Интегрирован с Prometheus/Grafana
📈 Собираемые метрики
- CPU: использование, load average (1m, 5m, 15m)
- RAM: использование оперативной памяти
- Disk: использование диска, I/O активность
- Swap: использование swap
- System: uptime системы и мониторинга
📝 Логи
# Все сервисы
docker-compose logs
# Только мониторинг
# Prometheus
docker logs bots_prometheus
# Grafana
docker logs bots_grafana
🔍 Проверка статуса
Автоматическая проверка
python3 check_grafana.py
Ручная проверка
# Проверка метрик
curl http://localhost:9091/metrics
# Проверка Prometheus targets
curl http://localhost:9090/api/v1/targets
# Проверка Grafana
curl http://localhost:3000/api/health
🛑 Остановка
docker-compose down
🛠️ Управление через Makefile
В корневой директории доступен Makefile с удобными командами для управления инфраструктурой:
🚀 Основные команды
make help # Показать справку по всем командам
make start # Собрать и запустить все сервисы
make stop # Остановить все сервисы
make restart # Перезапустить все сервисы
make status # Показать статус контейнеров
make health # Проверить здоровье всех сервисов
📊 Мониторинг и логи
make logs # Логи всех сервисов
make logs-bot # Логи Telegram бота
make logs-errors # Только ошибки из логов
make monitoring # Открыть Grafana в браузере
make prometheus # Открыть Prometheus в браузере
🔧 Управление отдельными сервисами
make restart-grafana # Перезапустить только Grafana
make restart-prometheus # Перезапустить только Prometheus
make restart-bot # Перезапустить только Telegram бота
🧹 Обслуживание
make backup # Создать backup конфигурации
make restore FILE=... # Восстановить из backup
make clean # Очистить все контейнеры и образы
make clean-monitoring # Очистить только данные мониторинга
make check-ports # Проверить занятые порты
🔍 Диагностика
make metrics # Показать текущие метрики
make check-grafana # Проверить состояние Grafana
make test # Запустить все тесты в проекте (инфраструктура + бот)
make test-infra # Запустить тесты инфраструктуры (мониторинг)
make test-bot # Запустить тесты Telegram бота (201 тест)
make test-coverage # Запустить все тесты с отчетом о покрытии
make test-clean # Очистить все файлы тестирования и отчеты
make reload-prometheus # Перезагрузить конфигурацию Prometheus
make reload-grafana # Перезагрузить конфигурацию Grafana
## 🧪 Тестирование
Проект включает в себя комплексную систему тестирования для всех компонентов:
### 📁 Структура тестов
``` text
tests/
├── __init__.py # Инициализация корневой директории тестов
├── pytest.ini # Конфигурация pytest для всего проекта
├── test_pytest_config.py # Тест конфигурации pytest
└── infra/ # Тесты инфраструктуры
├── __init__.py
└── test_infra.py # Тесты модулей мониторинга
📊 Тесты инфраструктуры (make test-infra)
- Расположение:
tests/infra/test_infra.py - Количество тестов: 7 тестов
- Покрытие: Основные модули мониторинга
- Проверяет:
- Импорт всех модулей
- Создание экземпляров классов
- Структуру системной информации
- Структуру метрик
🤖 Тесты Telegram бота (make test-bot)
- Расположение:
bots/telegram-helper-bot/tests/(отдельная директория) - Количество тестов: 201 тест
- Покрытие: Все основные компоненты бота
- Проверяет:
- База данных и операции с ней
- Обработчики сообщений (admin, group, private)
- Клавиатуры и фильтры
- Утилиты и вспомогательные функции
- Автоматическое разбанивание пользователей
- Интеграционные тесты
🚀 Запуск всех тестов (make test)
Команда make test последовательно запускает:
- Тесты инфраструктуры
- Тесты Telegram бота
- Выводит общую статистику
📊 Анализ покрытия тестами (make test-coverage)
Команда make test-coverage запускает все тесты с детальным анализом покрытия:
- Тесты инфраструктуры с покрытием модулей мониторинга
- Тесты Telegram бота с покрытием всех компонентов
- HTML отчеты сохраняются в
htmlcov/для детального анализа
🧹 Очистка тестовых файлов (make test-clean)
Команда make test-clean удаляет все файлы, созданные в процессе тестирования:
- Кэш pytest (
.pytest_cache/) - Отчеты о покрытии (
htmlcov/,.coverage) - Скомпилированные Python файлы (
*.pyc,__pycache__) - Временные файлы тестирования
⚙️ Конфигурация pytest
Проект использует централизованную конфигурацию pytest (pytest.ini):
- Автоматическое обнаружение: тесты в директории
tests/ - Настройки asyncio: автоматический режим для асинхронных тестов
- Маркеры:
slow,integration,unitдля категоризации тестов - Форматирование: краткий вывод ошибок, отключение предупреждений
Description
Languages
Makefile
38%
Python
29.1%
Shell
24.8%
Jinja
4.9%
Dockerfile
3.2%