Some checks reported errors
continuous-integration/drone Build encountered an error
243 lines
6.7 KiB
Markdown
243 lines
6.7 KiB
Markdown
# Docker & CI/CD Deployment Guide
|
||
|
||
Этот документ описывает настройку и использование Docker контейнеризации и CI/CD pipeline для Quiz Bot.
|
||
|
||
## 🐳 Docker Setup
|
||
|
||
### Требования
|
||
|
||
- Docker 20.10+
|
||
- Docker Compose 2.0+
|
||
- 1GB свободного места на диске
|
||
- 512MB RAM для контейнера
|
||
|
||
### Быстрый старт для разработки
|
||
|
||
1. **Клонируйте репозиторий:**
|
||
```bash
|
||
git clone <repository-url>
|
||
cd quiz-bot
|
||
```
|
||
|
||
2. **Настройте переменные окружения:**
|
||
```bash
|
||
cp .env.example .env
|
||
# Отредактируйте .env файл, добавьте ваш BOT_TOKEN
|
||
```
|
||
|
||
3. **Запустите с помощью скрипта:**
|
||
```bash
|
||
./scripts/dev.sh run
|
||
```
|
||
|
||
### Ручной запуск через Docker Compose
|
||
|
||
```bash
|
||
# Сборка и запуск
|
||
docker-compose up --build -d
|
||
|
||
# Просмотр логов
|
||
docker-compose logs -f
|
||
|
||
# Остановка
|
||
docker-compose down
|
||
```
|
||
|
||
## 🔧 Доступные скрипты
|
||
|
||
### Development Script (`scripts/dev.sh`)
|
||
|
||
```bash
|
||
./scripts/dev.sh build # Собрать образ
|
||
./scripts/dev.sh run # Запустить в dev режиме
|
||
./scripts/dev.sh test # Запустить тесты
|
||
./scripts/dev.sh logs # Показать логи
|
||
./scripts/dev.sh cleanup # Очистить ресурсы
|
||
```
|
||
|
||
### Production Script (`scripts/deploy.sh`)
|
||
|
||
```bash
|
||
./scripts/deploy.sh deploy # Деплой в production
|
||
./scripts/deploy.sh monitor # Мониторинг сервисов
|
||
./scripts/deploy.sh rollback # Откат версии
|
||
./scripts/deploy.sh logs # Production логи
|
||
```
|
||
|
||
## 🚀 CI/CD Pipeline (Drone)
|
||
|
||
### Структура Pipeline
|
||
|
||
Pipeline состоит из следующих этапов:
|
||
|
||
1. **Prepare** - Подготовка и информация о коммите
|
||
2. **Lint** - Проверка кода (Black, isort, flake8, mypy)
|
||
3. **Test** - Запуск unit тестов
|
||
4. **Security** - Проверка безопасности (Safety, Bandit)
|
||
5. **Build** - Сборка Docker образа
|
||
6. **Test Docker** - Тестирование контейнера
|
||
7. **Deploy Staging** - Деплой в staging (ветка develop)
|
||
8. **Deploy Production** - Деплой в production (ветка main)
|
||
9. **Notify** - Уведомления о результате
|
||
|
||
### Настройка Drone
|
||
|
||
1. **Создайте секреты в Drone:**
|
||
```bash
|
||
# Токены для разных сред
|
||
drone secret add repo/quiz-bot bot_token_staging "your_staging_bot_token"
|
||
drone secret add repo/quiz-bot bot_token_production "your_production_bot_token"
|
||
|
||
# Webhook для уведомлений
|
||
drone secret add repo/quiz-bot notification_webhook "your_webhook_url"
|
||
```
|
||
|
||
2. **Активируйте репозиторий в Drone UI**
|
||
|
||
3. **Настройте триггеры:**
|
||
- Push в `main` → Production деплой
|
||
- Push в `develop` → Staging деплой
|
||
- Pull Request → Тестирование
|
||
|
||
### Переменные окружения для CI/CD
|
||
|
||
```yaml
|
||
# .drone.yml использует следующие секреты:
|
||
bot_token_staging # Токен бота для staging
|
||
bot_token_production # Токен бота для production
|
||
notification_webhook # URL для уведомлений
|
||
```
|
||
|
||
## 📦 Docker Images
|
||
|
||
### Development Image
|
||
- **Тег:** `quiz-bot:dev`
|
||
- **Размер:** ~200MB
|
||
- **Использование:** Локальная разработка
|
||
|
||
### Production Image
|
||
- **Тег:** `quiz-bot:latest`
|
||
- **Размер:** ~150MB (multi-stage build)
|
||
- **Оптимизации:**
|
||
- Multi-stage сборка
|
||
- Непривилегированный пользователь
|
||
- Health checks
|
||
- Минимальный базовый образ
|
||
|
||
## 🔍 Мониторинг и логирование
|
||
|
||
### Health Checks
|
||
|
||
Контейнер включает встроенные health checks:
|
||
|
||
```bash
|
||
# Проверка статуса
|
||
docker inspect --format='{{.State.Health.Status}}' quiz-bot
|
||
|
||
# Логи health check
|
||
docker inspect --format='{{range .State.Health.Log}}{{.Output}}{{end}}' quiz-bot
|
||
```
|
||
|
||
### Логирование
|
||
|
||
```bash
|
||
# Development логи
|
||
docker-compose logs -f quiz-bot
|
||
|
||
# Production логи с ротацией
|
||
docker-compose -f docker-compose.prod.yml logs --tail=100 -f quiz-bot
|
||
|
||
# Системные логи контейнера
|
||
journalctl -u docker -f | grep quiz-bot
|
||
```
|
||
|
||
### Мониторинг ресурсов
|
||
|
||
```bash
|
||
# Использование ресурсов
|
||
docker stats quiz-bot
|
||
|
||
# Непрерывный мониторинг
|
||
./scripts/deploy.sh monitor
|
||
```
|
||
|
||
## 🛠 Troubleshooting
|
||
|
||
### Распространенные проблемы
|
||
|
||
1. **Контейнер не запускается:**
|
||
```bash
|
||
# Проверить логи
|
||
docker logs quiz-bot
|
||
|
||
# Проверить переменные окружения
|
||
docker inspect quiz-bot | grep -A 10 "Env"
|
||
```
|
||
|
||
2. **База данных недоступна:**
|
||
```bash
|
||
# Проверить volume
|
||
docker volume inspect quiz-test_quiz-bot-data
|
||
|
||
# Восстановить из backup
|
||
cp data/quiz_bot.db.backup.* data/quiz_bot.db
|
||
```
|
||
|
||
3. **Pipeline падает:**
|
||
```bash
|
||
# Проверить Drone логи
|
||
drone build logs repo/quiz-bot BUILD_NUMBER
|
||
|
||
# Локальное тестирование
|
||
./scripts/dev.sh test
|
||
```
|
||
|
||
### Откат в случае проблем
|
||
|
||
```bash
|
||
# Production откат
|
||
./scripts/deploy.sh rollback
|
||
|
||
# Принудительный откат к конкретной версии
|
||
export IMAGE_TAG=previous-working-version
|
||
docker-compose -f docker-compose.prod.yml up -d
|
||
```
|
||
|
||
## 🔧 Настройка для разных сред
|
||
|
||
### Development
|
||
```bash
|
||
# Используйте .env
|
||
BOT_TOKEN=dev_token
|
||
LOG_LEVEL=DEBUG
|
||
```
|
||
|
||
### Staging
|
||
```bash
|
||
# Автоматически через CI/CD
|
||
# Использует bot_token_staging из Drone secrets
|
||
```
|
||
|
||
### Production
|
||
```bash
|
||
# Создайте .env.prod
|
||
cp .env.prod.example .env.prod
|
||
# Заполните production значения
|
||
```
|
||
|
||
## 📚 Дополнительная информация
|
||
|
||
- [Docker Best Practices](https://docs.docker.com/develop/dev-best-practices/)
|
||
- [Drone CI Documentation](https://docs.drone.io/)
|
||
- [Docker Compose Reference](https://docs.docker.com/compose/compose-file/)
|
||
|
||
## 🤝 Contributing
|
||
|
||
При внесении изменений:
|
||
|
||
1. Создайте feature branch
|
||
2. Убедитесь, что тесты проходят локально
|
||
3. Создайте Pull Request
|
||
4. Pipeline автоматически протестирует изменения
|
||
5. После ревью изменения будут задеплоены
|