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

437 lines
11 KiB
Markdown
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.

# 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 <your-repo>
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 готов!** 🚀