Some checks reported errors
continuous-integration/drone/push Build encountered an error
7.2 KiB
7.2 KiB
🐳 Docker Deployment Guide
Быстрый старт
1. Настройка окружения
make docker-setup
Отредактируйте .env.prod и укажите:
BOT_TOKEN- токен от @BotFatherPOSTGRES_PASSWORD- надежный пароль для БДDATABASE_URL- обновите пароль в строке подключенияADMIN_IDS- ваш Telegram ID
2. Развертывание
# Автоматическое развертывание
make docker-deploy
# Или вручную:
make docker-build
make docker-up
make docker-db-migrate
3. Проверка
make docker-status
make docker-logs
Основные команды
Управление контейнерами
make docker-up # Запустить контейнеры
make docker-down # Остановить контейнеры
make docker-restart # Перезапустить контейнеры
make docker-status # Статус контейнеров
Просмотр логов
make docker-logs # Логи бота (с отслеживанием)
make docker-logs-db # Логи базы данных
make docker-logs-all # Все логи
База данных
make docker-db-migrate # Применить миграции
make docker-db-shell # Подключиться к PostgreSQL
make docker-db-backup # Создать бэкап
make docker-db-restore BACKUP=backups/backup_20231115.sql
Разработка
make docker-shell # Открыть shell в контейнере бота
make docker-rebuild # Пересобрать и перезапустить
Очистка
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- Внутренняя сеть для связи контейнеров
Мониторинг
Статус контейнеров
docker-compose ps
# Ожидаемый вывод:
# lottery_bot running 0.0.0.0:->
# lottery_db running 0.0.0.0:5432->5432/tcp
Логи в реальном времени
docker-compose logs -f bot
Использование ресурсов
docker stats lottery_bot lottery_db
Бэкапы
Автоматический бэкап
# Создать бэкап с временной меткой
make docker-db-backup
# Файл будет сохранен в:
# backups/backup_YYYYMMDD_HHMMSS.sql
Восстановление
make docker-db-restore BACKUP=backups/backup_20231115_120000.sql
Настройка автоматических бэкапов (cron)
# Добавьте в crontab:
0 2 * * * cd /path/to/lottery_bot && make docker-db-backup
Обновление
Обновление кода
git pull
make docker-rebuild
Применение миграций
make docker-db-migrate
Troubleshooting
Контейнер не запускается
# Проверьте логи
make docker-logs
# Проверьте конфигурацию
cat .env.prod
# Пересоберите образ
make docker-rebuild
База данных недоступна
# Проверьте статус БД
docker-compose ps db
# Проверьте логи БД
make docker-logs-db
# Подключитесь к БД напрямую
make docker-db-shell
Проблемы с миграциями
# Проверьте текущую версию
docker-compose exec bot alembic current
# Откатите миграцию
docker-compose exec bot alembic downgrade -1
# Примените снова
make docker-db-migrate
Высокое потребление ресурсов
# Проверьте использование
docker stats
# Ограничьте ресурсы в docker-compose.yml:
services:
bot:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
Безопасность
Рекомендации
-
Пароли
- Используйте надежные пароли в
.env.prod - Не коммитьте
.env.prodв Git
- Используйте надежные пароли в
-
Порты
- Закройте порт 5432 если БД не нужна извне
- Используйте firewall для ограничения доступа
-
Обновления
- Регулярно обновляйте образы:
docker-compose pull make docker-rebuild
- Регулярно обновляйте образы:
-
Логи
- Ротация логов в production
- Настройте logrotate для
/home/trevor/new_lottery_bot/logs/
-
Бэкапы
- Автоматические ежедневные бэкапы
- Храните бэкапы в безопасном месте
Production Checklist
- Отредактирован
.env.prodс реальными значениями - Установлены надежные пароли
- Настроены автоматические бэкапы
- Настроен мониторинг и алерты
- Настроена ротация логов
- Закрыты неиспользуемые порты
- Протестирован процесс восстановления из бэкапа
- Документированы учетные данные администраторов