# 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-config: ## Создать бэкап конфигурации @echo "🔐 Creating configuration backup..." cp docker-compose.yml docker-compose.yml.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..." @echo "📁 Creating directories..." mkdir -p logs images data chmod 755 logs images data @echo "✅ Setup complete! Edit docker-compose.yml with your configuration and run 'make deploy'" config-check: ## Проверить конфигурацию docker-compose.yml @echo "🔍 Checking docker-compose.yml configuration..." @if grep -q "your_bot_token_here" docker-compose.yml; then \ echo "❌ BOT_TOKEN not configured"; \ else \ echo "✅ BOT_TOKEN configured"; \ fi @if grep -q "your_db_user" docker-compose.yml; then \ echo "❌ Database credentials not configured"; \ else \ echo "✅ Database credentials configured"; \ fi @if grep -q "123456789" docker-compose.yml; then \ echo "⚠️ ADMIN_USER_ID using default value"; \ else \ echo "✅ ADMIN_USER_ID configured"; \ fi # По умолчанию .DEFAULT_GOAL := help