BUH_bot/Makefile
Игорь Надеин 8e56415e68 chore: Add development tooling and automation
Makefile (20+ commands):

Development Docker Commands:
- make build: Build Docker image
- make up: Start containers
- make down: Stop containers
- make logs: Show logs
- make shell: Open bot shell
- make ps: Show container status

Production Docker Commands:
- make prod-build: Build and publish to registry
- make prod-up: Deploy production stack
- make prod-down: Stop production
- make prod-logs: Production logs
- make prod-ps: Production status
- make prod-restart: Restart services
- make prod-pull: Update images
- make prod-backup: Backup to /var/backups

Development Commands:
- make venv: Create virtual environment
- make install: Install dependencies
- make run: Run bot locally
- make test: Run tests
- make lint: Run linter
- make clean: Clean cache and temp files
- make backup: Backup data directory

Utility:
- make help: Show all commands with descriptions
2025-11-03 14:22:00 +03:00

177 lines
5.8 KiB
Makefile

.PHONY: help build up down restart logs shell clean test lint
# По умолчанию показываем help
help:
@echo "🤖 BUH Bot - Makefile команды:"
@echo ""
@echo "Development Docker:"
@echo " make build - Собрать Docker образ"
@echo " make up - Запустить бота (dev)"
@echo " make down - Остановить бота"
@echo " make restart - Перезапустить бота"
@echo " make logs - Показать логи (Ctrl+C для выхода)"
@echo " make shell - Войти в контейнер"
@echo " make ps - Статус контейнера"
@echo ""
@echo "Production Docker:"
@echo " make prod-build - Собрать и опубликовать образ в registry"
@echo " make prod-up - Запустить production stack"
@echo " make prod-down - Остановить production stack"
@echo " make prod-logs - Логи production"
@echo " make prod-ps - Статус production"
@echo ""
@echo "Разработка:"
@echo " make test - Запустить тесты"
@echo " make lint - Проверить код (flake8)"
@echo " make clean - Очистить временные файлы"
@echo " make backup - Создать backup данных"
@echo ""
@echo "Локальная разработка:"
@echo " make venv - Создать виртуальное окружение"
@echo " make install - Установить зависимости"
@echo " make run - Запустить бота локально"
# Docker команды
build:
@echo "🔨 Сборка Docker образа..."
docker-compose build --no-cache
up:
@echo "🚀 Запуск бота..."
@mkdir -p data logs temp_documents
docker-compose up -d
@echo "✅ Бот запущен!"
@echo "📝 Логи: make logs"
down:
@echo "🛑 Остановка бота..."
docker-compose down
@echo "✅ Бот остановлен"
restart:
@echo "🔄 Перезапуск бота..."
docker-compose restart
@echo "✅ Бот перезапущен"
logs:
@echo "📝 Логи бота (Ctrl+C для выхода):"
docker-compose logs -f
shell:
@echo "🐚 Вход в контейнер..."
docker-compose exec buh_bot bash
ps:
@echo "📊 Статус контейнера:"
docker-compose ps
# Разработка
test:
@echo "🧪 Запуск тестов..."
python -m pytest tests/ -v
lint:
@echo "🔍 Проверка кода..."
flake8 bot.py modules/ --max-line-length=79
clean:
@echo "🧹 Очистка временных файлов..."
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete 2>/dev/null || true
find . -type f -name "*.pyo" -delete 2>/dev/null || true
find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true
rm -rf .pytest_cache 2>/dev/null || true
rm -rf htmlcov 2>/dev/null || true
rm -rf temp_documents/* 2>/dev/null || true
@echo "✅ Очистка завершена"
backup:
@echo "💾 Создание backup..."
@mkdir -p backups
tar -czf backups/backup-$$(date +%Y%m%d-%H%M%S).tar.gz data/ logs/
@echo "✅ Backup создан в backups/"
# Локальная разработка
venv:
@echo "🐍 Создание виртуального окружения..."
python3 -m venv venv
@echo "✅ Виртуальное окружение создано"
@echo "Активируйте: source venv/bin/activate"
install:
@echo "📦 Установка зависимостей..."
pip install -r requirements.txt
@echo "✅ Зависимости установлены"
run:
@echo "🚀 Запуск бота локально..."
python bot.py
# Дополнительные команды
update:
@echo "🔄 Обновление бота..."
git pull
docker-compose build
docker-compose up -d
@echo "✅ Бот обновлён и перезапущен"
stats:
@echo "📊 Статистика использования ресурсов:"
docker stats buh_bot --no-stream
check-env:
@echo "🔍 Проверка .env файла..."
@if [ ! -f .env ]; then \
echo "❌ Файл .env не найден!"; \
echo "Создайте: cp .env.example .env"; \
exit 1; \
fi
@if ! grep -q "TELEGRAM_BOT_TOKEN=.*[^_here]" .env; then \
echo "⚠️ TELEGRAM_BOT_TOKEN не настроен!"; \
else \
echo "✅ .env настроен"; \
fi
# Production команды
prod-build:
@echo "🔨 Сборка и публикация production образа..."
@chmod +x build-image.sh
./build-image.sh
prod-up:
@echo "🚀 Запуск production stack..."
@if [ ! -f .env.prod ]; then \
echo "❌ Файл .env.prod не найден!"; \
echo "Создайте: cp .env.prod.example .env.prod"; \
exit 1; \
fi
@chmod +x deploy-prod.sh
./deploy-prod.sh
prod-down:
@echo "🛑 Остановка production stack..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod down
prod-logs:
@echo "📝 Логи production (Ctrl+C для выхода):"
docker-compose -f docker-compose.prod.yml --env-file .env.prod logs -f
prod-ps:
@echo "📊 Статус production:"
docker-compose -f docker-compose.prod.yml --env-file .env.prod ps
prod-restart:
@echo "🔄 Перезапуск production..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod restart
prod-pull:
@echo "📥 Обновление образов..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod pull
prod-backup:
@echo "💾 Создание production backup..."
@mkdir -p /var/backups/buh_bot
sudo tar -czf /var/backups/buh_bot/backup-$$(date +%Y%m%d-%H%M%S).tar.gz \
/var/lib/buh_bot/data /var/log/buh_bot
@echo "✅ Backup создан в /var/backups/buh_bot/"