# Production Deployment Guide ## 🎯 Архитектура Production ``` ┌─────────────────────────────────────────────────┐ │ Production Stack │ ├─────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Nginx │ │ BUH Bot │ │Prometheus│ │ │ │ Proxy │→ │ (Main) │← │Monitoring│ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ ↓ ↓ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Grafana │← │ Node │ │cAdvisor │ │ │ │Dashboard │ │ Exporter │ │Containers│ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ ↓ │ │ ┌──────────────────────────────────┐ │ │ │ Watchtower (Auto-update) │ │ │ └──────────────────────────────────┘ │ └─────────────────────────────────────────────────┘ ``` ## 📋 Компоненты ### Основные сервисы 1. **buh_bot** - Telegram бот (главный сервис) - Использует готовый образ из registry - Автоматический перезапуск - Healthcheck каждые 30 секунд - Limits: 1 CPU, 1GB RAM 2. **nginx** - Reverse proxy - Rate limiting - SSL termination (опционально) - Health endpoints - Logs rotation ### Мониторинг 3. **prometheus** - Сбор метрик - Retention: 30 дней - Port: 9090 - Метрики хоста и контейнеров 4. **grafana** - Визуализация - Дашборды - Алерты - Port: 3000 5. **node_exporter** - Метрики хоста - CPU, RAM, Disk, Network - Port: 9100 6. **cadvisor** - Метрики контейнеров - Docker metrics - Port: 8080 ### Автоматизация 7. **watchtower** - Автообновление - Проверка обновлений каждый час - Автоматический pull и restart - Очистка старых образов ## 🚀 Развертывание ### Шаг 1: Подготовка образа #### Вариант А: Использование GitHub Container Registry 1. **Форкните репозиторий** на GitHub 2. **Включите GitHub Actions:** - Settings → Actions → Allow all actions 3. **Создайте тег и запушьте:** ```bash git tag v1.0.0 git push origin v1.0.0 ``` 4. **GitHub Actions автоматически:** - Соберёт образ - Запустит тесты - Опубликует в `ghcr.io/your-username/buh_bot` #### Вариант Б: Локальная сборка ```bash # Авторизация в registry docker login ghcr.io # Сборка и публикация chmod +x build-image.sh ./build-image.sh ``` **Windows:** ```cmd docker login ghcr.io build-image.bat ``` ### Шаг 2: Настройка сервера ```bash # Установка Docker и Docker Compose curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER # Клонирование конфигурации git clone cd BUH_bot ``` ### Шаг 3: Конфигурация ```bash # Создание .env.prod cp .env.prod.example .env.prod nano .env.prod ``` **Обязательные переменные:** ```env TELEGRAM_BOT_TOKEN=your_production_token DOCKER_USERNAME=your_github_username GRAFANA_PASSWORD=secure_password_here ``` ### Шаг 4: Создание директорий ```bash # Директории для данных sudo mkdir -p /var/lib/buh_bot/data sudo mkdir -p /var/log/buh_bot sudo mkdir -p /var/tmp/buh_bot # Права доступа sudo chown -R $USER:$USER /var/lib/buh_bot sudo chown -R $USER:$USER /var/log/buh_bot sudo chown -R $USER:$USER /var/tmp/buh_bot ``` ### Шаг 5: Деплой ```bash chmod +x deploy-prod.sh ./deploy-prod.sh ``` **Windows:** ```cmd deploy-prod.bat ``` ## 📊 Мониторинг ### Grafana Откройте: `http://your-server:3000` **Логин по умолчанию:** - Username: `admin` - Password: (из .env.prod `GRAFANA_PASSWORD`) **Готовые дашборды:** - Docker Containers - Host Metrics - Bot Statistics ### Prometheus Откройте: `http://your-server:9090` **Полезные запросы:** ```promql # CPU использование бота rate(container_cpu_usage_seconds_total{name="buh_bot_prod"}[5m]) # Память бота container_memory_usage_bytes{name="buh_bot_prod"} / 1024 / 1024 # Uptime time() - container_start_time_seconds{name="buh_bot_prod"} ``` ### cAdvisor Откройте: `http://your-server:8080` Подробная информация о контейнерах в реальном времени. ## 🔧 Управление ### Логи ```bash # Все сервисы docker-compose -f docker-compose.prod.yml logs -f # Только бот docker-compose -f docker-compose.prod.yml logs -f buh_bot # Последние 100 строк docker-compose -f docker-compose.prod.yml logs --tail=100 buh_bot ``` ### Статус ```bash # Статус контейнеров docker-compose -f docker-compose.prod.yml ps # Healthcheck docker inspect --format='{{.State.Health.Status}}' buh_bot_prod # Использование ресурсов docker stats buh_bot_prod ``` ### Перезапуск ```bash # Перезапуск бота docker-compose -f docker-compose.prod.yml restart buh_bot # Перезапуск всех сервисов docker-compose -f docker-compose.prod.yml restart # Остановка docker-compose -f docker-compose.prod.yml down # Остановка + удаление volumes docker-compose -f docker-compose.prod.yml down -v ``` ### Обновление ```bash # Ручное обновление docker-compose -f docker-compose.prod.yml pull docker-compose -f docker-compose.prod.yml up -d # Автообновление (через Watchtower) # Настроено автоматически, проверка каждый час ``` ## 💾 Backup ### Автоматический backup Настройте cronjob: ```bash # Редактирование crontab crontab -e # Добавьте (backup каждый день в 2:00) 0 2 * * * /path/to/backup.sh ``` **backup.sh:** ```bash #!/bin/bash BACKUP_DIR="/var/backups/buh_bot/$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" cp -r /var/lib/buh_bot/data/* "$BACKUP_DIR/" find /var/backups/buh_bot/ -type d -mtime +30 -exec rm -rf {} + ``` ### Ручной backup ```bash # Создание backup tar -czf buh_bot_backup_$(date +%Y%m%d).tar.gz \ /var/lib/buh_bot/data \ /var/log/buh_bot # Восстановление tar -xzf buh_bot_backup_20250103.tar.gz -C / ``` ## 🔒 Безопасность ### 1. Firewall ```bash # UFW (Ubuntu) sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enable # Закрыть порты мониторинга извне # (доступ только через SSH tunnel) ``` ### 2. SSL/TLS Для webhook режима установите SSL: ```bash # Certbot для Let's Encrypt sudo apt install certbot sudo certbot certonly --standalone -d your-domain.com # Скопируйте сертификаты sudo cp /etc/letsencrypt/live/your-domain.com/fullchain.pem nginx/ssl/ sudo cp /etc/letsencrypt/live/your-domain.com/privkey.pem nginx/ssl/ # Раскомментируйте SSL блок в nginx/nginx.conf ``` ### 3. Secrets Не храните секреты в Git: ```bash # Проверка git secrets --scan # Ротация токенов # Регулярно меняйте TELEGRAM_BOT_TOKEN в .env.prod ``` ### 4. Updates ```bash # Обновление системы sudo apt update && sudo apt upgrade -y # Обновление Docker sudo apt install docker-ce docker-ce-cli containerd.io ``` ## 📈 Масштабирование ### Docker Swarm ```bash # Инициализация swarm docker swarm init # Деплой stack docker stack deploy -c docker-compose.prod.yml buh_bot # Масштабирование (если нужно несколько реплик) docker service scale buh_bot_buh_bot=3 ``` ### Kubernetes Для Kubernetes создайте манифесты на основе docker-compose.prod.yml: ```bash # Конвертация в k8s манифесты kompose convert -f docker-compose.prod.yml ``` ## 🆘 Troubleshooting ### Бот не запускается ```bash # Проверить логи docker-compose -f docker-compose.prod.yml logs buh_bot # Проверить конфигурацию docker-compose -f docker-compose.prod.yml config # Проверить переменные окружения docker exec buh_bot_prod env ``` ### Ошибка "image not found" ```bash # Проверить доступ к registry docker pull ghcr.io/your-username/buh_bot:latest # Авторизоваться заново docker logout ghcr.io docker login ghcr.io ``` ### Высокое использование ресурсов ```bash # Увеличить лимиты в docker-compose.prod.yml deploy: resources: limits: cpus: '2.0' memory: 2G ``` ### Проблемы с volumes ```bash # Проверить права ls -la /var/lib/buh_bot/data # Исправить права sudo chown -R 1000:1000 /var/lib/buh_bot/data ``` ## 📞 Поддержка - 📖 [DOCKER_GUIDE.md](DOCKER_GUIDE.md) - Docker основы - 📖 [DOCKER_QUICKSTART.md](DOCKER_QUICKSTART.md) - Быстрый старт - 🐛 GitHub Issues - Сообщить о проблеме ## ✅ Checklist Перед production деплоем: - [ ] Образ собран и опубликован в registry - [ ] `.env.prod` настроен (особенно `TELEGRAM_BOT_TOKEN`) - [ ] Grafana пароль изменён с дефолтного - [ ] Директории созданы на хосте - [ ] Firewall настроен - [ ] SSL сертификаты установлены (если нужен webhook) - [ ] Backup настроен - [ ] Мониторинг проверен - [ ] Healthcheck работает - [ ] Логи ротируются - [ ] Документация обновлена --- **Production готов!** 🚀