Files
new_lottery_bot/docs/DOCKER_DEPLOY.md
Andrew K. Choi 1551b8b29f
Some checks reported errors
continuous-integration/drone/push Build encountered an error
fix: обработка ошибки 'message is not modified' в conduct_lottery_draw_confirm
2025-11-17 15:46:34 +09:00

282 lines
7.2 KiB
Markdown
Raw Permalink 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 Deployment Guide
## Быстрый старт
### 1. Настройка окружения
```bash
make docker-setup
```
Отредактируйте `.env.prod` и укажите:
- `BOT_TOKEN` - токен от @BotFather
- `POSTGRES_PASSWORD` - надежный пароль для БД
- `DATABASE_URL` - обновите пароль в строке подключения
- `ADMIN_IDS` - ваш Telegram ID
### 2. Развертывание
```bash
# Автоматическое развертывание
make docker-deploy
# Или вручную:
make docker-build
make docker-up
make docker-db-migrate
```
### 3. Проверка
```bash
make docker-status
make docker-logs
```
---
## Основные команды
### Управление контейнерами
```bash
make docker-up # Запустить контейнеры
make docker-down # Остановить контейнеры
make docker-restart # Перезапустить контейнеры
make docker-status # Статус контейнеров
```
### Просмотр логов
```bash
make docker-logs # Логи бота (с отслеживанием)
make docker-logs-db # Логи базы данных
make docker-logs-all # Все логи
```
### База данных
```bash
make docker-db-migrate # Применить миграции
make docker-db-shell # Подключиться к PostgreSQL
make docker-db-backup # Создать бэкап
make docker-db-restore BACKUP=backups/backup_20231115.sql
```
### Разработка
```bash
make docker-shell # Открыть shell в контейнере бота
make docker-rebuild # Пересобрать и перезапустить
```
### Очистка
```bash
make docker-clean # Удалить контейнеры
make docker-prune # Полная очистка (включая volumes)
```
---
## Структура проекта
```
lottery_bot/
├── Dockerfile # Образ бота
├── docker-compose.yml # Оркестрация контейнеров
├── .env.prod # Продакшн-конфигурация (НЕ коммитить!)
├── .env.prod.example # Пример конфигурации
├── .dockerignore # Исключения для Docker
├── deploy.sh # Скрипт автоматического развертывания
├── logs/ # Логи (монтируется из контейнера)
├── backups/ # Бэкапы БД
└── data/ # Данные приложения
```
---
## Архитектура
### Контейнеры
**bot** - Telegram бот
- Образ: Собирается из `Dockerfile`
- Restart: unless-stopped
- Зависимости: db
- Health check: Python проверка
**db** - PostgreSQL база данных
- Образ: postgres:15-alpine
- Restart: unless-stopped
- Порты: 5432:5432
- Volume: postgres_data
- Health check: pg_isready
### Volumes
- `postgres_data` - Данные PostgreSQL (персистентные)
- `bot_data` - Данные приложения
### Networks
- `lottery_network` - Внутренняя сеть для связи контейнеров
---
## Мониторинг
### Статус контейнеров
```bash
docker-compose ps
# Ожидаемый вывод:
# lottery_bot running 0.0.0.0:->
# lottery_db running 0.0.0.0:5432->5432/tcp
```
### Логи в реальном времени
```bash
docker-compose logs -f bot
```
### Использование ресурсов
```bash
docker stats lottery_bot lottery_db
```
---
## Бэкапы
### Автоматический бэкап
```bash
# Создать бэкап с временной меткой
make docker-db-backup
# Файл будет сохранен в:
# backups/backup_YYYYMMDD_HHMMSS.sql
```
### Восстановление
```bash
make docker-db-restore BACKUP=backups/backup_20231115_120000.sql
```
### Настройка автоматических бэкапов (cron)
```bash
# Добавьте в crontab:
0 2 * * * cd /path/to/lottery_bot && make docker-db-backup
```
---
## Обновление
### Обновление кода
```bash
git pull
make docker-rebuild
```
### Применение миграций
```bash
make docker-db-migrate
```
---
## Troubleshooting
### Контейнер не запускается
```bash
# Проверьте логи
make docker-logs
# Проверьте конфигурацию
cat .env.prod
# Пересоберите образ
make docker-rebuild
```
### База данных недоступна
```bash
# Проверьте статус БД
docker-compose ps db
# Проверьте логи БД
make docker-logs-db
# Подключитесь к БД напрямую
make docker-db-shell
```
### Проблемы с миграциями
```bash
# Проверьте текущую версию
docker-compose exec bot alembic current
# Откатите миграцию
docker-compose exec bot alembic downgrade -1
# Примените снова
make docker-db-migrate
```
### Высокое потребление ресурсов
```bash
# Проверьте использование
docker stats
# Ограничьте ресурсы в docker-compose.yml:
services:
bot:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
```
---
## Безопасность
### Рекомендации
1. **Пароли**
- Используйте надежные пароли в `.env.prod`
- Не коммитьте `.env.prod` в Git
2. **Порты**
- Закройте порт 5432 если БД не нужна извне
- Используйте firewall для ограничения доступа
3. **Обновления**
- Регулярно обновляйте образы:
```bash
docker-compose pull
make docker-rebuild
```
4. **Логи**
- Ротация логов в production
- Настройте logrotate для `/home/trevor/new_lottery_bot/logs/`
5. **Бэкапы**
- Автоматические ежедневные бэкапы
- Храните бэкапы в безопасном месте
---
## Production Checklist
- [ ] Отредактирован `.env.prod` с реальными значениями
- [ ] Установлены надежные пароли
- [ ] Настроены автоматические бэкапы
- [ ] Настроен мониторинг и алерты
- [ ] Настроена ротация логов
- [ ] Закрыты неиспользуемые порты
- [ ] Протестирован процесс восстановления из бэкапа
- [ ] Документированы учетные данные администраторов
---
## Полезные ссылки
- [Docker Documentation](https://docs.docker.com/)
- [Docker Compose Documentation](https://docs.docker.com/compose/)
- [PostgreSQL Docker Hub](https://hub.docker.com/_/postgres)
- [Alembic Documentation](https://alembic.sqlalchemy.org/)