Files
TG_autoposter/docker.sh
2025-12-18 05:55:32 +09:00

193 lines
5.3 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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