Some checks reported errors
continuous-integration/drone/push Build encountered an error
282 lines
7.2 KiB
Markdown
282 lines
7.2 KiB
Markdown
# 🐳 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/)
|