BUH_bot/docs/DOCKER_GUIDE.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

494 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.

# Docker Development & Deployment Guide
## 📦 Структура Docker-окружения
```
BUH_bot/
├── Dockerfile # Образ контейнера
├── docker-compose.yml # Оркестрация
├── .dockerignore # Исключения при сборке
├── start.sh / start.bat # Скрипт запуска (Linux/Windows)
├── stop.sh / stop.bat # Скрипт остановки (Linux/Windows)
├── .env # Переменные окружения
└── .env.example # Пример конфигурации
```
## 🚀 Быстрый старт
### 1. Подготовка
**Linux/Mac:**
```bash
# Клонируем репозиторий
git clone <repo_url>
cd BUH_bot
# Создаём .env из примера
cp .env.example .env
# Редактируем .env и указываем TELEGRAM_BOT_TOKEN
nano .env
```
**Windows:**
```cmd
git clone <repo_url>
cd BUH_bot
copy .env.example .env
notepad .env
```
### 2. Запуск
**Linux/Mac:**
```bash
chmod +x start.sh stop.sh
./start.sh
```
**Windows:**
```cmd
start.bat
```
**Или напрямую через docker-compose:**
```bash
docker-compose up -d
```
### 3. Проверка статуса
```bash
# Статус контейнера
docker-compose ps
# Логи в реальном времени
docker-compose logs -f
# Последние 100 строк логов
docker-compose logs --tail=100
```
### 4. Остановка
**Linux/Mac:**
```bash
./stop.sh
```
**Windows:**
```cmd
stop.bat
```
**Или напрямую:**
```bash
docker-compose down
```
## 🏗️ Dockerfile
### Основные особенности:
- **Базовый образ:** `python:3.11-slim` (легкий, ~150MB)
- **Рабочая директория:** `/app`
- **Volumes:**
- `/app/data` - пользовательские данные (users.json, .encryption_key)
- `/app/logs` - логи бота
- `/app/temp_documents` - временные файлы
- **Healthcheck:** Проверка работоспособности каждые 30 секунд
- **Multi-stage build:** Нет (можно добавить для уменьшения размера)
### Сборка образа вручную:
```bash
# Сборка
docker build -t buh_bot:latest .
# Запуск
docker run -d \
--name buh_bot \
--env-file .env \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/temp_documents:/app/temp_documents \
buh_bot:latest
```
## 🎛️ Docker Compose
### Конфигурация
```yaml
version: '3.8'
services:
buh_bot:
build: .
container_name: buh_bot
restart: unless-stopped
environment:
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
- MOYSKLAD_API_URL=${MOYSKLAD_API_URL}
- TZ=Europe/Moscow
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./temp_documents:/app/temp_documents
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
```
### Полезные команды:
```bash
# Пересборка образа
docker-compose build --no-cache
# Запуск с выводом логов
docker-compose up
# Перезапуск
docker-compose restart
# Остановка и удаление контейнера
docker-compose down
# Остановка + удаление volumes
docker-compose down -v
# Просмотр логов конкретного сервиса
docker-compose logs buh_bot
# Вход в контейнер
docker-compose exec buh_bot bash
# Просмотр использования ресурсов
docker stats buh_bot
```
## 📁 Volumes и данные
### Bind Mounts (текущая конфигурация)
Данные хранятся на хосте в директориях:
- `./data/` → `/app/data` - users.json, .encryption_key
- `./logs/` → `/app/logs` - логи бота
- `./temp_documents/` → `/app/temp_documents` - временные документы
**Преимущества:**
- Простой доступ к данным с хоста
- Легко делать backup
- Данные сохраняются после `docker-compose down`
**Backup:**
```bash
# Создание backup
tar -czf backup-$(date +%Y%m%d).tar.gz data/ logs/
# Восстановление
tar -xzf backup-20250103.tar.gz
```
### Named Volumes (альтернатива)
В `docker-compose.yml` можно использовать named volumes:
```yaml
volumes:
- bot_data:/app/data
- bot_logs:/app/logs
volumes:
bot_data:
driver: local
bot_logs:
driver: local
```
**Преимущества:**
- Управляются Docker
- Лучшая производительность на Windows/Mac
**Backup named volumes:**
```bash
# Создание backup
docker run --rm -v bot_data:/data -v $(pwd):/backup \
alpine tar czf /backup/data-backup.tar.gz -C /data .
# Восстановление
docker run --rm -v bot_data:/data -v $(pwd):/backup \
alpine tar xzf /backup/data-backup.tar.gz -C /data
```
## 🔐 Безопасность
### Environment Variables
**Важно:** Никогда не коммитьте `.env` в Git!
```bash
# .env должен быть в .gitignore
echo ".env" >> .gitignore
```
### Секреты (для продакшена)
Для production рекомендуется использовать Docker secrets:
```yaml
services:
buh_bot:
secrets:
- telegram_token
secrets:
telegram_token:
file: ./secrets/telegram_token.txt
```
### Ключ шифрования
Критически важно сохранить `.encryption_key`!
```bash
# Backup ключа
cp data/.encryption_key data/.encryption_key.backup
# Или в безопасное место
cp data/.encryption_key ~/secure-backup/
```
Если ключ будет утерян, все пользовательские credentials станут недоступны.
## 📊 Мониторинг
### Логи
```bash
# Все логи
docker-compose logs
# Последние 100 строк
docker-compose logs --tail=100
# Следить за логами
docker-compose logs -f
# Логи с временными метками
docker-compose logs -t
```
### Ресурсы
```bash
# Использование CPU/RAM в реальном времени
docker stats buh_bot
# Информация о контейнере
docker inspect buh_bot
# Процессы внутри контейнера
docker-compose top
```
### Healthcheck
Контейнер проверяет свою работоспособность каждые 30 секунд:
```bash
# Проверка health status
docker inspect --format='{{.State.Health.Status}}' buh_bot
```
Статусы:
- `healthy` - всё работает
- `unhealthy` - проблемы (3 неудачных проверки)
- `starting` - контейнер запускается
## 🔄 Обновление
### Обновление кода
```bash
# Остановка бота
docker-compose down
# Получение обновлений
git pull
# Пересборка образа
docker-compose build
# Запуск
docker-compose up -d
```
### Обновление зависимостей
После изменения `requirements.txt`:
```bash
docker-compose build --no-cache
docker-compose up -d
```
## 🐛 Troubleshooting
### Контейнер не запускается
```bash
# Проверить логи
docker-compose logs
# Проверить конфигурацию
docker-compose config
# Запустить в foreground режиме
docker-compose up
```
### Проблемы с правами доступа
**Linux:**
```bash
# Изменить владельца директорий
sudo chown -R $USER:$USER data logs temp_documents
# Или дать полные права (не рекомендуется для продакшена)
chmod -R 777 data logs temp_documents
```
### Ошибка "port already in use"
Если используются дополнительные сервисы с портами:
```bash
# Найти процесс использующий порт
netstat -tulpn | grep :8443
# Или
lsof -i :8443
# Остановить конфликтующий контейнер
docker stop <container_name>
```
### Контейнер падает с OOM (Out of Memory)
Увеличить лимит памяти в `docker-compose.yml`:
```yaml
deploy:
resources:
limits:
memory: 1G # было 512M
```
### Нет места на диске
```bash
# Очистка неиспользуемых образов
docker image prune -a
# Очистка всего неиспользуемого
docker system prune -a --volumes
# Проверка использования места
docker system df
```
## 🚀 Production Deployment
### Использование Docker Swarm
```bash
# Инициализация Swarm
docker swarm init
# Деплой stack
docker stack deploy -c docker-compose.yml buh_bot_stack
# Масштабирование (если нужно)
docker service scale buh_bot_stack_buh_bot=2
# Просмотр сервисов
docker stack services buh_bot_stack
# Удаление stack
docker stack rm buh_bot_stack
```
### Использование с nginx (reverse proxy)
Если планируется использовать webhook режим:
```yaml
# docker-compose.yml
services:
buh_bot:
# ... существующая конфигурация
expose:
- "8443"
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certs:/etc/nginx/certs
```
### CI/CD пример (GitHub Actions)
```yaml
# .github/workflows/deploy.yml
name: Deploy Bot
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build and push Docker image
run: |
docker build -t myregistry/buh_bot:latest .
docker push myregistry/buh_bot:latest
- name: Deploy to server
run: |
ssh user@server "cd /app/buh_bot && \
docker-compose pull && \
docker-compose up -d"
```
## 📚 Дополнительные ресурсы
- [Docker Documentation](https://docs.docker.com/)
- [Docker Compose Documentation](https://docs.docker.com/compose/)
- [Best practices for writing Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
- [Docker security best practices](https://docs.docker.com/engine/security/)
## 🎯 Checklist перед деплоем
- [ ] `.env` файл создан и заполнен
- [ ] `TELEGRAM_BOT_TOKEN` указан корректно
- [ ] Директории `data/`, `logs/`, `temp_documents/` созданы
- [ ] Docker и Docker Compose установлены
- [ ] Backup `.encryption_key` сделан
- [ ] Логирование настроено
- [ ] Healthcheck работает
- [ ] Тестовый запуск выполнен успешно