.PHONY: help venv install run clean \ docker-up docker-down docker-logs docker-rebuild docker-restart \ docker-bot-restart docker-bot-rebuild docker-bot-build docker-bot-rebuild-full \ migrate migrate-down migrate-current migrate-revision \ local-migrate local-migrate-down local-migrate-current \ docker-db docker-db-stop help: @echo "Доступные команды:" @echo " make venv - Создать виртуальное окружение" @echo " make install - Установить зависимости" @echo " make run - Запустить бота локально" @echo " make clean - Удалить venv и кэш" @echo "" @echo "Docker команды:" @echo " make docker-up - Запустить всё (бот + БД)" @echo " make docker-down - Остановить все контейнеры" @echo " make docker-logs - Показать логи Docker" @echo " make docker-rebuild - Пересобрать контейнеры" @echo " make docker-restart - Перезапустить все контейнеры" @echo " make docker-bot-restart - Перезапустить только бот" @echo " make docker-bot-build - Собрать образ бота" @echo " make docker-bot-rebuild - Пересобрать и поднять только бот" @echo "" @echo "Миграции Alembic (Docker):" @echo " make migrate - Применить все миграции (upgrade head)" @echo " make migrate-down - Откатить одну миграцию (downgrade -1)" @echo " make migrate-current - Показать текущую ревизию" @echo " make migrate-revision m=\"msg\" - Создать пустую ревизию с сообщением" @echo "" @echo "Миграции Alembic (локально):" @echo " make local-migrate - Применить все миграции локально" @echo " make local-migrate-down - Откатить одну миграцию локально" @echo " make local-migrate-current - Показать текущую ревизию локально" @echo "" @echo "База данных:" @echo " make docker-db - Запустить только БД (для локальной разработки)" @echo " make docker-db-stop - Остановить БД" venv: python3 -m venv .venv @echo "Виртуальное окружение создано!" @echo "Активируйте его: source .venv/bin/activate" install: venv .venv/bin/pip install --upgrade pip .venv/bin/pip install -r requirements.txt @echo "Зависимости установлены!" run: @if [ ! -f .env ]; then \ echo "Ошибка: файл .env не найден!"; \ echo "Создайте его: cp .env.example .env"; \ exit 1; \ fi .venv/bin/python main.py clean: rm -rf .venv find . -type d -name "__pycache__" -exec rm -rf {} + find . -type f -name "*.pyc" -delete @echo "Очистка завершена!" docker-up: @if [ ! -f .env ]; then \ echo "Ошибка: файл .env не найден!"; \ echo "Создайте его: cp .env.example .env"; \ exit 1; \ fi docker-compose up -d docker-down: docker-compose down docker-logs: docker-compose logs -f bot docker-rebuild: docker-compose up -d --build docker-restart: docker-compose restart docker-bot-restart: docker-compose restart bot docker-bot-build: docker-compose build bot docker-bot-rebuild: docker-compose stop bot docker-compose rm -f bot docker-compose up -d --build bot docker-bot-rebuild-full: docker-compose stop bot docker-compose rm -f bot docker rmi -f $$(docker images -q language_bot-bot 2>/dev/null) 2>/dev/null || true docker-compose build --no-cache bot docker-compose up -d bot # ------- Alembic migrations (в контейнере бота) ------- migrate: docker-compose exec bot alembic upgrade head migrate-down: docker-compose exec bot alembic downgrade -1 migrate-current: docker-compose exec bot alembic current migrate-revision: @if [ -z "$(m)" ]; then \ echo "Укажите сообщение: make migrate-revision m=\"message\""; \ exit 1; \ fi docker-compose exec bot alembic revision -m "$(m)" # ------- Локальные миграции Alembic (без Docker) ------- local-migrate: .venv/bin/alembic upgrade head local-migrate-down: .venv/bin/alembic downgrade -1 local-migrate-current: .venv/bin/alembic current docker-db: @echo "🐘 Запуск PostgreSQL для локальной разработки..." @if [ ! -f .env ]; then \ cp .env.example .env; \ echo "⚠️ Создан .env файл из .env.example"; \ fi docker-compose -f docker-compose.dev.yml up -d @echo "✅ База данных запущена на localhost:15433" @echo "" @echo "Параметры подключения:" @echo " Host: localhost" @echo " Port: 15433" @echo " User: botuser" @echo " Password: botpassword" @echo " Database: language_bot" @echo "" @echo "DATABASE_URL для .env:" @echo " DATABASE_URL=postgresql+asyncpg://botuser:botpassword@localhost:15433/language_bot" @echo "" @echo "Подключиться: docker-compose -f docker-compose.dev.yml exec db psql -U botuser -d language_bot" docker-db-stop: @echo "Остановка базы данных..." docker-compose -f docker-compose.dev.yml stop docker-compose -f docker-compose.dev.yml down