#!/bin/bash # Скрипт для управления Docker контейнерами TG Autoposter set -e SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$SCRIPT_DIR" # Цвета RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Функции print_info() { echo -e "${BLUE}ℹ️ $1${NC}" } print_success() { echo -e "${GREEN}✅ $1${NC}" } print_warning() { echo -e "${YELLOW}⚠️ $1${NC}" } print_error() { echo -e "${RED}❌ $1${NC}" } # Проверить .env файл check_env() { if [ ! -f .env ]; then print_error ".env файл не найден!" print_info "Создаю .env из .env.example..." cp .env.example .env print_warning "ВНИМАНИЕ: Отредактируйте .env файл и добавьте реальные значения!" exit 1 fi } # Показать помощь show_help() { echo "TG Autoposter Docker Management" echo "" echo "Использование: ./docker.sh [команда]" echo "" echo "Команды:" echo " up - Запустить контейнеры в фоновом режиме" echo " down - Остановить контейнеры" echo " build - Пересобрать Docker образы" echo " logs [service] - Показать логи (всех или конкретного сервиса)" echo " shell [service] - Подключиться к контейнеру (по умолчанию bot)" echo " ps - Показать статус контейнеров" echo " restart [svc] - Перезагрузить сервис" echo " clean - Удалить контейнеры и volumes" echo " db-init - Инициализировать БД" echo " celery-status - Показать статус Celery (Flower)" echo " help - Показать эту справку" echo "" } # Запустить контейнеры start_containers() { check_env print_info "Запускаю контейнеры..." docker-compose up -d print_success "Контейнеры запущены!" print_info "Бот доступен через polling" print_info "Flower (мониторинг Celery) доступен на http://localhost:5555" print_info "PostgreSQL доступен на localhost:5432" } # Остановить контейнеры stop_containers() { print_info "Останавливаю контейнеры..." docker-compose down print_success "Контейнеры остановлены!" } # Пересобрать образы build_images() { check_env print_info "Пересобираю Docker образы..." docker-compose build --no-cache print_success "Образы пересобраны!" } # Показать логи show_logs() { local service=$1 if [ -z "$service" ]; then docker-compose logs -f else docker-compose logs -f "$service" fi } # Подключиться к контейнеру shell_container() { local service=${1:-bot} print_info "Подключаюсь к $service..." docker-compose exec "$service" /bin/bash } # Показать статус show_status() { print_info "Статус контейнеров:" docker-compose ps } # Перезагрузить сервис restart_service() { local service=${1:-bot} print_info "Перезагружаю $service..." docker-compose restart "$service" print_success "$service перезагружен!" } # Очистить контейнеры и volumes clean_all() { print_warning "Эта операция удалит все контейнеры и volumes!" read -p "Продолжить? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then print_info "Удаляю контейнеры и volumes..." docker-compose down -v print_success "Очистка завершена!" fi } # Инициализировать БД init_db() { check_env print_info "Инициализирую БД..." docker-compose exec bot python -m app migrate print_success "БД инициализирована!" } # Показать статус Celery show_celery_status() { print_info "Flower (мониторинг Celery) доступен на:" print_success "http://localhost:5555" print_info "Можете также использовать команду:" echo " docker-compose exec bot celery -A app.celery_config inspect active" } # Обработать аргументы case "${1:-help}" in up) start_containers ;; down) stop_containers ;; build) build_images ;; logs) show_logs "$2" ;; shell) shell_container "$2" ;; ps) show_status ;; restart) restart_service "$2" ;; clean) clean_all ;; db-init) init_db ;; celery-status) show_celery_status ;; help) show_help ;; *) print_error "Неизвестная команда: $1" echo "" show_help exit 1 ;; esac