savagedb_bot/Makefile

148 lines
5.4 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-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