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
437 lines
11 KiB
Markdown
437 lines
11 KiB
Markdown
# 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 готов!** 🚀
|