#!/bin/bash # Скрипт для локальной разработки с Docker set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" echo "🐳 Quiz Bot Development Script" echo "==============================" # Функция для проверки Docker check_docker() { if ! command -v docker &> /dev/null; then echo "❌ Docker не установлен!" exit 1 fi if ! docker info &> /dev/null; then echo "❌ Docker daemon не запущен!" exit 1 fi echo "✅ Docker готов к работе" } # Функция для сборки образа build_image() { echo "🔨 Сборка Docker образа..." cd "$PROJECT_ROOT" docker build -t quiz-bot:dev . echo "✅ Образ собран: quiz-bot:dev" } # Функция для запуска в development режиме run_dev() { echo "🚀 Запуск в режиме разработки..." cd "$PROJECT_ROOT" # Проверяем .env файл if [ ! -f .env ]; then echo "⚠️ Файл .env не найден. Создаём шаблон..." cat > .env << EOF BOT_TOKEN=your_bot_token_here DATABASE_PATH=data/quiz_bot.db CSV_DATA_PATH=data/ LOG_LEVEL=DEBUG EOF echo "📝 Заполните .env файл и запустите скрипт снова" exit 1 fi # Создаём директории если их нет mkdir -p data logs docker-compose up --build } # Функция для остановки stop_dev() { echo "🛑 Остановка сервисов..." cd "$PROJECT_ROOT" docker-compose down echo "✅ Сервисы остановлены" } # Функция для очистки cleanup() { echo "🧹 Очистка Docker ресурсов..." cd "$PROJECT_ROOT" docker-compose down --volumes --remove-orphans docker image rm quiz-bot:dev 2>/dev/null || true docker system prune -f echo "✅ Очистка завершена" } # Функция для тестирования test_app() { echo "🧪 Запуск тестов..." cd "$PROJECT_ROOT" # Сборка тестового образа docker build -t quiz-bot:test . # Запуск тестов в контейнере docker run --rm \ -e BOT_TOKEN=test_token \ -e DATABASE_PATH=":memory:" \ quiz-bot:test \ python -m pytest test_*.py -v echo "✅ Тесты завершены" } # Функция для логов show_logs() { echo "📋 Показ логов..." cd "$PROJECT_ROOT" docker-compose logs -f quiz-bot } # Главное меню case "${1:-menu}" in "build") check_docker build_image ;; "run"|"start") check_docker run_dev ;; "stop") check_docker stop_dev ;; "restart") check_docker stop_dev run_dev ;; "test") check_docker test_app ;; "logs") check_docker show_logs ;; "cleanup") check_docker cleanup ;; "menu"|*) echo "" echo "Использование: $0 [команда]" echo "" echo "Команды:" echo " build - Собрать Docker образ" echo " run - Запустить в режиме разработки" echo " stop - Остановить сервисы" echo " restart - Перезапустить сервисы" echo " test - Запустить тесты" echo " logs - Показать логи" echo " cleanup - Очистить Docker ресурсы" echo "" ;; esac