BUH_bot/docs/PRODUCTION_DEPLOYMENT.md
Игорь Надеин 9491811425 docs: Add comprehensive documentation
Documentation Structure:
- MULTI_USER_AUTH.md (250 lines): Multi-user authentication guide
  - Architecture overview
  - Encryption mechanism (Fernet/AES-128)
  - User flow diagrams
  - API reference
  - Security considerations

- MIGRATION_GUIDE.md (120 lines): Migration instructions
  - Single-user to multi-user migration
  - Step-by-step guide
  - Data backup procedures
  - Rollback instructions

- DOCKER_QUICKSTART.md (100 lines): Quick Docker start
  - Prerequisites
  - 5-minute setup guide
  - Common commands
  - Troubleshooting

- DOCKER_GUIDE.md (400 lines): Complete Docker guide
  - Architecture details
  - Development workflow
  - Volume management
  - Network configuration
  - Resource limits
  - Logging and debugging

- PRODUCTION_DEPLOYMENT.md (500 lines): Production operations
  - 7-service architecture diagram
  - Deployment procedures
  - Monitoring setup (Prometheus, Grafana)
  - Management commands
  - Backup/restore
  - Security checklist
  - Scaling strategies
  - Troubleshooting guide

- CHANGELOG.md: Version history and release notes
2025-11-03 14:21:39 +03:00

11 KiB
Raw Blame History

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

Мониторинг

  1. prometheus - Сбор метрик

    • Retention: 30 дней
    • Port: 9090
    • Метрики хоста и контейнеров
  2. grafana - Визуализация

    • Дашборды
    • Алерты
    • Port: 3000
  3. node_exporter - Метрики хоста

    • CPU, RAM, Disk, Network
    • Port: 9100
  4. cadvisor - Метрики контейнеров

    • Docker metrics
    • Port: 8080

Автоматизация

  1. watchtower - Автообновление
    • Проверка обновлений каждый час
    • Автоматический pull и restart
    • Очистка старых образов

🚀 Развертывание

Шаг 1: Подготовка образа

Вариант А: Использование GitHub Container Registry

  1. Форкните репозиторий на GitHub

  2. Включите GitHub Actions:

    • Settings → Actions → Allow all actions
  3. Создайте тег и запушьте:

    git tag v1.0.0
    git push origin v1.0.0
    
  4. GitHub Actions автоматически:

    • Соберёт образ
    • Запустит тесты
    • Опубликует в ghcr.io/your-username/buh_bot

Вариант Б: Локальная сборка

# Авторизация в registry
docker login ghcr.io

# Сборка и публикация
chmod +x build-image.sh
./build-image.sh

Windows:

docker login ghcr.io
build-image.bat

Шаг 2: Настройка сервера

# Установка Docker и Docker Compose
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Клонирование конфигурации
git clone <your-repo>
cd BUH_bot

Шаг 3: Конфигурация

# Создание .env.prod
cp .env.prod.example .env.prod
nano .env.prod

Обязательные переменные:

TELEGRAM_BOT_TOKEN=your_production_token
DOCKER_USERNAME=your_github_username
GRAFANA_PASSWORD=secure_password_here

Шаг 4: Создание директорий

# Директории для данных
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: Деплой

chmod +x deploy-prod.sh
./deploy-prod.sh

Windows:

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

Полезные запросы:

# 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

Подробная информация о контейнерах в реальном времени.

🔧 Управление

Логи

# Все сервисы
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

Статус

# Статус контейнеров
docker-compose -f docker-compose.prod.yml ps

# Healthcheck
docker inspect --format='{{.State.Health.Status}}' buh_bot_prod

# Использование ресурсов
docker stats buh_bot_prod

Перезапуск

# Перезапуск бота
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

Обновление

# Ручное обновление
docker-compose -f docker-compose.prod.yml pull
docker-compose -f docker-compose.prod.yml up -d

# Автообновление (через Watchtower)
# Настроено автоматически, проверка каждый час

💾 Backup

Автоматический backup

Настройте cronjob:

# Редактирование crontab
crontab -e

# Добавьте (backup каждый день в 2:00)
0 2 * * * /path/to/backup.sh

backup.sh:

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

# Создание 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

# 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:

# 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:

# Проверка
git secrets --scan

# Ротация токенов
# Регулярно меняйте TELEGRAM_BOT_TOKEN в .env.prod

4. Updates

# Обновление системы
sudo apt update && sudo apt upgrade -y

# Обновление Docker
sudo apt install docker-ce docker-ce-cli containerd.io

📈 Масштабирование

Docker Swarm

# Инициализация 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:

# Конвертация в k8s манифесты
kompose convert -f docker-compose.prod.yml

🆘 Troubleshooting

Бот не запускается

# Проверить логи
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"

# Проверить доступ к registry
docker pull ghcr.io/your-username/buh_bot:latest

# Авторизоваться заново
docker logout ghcr.io
docker login ghcr.io

Высокое использование ресурсов

# Увеличить лимиты в docker-compose.prod.yml
deploy:
  resources:
    limits:
      cpus: '2.0'
      memory: 2G

Проблемы с volumes

# Проверить права
ls -la /var/lib/buh_bot/data

# Исправить права
sudo chown -R 1000:1000 /var/lib/buh_bot/data

📞 Поддержка

✅ Checklist

Перед production деплоем:

  • Образ собран и опубликован в registry
  • .env.prod настроен (особенно TELEGRAM_BOT_TOKEN)
  • Grafana пароль изменён с дефолтного
  • Директории созданы на хосте
  • Firewall настроен
  • SSL сертификаты установлены (если нужен webhook)
  • Backup настроен
  • Мониторинг проверен
  • Healthcheck работает
  • Логи ротируются
  • Документация обновлена

Production готов! 🚀