savagedb_bot/Makefile

159 lines
5.8 KiB
Makefile

# 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