193 lines
5.3 KiB
Bash
193 lines
5.3 KiB
Bash
#!/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
|