devops prepare
Some checks reported errors
continuous-integration/drone Build encountered an error

This commit is contained in:
2025-09-11 07:40:57 +09:00
parent 5ddc540f9e
commit 1c47c11eb1
10 changed files with 1134 additions and 18 deletions

147
scripts/deploy.sh Executable file
View File

@@ -0,0 +1,147 @@
#!/bin/bash
# Скрипт для production деплоя
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "🚀 Quiz Bot Production Deploy"
echo "============================="
# Загрузка переменных окружения
if [ -f "$PROJECT_ROOT/.env.prod" ]; then
source "$PROJECT_ROOT/.env.prod"
else
echo "⚠️ Файл .env.prod не найден!"
echo "📝 Создайте файл с production настройками"
exit 1
fi
# Проверка обязательных переменных
if [ -z "$BOT_TOKEN" ]; then
echo "❌ BOT_TOKEN не установлен!"
exit 1
fi
# Функция для деплоя
deploy_production() {
echo "🔄 Деплой в production..."
cd "$PROJECT_ROOT"
# Создание backup базы данных если она существует
if [ -f "data/quiz_bot.db" ]; then
echo "💾 Создание backup базы данных..."
cp data/quiz_bot.db "data/quiz_bot.db.backup.$(date +%Y%m%d_%H%M%S)"
fi
# Запуск production сервисов
docker-compose -f docker-compose.prod.yml pull
docker-compose -f docker-compose.prod.yml up -d --build
echo "⏳ Ожидание запуска сервисов..."
sleep 30
# Проверка статуса
echo "📋 Статус сервисов:"
docker-compose -f docker-compose.prod.yml ps
# Health check
echo "🏥 Проверка health check..."
if docker-compose -f docker-compose.prod.yml exec -T quiz-bot python -c "import sqlite3; conn = sqlite3.connect('/app/data/quiz_bot.db'); conn.close(); print('✅ Database OK')"; then
echo "✅ Production деплой успешен!"
else
echo "❌ Health check не прошёл!"
exit 1
fi
}
# Функция для отката
rollback() {
echo "🔄 Откат к предыдущей версии..."
cd "$PROJECT_ROOT"
# Останавливаем текущие сервисы
docker-compose -f docker-compose.prod.yml down
# Восстанавливаем backup базы данных
LATEST_BACKUP=$(ls -t data/quiz_bot.db.backup.* 2>/dev/null | head -n1)
if [ -n "$LATEST_BACKUP" ]; then
echo "💾 Восстановление базы данных из $LATEST_BACKUP"
cp "$LATEST_BACKUP" data/quiz_bot.db
fi
# Запускаем с предыдущим образом
export IMAGE_TAG=previous
docker-compose -f docker-compose.prod.yml up -d
echo "✅ Откат завершён"
}
# Функция для мониторинга
monitor() {
echo "📊 Мониторинг production сервисов..."
cd "$PROJECT_ROOT"
while true; do
clear
echo "=== Quiz Bot Production Status ==="
echo "Время: $(date)"
echo ""
echo "📋 Статус контейнеров:"
docker-compose -f docker-compose.prod.yml ps
echo ""
echo "💾 Использование ресурсов:"
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
echo ""
echo "📊 Логи (последние 10 строк):"
docker-compose -f docker-compose.prod.yml logs --tail=10 quiz-bot
echo ""
echo "Обновление через 30 сек... (Ctrl+C для выхода)"
sleep 30
done
}
# Главное меню
case "${1:-menu}" in
"deploy")
deploy_production
;;
"rollback")
rollback
;;
"status")
cd "$PROJECT_ROOT"
docker-compose -f docker-compose.prod.yml ps
;;
"logs")
cd "$PROJECT_ROOT"
docker-compose -f docker-compose.prod.yml logs -f
;;
"monitor")
monitor
;;
"stop")
cd "$PROJECT_ROOT"
docker-compose -f docker-compose.prod.yml down
echo "✅ Production сервисы остановлены"
;;
"menu"|*)
echo ""
echo "Использование: $0 [команда]"
echo ""
echo "Команды:"
echo " deploy - Деплой в production"
echo " rollback - Откат к предыдущей версии"
echo " status - Статус сервисов"
echo " logs - Показать логи"
echo " monitor - Мониторинг в реальном времени"
echo " stop - Остановить сервисы"
echo ""
;;
esac

148
scripts/dev.sh Executable file
View File

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