init commit

This commit is contained in:
2025-12-18 05:55:32 +09:00
commit a6817e487e
72 changed files with 13847 additions and 0 deletions

192
docker.sh Normal file
View File

@@ -0,0 +1,192 @@
#!/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