# 🐳 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/)