Refactor Docker and configuration files for improved structure and functionality

- Updated `.dockerignore` to include additional development and temporary files, enhancing build efficiency.
- Modified `.gitignore` to remove unnecessary entries and streamline ignored files.
- Enhanced `docker-compose.yml` with health checks, resource limits, and improved environment variable handling for better service management.
- Refactored `Dockerfile.bot` to utilize a multi-stage build for optimized image size and security.
- Improved `Makefile` with new commands for deployment, migration, and backup, along with enhanced help documentation.
- Updated `requirements.txt` to include new dependencies for environment variable management.
- Refactored metrics handling in the bot to ensure proper initialization and collection.
This commit is contained in:
2025-08-29 23:15:06 +03:00
parent f097d69dd4
commit 8f338196b7
27 changed files with 1499 additions and 370 deletions

View File

@@ -1,7 +1,7 @@
.PHONY: help build up down logs clean restart status
.PHONY: help build up down logs clean restart status deploy migrate backup
help: ## Показать справку
@echo "🐍 Telegram Bot - Доступные команды (Python 3.9):"
@echo "🐍 Telegram Bot - Доступные команды (Production Ready):"
@echo ""
@echo "🔧 Основные команды:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
@@ -9,11 +9,12 @@ help: ## Показать справку
@echo "📊 Мониторинг:"
@echo " Prometheus: http://localhost:9090"
@echo " Grafana: http://localhost:3000 (admin/admin)"
@echo " Bot Health: http://localhost:8000/health"
build: ## Собрать все контейнеры с Python 3.9
build: ## Собрать все контейнеры
docker-compose build
up: ## Запустить все сервисы с Python 3.9
up: ## Запустить все сервисы
docker-compose up -d
down: ## Остановить все сервисы
@@ -31,51 +32,90 @@ logs-prometheus: ## Показать логи Prometheus
logs-grafana: ## Показать логи Grafana
docker-compose logs -f grafana
restart: ## Перезапустить все сервисы (с пересборкой Python 3.9)
restart: ## Перезапустить все сервисы
docker-compose down
docker-compose build
docker-compose up -d
restart-bot: ## Перезапустить только бота
docker-compose stop telegram-bot
docker-compose build telegram-bot
docker-compose up -d telegram-bot
docker-compose restart telegram-bot
restart-prometheus: ## Перезапустить только Prometheus
docker-compose stop prometheus
docker-compose up -d prometheus
docker-compose restart prometheus
restart-grafana: ## Перезапустить только Grafana
docker-compose stop grafana
docker-compose up -d grafana
docker-compose restart grafana
status: ## Показать статус контейнеров
docker-compose ps
health: ## Проверить здоровье сервисов
@echo "🏥 Checking service health..."
@curl -f http://localhost:8000/health || echo "❌ Bot health check failed"
@curl -f http://localhost:9090/-/healthy || echo "❌ Prometheus health check failed"
@curl -f http://localhost:3000/api/health || echo "❌ Grafana health check failed"
check-python: ## Проверить версию Python в контейнере
@echo "🐍 Проверяю версию Python в контейнере..."
@docker exec telegram-bot .venv/bin/python --version || echo "Контейнер не запущен"
@docker exec telegram-bot python --version || echo "Контейнер не запущен"
test-compatibility: ## Тест совместимости с Python 3.8+
@echo "🐍 Тестирую совместимость с Python 3.8+..."
@python3 test_python38_compatibility.py
deploy: ## Полный деплой на продакшен
@echo "🚀 Starting production deployment..."
@chmod +x scripts/deploy.sh
@./scripts/deploy.sh
clean: ## Очистить все контейнеры и образы Python 3.9
migrate: ## Миграция с systemctl + cron на Docker
@echo "🔄 Starting migration from systemctl to Docker..."
@chmod +x scripts/migrate_from_systemctl.sh
@sudo ./scripts/migrate_from_systemctl.sh
backup: ## Создать backup данных
@echo "💾 Creating backup..."
@mkdir -p backups
@tar -czf "backups/backup-$(date +%Y%m%d-%H%M%S).tar.gz" database/ logs/ .env
@echo "✅ Backup created in backups/"
restore: ## Восстановить из backup (указать файл: make restore FILE=backup.tar.gz)
@echo "🔄 Restoring from backup..."
@if [ -z "$(FILE)" ]; then echo "❌ Please specify backup file: make restore FILE=backup.tar.gz"; exit 1; fi
@tar -xzf "backups/$(FILE)" -C .
@echo "✅ Backup restored"
update: ## Обновить бота (pull latest code and redeploy)
@echo "📥 Pulling latest changes..."
@git pull origin main
@echo "🔨 Rebuilding and restarting..."
@make restart
clean: ## Очистить все контейнеры и образы
docker-compose down -v --rmi all
docker system prune -f
security-scan: ## Сканировать образы на уязвимости
@echo "🔍 Scanning Docker images for vulnerabilities..."
@docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v $(PWD):/workspace \
--workdir /workspace \
anchore/grype:latest \
telegram-helper-bot_telegram-bot:latest || echo "⚠️ Grype not available, skipping scan"
monitoring: ## Открыть мониторинг в браузере
@echo "📊 Opening monitoring dashboards..."
@open http://localhost:3000 || xdg-open http://localhost:3000 || echo "Please open manually: http://localhost:3000"
start: build up ## Собрать и запустить все сервисы с Python 3.9
@echo "🐍 Python 3.9 контейнер собран и запущен!"
start: build up ## Собрать и запустить все сервисы
@echo "🐍 Telegram Bot запущен!"
@echo "📊 Prometheus: http://localhost:9090"
@echo "📈 Grafana: http://localhost:3000 (admin/admin)"
@echo "🤖 Бот запущен в контейнере с Python 3.9"
@echo "🤖 Bot Health: http://localhost:8000/health"
@echo "📝 Логи: make logs"
start-script: ## Запустить через скрипт start_docker.sh
@echo "🐍 Запуск через скрипт start_docker.sh..."
@./start_docker.sh
stop: down ## Остановить все сервисы
@echo "🛑 Все сервисы остановлены"
test: ## Запустить все тесты
@echo "🧪 Запускаю все тесты..."
@docker-compose run --rm telegram-bot sh -c "pip install --no-cache-dir -r requirements-dev.txt && pytest"
test-coverage: ## Запустить все тесты с покрытием
@echo "🧪 Запускаю все тесты с покрытием..."
@docker-compose run --rm telegram-bot sh -c "pip install --no-cache-dir -r requirements-dev.txt && pytest --cov=helper_bot --cov-report=term-missing"