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
11 KiB
11 KiB
Production Deployment Guide
🎯 Архитектура Production
┌─────────────────────────────────────────────────┐
│ Production Stack │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Nginx │ │ BUH Bot │ │Prometheus│ │
│ │ Proxy │→ │ (Main) │← │Monitoring│ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ↓ ↓ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Grafana │← │ Node │ │cAdvisor │ │
│ │Dashboard │ │ Exporter │ │Containers│ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ↓ │
│ ┌──────────────────────────────────┐ │
│ │ Watchtower (Auto-update) │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
📋 Компоненты
Основные сервисы
-
buh_bot - Telegram бот (главный сервис)
- Использует готовый образ из registry
- Автоматический перезапуск
- Healthcheck каждые 30 секунд
- Limits: 1 CPU, 1GB RAM
-
nginx - Reverse proxy
- Rate limiting
- SSL termination (опционально)
- Health endpoints
- Logs rotation
Мониторинг
-
prometheus - Сбор метрик
- Retention: 30 дней
- Port: 9090
- Метрики хоста и контейнеров
-
grafana - Визуализация
- Дашборды
- Алерты
- Port: 3000
-
node_exporter - Метрики хоста
- CPU, RAM, Disk, Network
- Port: 9100
-
cadvisor - Метрики контейнеров
- Docker metrics
- Port: 8080
Автоматизация
- watchtower - Автообновление
- Проверка обновлений каждый час
- Автоматический pull и restart
- Очистка старых образов
🚀 Развертывание
Шаг 1: Подготовка образа
Вариант А: Использование GitHub Container Registry
-
Форкните репозиторий на GitHub
-
Включите GitHub Actions:
- Settings → Actions → Allow all actions
-
Создайте тег и запушьте:
git tag v1.0.0 git push origin v1.0.0 -
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
📞 Поддержка
- 📖 DOCKER_GUIDE.md - Docker основы
- 📖 DOCKER_QUICKSTART.md - Быстрый старт
- 🐛 GitHub Issues - Сообщить о проблеме
✅ Checklist
Перед production деплоем:
- Образ собран и опубликован в registry
.env.prodнастроен (особенноTELEGRAM_BOT_TOKEN)- Grafana пароль изменён с дефолтного
- Директории созданы на хосте
- Firewall настроен
- SSL сертификаты установлены (если нужен webhook)
- Backup настроен
- Мониторинг проверен
- Healthcheck работает
- Логи ротируются
- Документация обновлена
Production готов! 🚀