BUH_bot/deploy-prod.sh
Игорь Надеин b7853637bc feat: Add CI/CD pipeline and deployment automation
GitHub Actions Workflow:
- Automatic build on push to main/develop
- Build on tags (v*.*.*)
- Multi-platform support (linux/amd64)
- Publish to ghcr.io registry
- Docker layer caching
- Metadata extraction for tags

Build Scripts (Linux + Windows):
- build-image.sh/bat: Build and publish to registry
- Registry authentication check
- Image testing before push
- Configurable registry (default: ghcr.io)

Deployment Scripts (Linux + Windows):
- deploy-prod.sh/bat: Production deployment automation
- Pre-deployment checks (.env.prod validation)
- Automatic backup before deploy
- Image pull and stack deployment
- Health check verification
- Rollback support
2025-11-03 14:21:19 +03:00

98 lines
3.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 ""