#!/bin/bash # Скрипт для деплоя в production set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo -e "${GREEN}🚀 Production Deploy - BUH Bot${NC}" echo "" # Проверка .env.prod if [ ! -f .env.prod ]; then echo -e "${RED}❌ Файл .env.prod не найден!${NC}" echo "Создайте файл на основе .env.prod.example:" echo " cp .env.prod.example .env.prod" echo " nano .env.prod" exit 1 fi # Проверка обязательных переменных echo -e "${YELLOW}🔍 Проверка конфигурации...${NC}" source .env.prod if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ "$TELEGRAM_BOT_TOKEN" = "your_production_bot_token_here" ]; then echo -e "${RED}❌ TELEGRAM_BOT_TOKEN не настроен в .env.prod${NC}" exit 1 fi echo -e "${GREEN}✅ Конфигурация корректна${NC}" # Создание необходимых директорий на хосте echo -e "${YELLOW}📁 Создание директорий...${NC}" sudo mkdir -p /var/lib/buh_bot/data sudo mkdir -p /var/log/buh_bot sudo mkdir -p /var/tmp/buh_bot # Backup существующих данных if [ -d /var/lib/buh_bot/data ] && [ "$(ls -A /var/lib/buh_bot/data)" ]; then echo -e "${YELLOW}💾 Создание backup...${NC}" BACKUP_DIR="/var/backups/buh_bot/$(date +%Y%m%d_%H%M%S)" sudo mkdir -p "$BACKUP_DIR" sudo cp -r /var/lib/buh_bot/data/* "$BACKUP_DIR/" echo -e "${GREEN}✅ Backup создан: $BACKUP_DIR${NC}" fi # Остановка существующих контейнеров if docker ps -a --format '{{.Names}}' | grep -q "buh_bot"; then echo -e "${YELLOW}🛑 Остановка существующих контейнеров...${NC}" docker-compose -f docker-compose.prod.yml --env-file .env.prod down fi # Pull latest образов echo -e "${YELLOW}📥 Получение последних образов...${NC}" docker-compose -f docker-compose.prod.yml --env-file .env.prod pull # Запуск echo -e "${YELLOW}🚀 Запуск сервисов...${NC}" docker-compose -f docker-compose.prod.yml --env-file .env.prod up -d # Проверка статуса sleep 5 echo "" echo -e "${BLUE}📊 Статус сервисов:${NC}" docker-compose -f docker-compose.prod.yml --env-file .env.prod ps # Проверка healthcheck echo "" echo -e "${YELLOW}🏥 Ожидание healthcheck...${NC}" sleep 10 BOT_HEALTH=$(docker inspect --format='{{.State.Health.Status}}' buh_bot_prod 2>/dev/null || echo "unknown") if [ "$BOT_HEALTH" = "healthy" ] || [ "$BOT_HEALTH" = "starting" ]; then echo -e "${GREEN}✅ Бот запущен и работает${NC}" else echo -e "${RED}⚠️ Бот запущен, но healthcheck: $BOT_HEALTH${NC}" echo "Проверьте логи: docker-compose -f docker-compose.prod.yml logs buh_bot" fi echo "" echo -e "${GREEN}✅ Production деплой завершён!${NC}" echo "" echo -e "${BLUE}📝 Полезные команды:${NC}" echo " Логи бота: docker-compose -f docker-compose.prod.yml logs -f buh_bot" echo " Все логи: docker-compose -f docker-compose.prod.yml logs -f" echo " Статус: docker-compose -f docker-compose.prod.yml ps" echo " Остановка: docker-compose -f docker-compose.prod.yml down" echo " Перезапуск: docker-compose -f docker-compose.prod.yml restart" echo "" echo -e "${BLUE}📊 Мониторинг:${NC}" echo " Grafana: http://localhost:${GRAFANA_PORT:-3000}" echo " Prometheus: http://localhost:${PROMETHEUS_PORT:-9090}" echo " cAdvisor: http://localhost:8080" echo ""