# Makefile для SalvageDB Telegram Bot .PHONY: help build up down restart logs shell clean test health # Переменные COMPOSE_FILE = docker-compose.yml SERVICE_NAME = salvagedb-bot CONTAINER_NAME = salvagedb-telegram-bot # Помощь help: ## Показать доступные команды @echo "SalvageDB Telegram Bot - Docker Commands" @echo "========================================" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' # Основные команды build: ## Собрать Docker образ @echo "🔨 Building Docker image..." docker-compose build --no-cache up: ## Запустить контейнер @echo "🚀 Starting container..." docker-compose up -d down: ## Остановить контейнер @echo "🛑 Stopping container..." docker-compose down restart: ## Перезапустить контейнер @echo "🔄 Restarting container..." docker-compose restart # Логи и мониторинг logs: ## Показать логи в реальном времени @echo "📋 Following logs..." docker-compose logs -f $(SERVICE_NAME) logs-tail: ## Показать последние 100 строк логов @echo "📋 Last 100 log lines..." docker-compose logs --tail=100 $(SERVICE_NAME) health: ## Проверить здоровье контейнера @echo "🏥 Checking container health..." docker inspect --format='{{.State.Health.Status}}' $(CONTAINER_NAME) || echo "Health check not available" status: ## Показать статус контейнера @echo "📊 Container status:" docker-compose ps stats: ## Показать статистику ресурсов @echo "📈 Resource usage:" docker stats $(CONTAINER_NAME) --no-stream # Разработка shell: ## Подключиться к контейнеру @echo "🐚 Opening shell in container..." docker-compose exec $(SERVICE_NAME) bash shell-root: ## Подключиться как root @echo "🔑 Opening root shell in container..." docker-compose exec --user root $(SERVICE_NAME) bash # Тестирование test-env: ## Проверить переменные окружения @echo "🔍 Checking environment variables..." docker-compose exec $(SERVICE_NAME) python -c "import os; [print(f'{k}={v[:20]}{"..." if len(v) > 20 else ""}') for k, v in sorted(os.environ.items()) if any(x in k.upper() for x in ['BOT', 'DB', 'PRICE', 'ADMIN', 'DEBUG'])]" test-db: ## Тестировать подключение к БД @echo "🗄️ Testing database connection..." docker-compose exec $(SERVICE_NAME) python -c "import oracledb, os; conn = oracledb.connect(user=os.getenv('DB_USER'), password=os.getenv('DB_PASSWORD'), dsn=os.getenv('DB_DSN')); print('✅ Database connection successful!'); conn.close()" test-bot: ## Проверить импорты бота @echo "🤖 Testing bot imports..." docker-compose exec $(SERVICE_NAME) python -c "import aiogram, oracledb, asyncio, logging; print('✅ All imports successful!')" test-all: test-env test-db test-bot ## Запустить все тесты # Обслуживание clean: ## Удалить контейнеры и volumes @echo "🧹 Cleaning up..." docker-compose down -v docker system prune -f clean-images: ## Удалить неиспользуемые образы @echo "🗑️ Removing unused images..." docker image prune -f clean-all: clean clean-images ## Полная очистка # Бэкап и восстановление backup-logs: ## Создать архив логов @echo "💾 Creating logs backup..." tar -czf logs_backup_$(shell date +%Y%m%d_%H%M%S).tar.gz logs/ backup-env: ## Создать бэкап переменных окружения @echo "🔐 Creating environment backup..." cp .env .env.backup.$(shell date +%Y%m%d_%H%M%S) # Деплой deploy: build up ## Полный деплой (сборка + запуск) @echo "🚀 Deployment complete!" @make health redeploy: down build up ## Переделой (остановка + сборка + запуск) @echo "🔄 Redeployment complete!" @make health # Мониторинг monitor: ## Мониторинг в реальном времени @echo "📊 Starting monitoring (Ctrl+C to stop)..." @while true; do \ clear; \ echo "=== SalvageDB Bot Monitoring ==="; \ echo "Time: $$(date)"; \ echo ""; \ echo "Container Status:"; \ docker-compose ps; \ echo ""; \ echo "Resource Usage:"; \ docker stats $(CONTAINER_NAME) --no-stream 2>/dev/null || echo "Container not running"; \ echo ""; \ echo "Last 5 log lines:"; \ docker-compose logs --tail=5 $(SERVICE_NAME) 2>/dev/null || echo "No logs available"; \ sleep 5; \ done # Обновление update: ## Обновить код и перезапустить @echo "📥 Updating application..." git pull @make redeploy # Конфигурация setup: ## Первоначальная настройка @echo "⚙️ Initial setup..." @if [ ! -f .env ]; then \ echo "📝 Creating .env file from template..."; \ cp env.example .env; \ echo "✅ Please edit .env file with your configuration"; \ else \ echo "✅ .env file already exists"; \ fi @echo "📁 Creating directories..." mkdir -p logs images data chmod 755 logs images data @echo "✅ Setup complete! Edit .env file and run 'make deploy'" # По умолчанию .DEFAULT_GOAL := help