Some checks reported errors
continuous-integration/drone Build encountered an error
148 lines
4.6 KiB
Bash
Executable File
148 lines
4.6 KiB
Bash
Executable File
#!/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
|