Files
new_lottery_bot/DOCKER_DEPLOY.md
Andrew K. Choi 71b91bf9bb feat: добавлена Docker инфраструктура для продакшн-развертывания
Добавлено:
- Обновлен docker-compose.yml для production (упрощен, удален Redis/pgAdmin)
- .env.prod.example - шаблон конфигурации для продакшн
- deploy.sh - скрипт автоматического развертывания
- DOCKER_DEPLOY.md - полная документация по развертыванию

Makefile команды:
- docker-setup - первоначальная настройка
- docker-build/up/down - управление контейнерами
- docker-logs/logs-db - просмотр логов
- docker-db-migrate/backup/restore - работа с БД
- docker-deploy - полное автоматическое развертывание

Использование:
1. make docker-setup (создаст .env.prod)
2. Отредактировать .env.prod
3. make docker-deploy (автоматическое развертывание)
Или: ./deploy.sh
2025-11-17 09:42:23 +09:00

7.2 KiB
Raw Permalink Blame History

🐳 Docker Deployment Guide

Быстрый старт

1. Настройка окружения

make docker-setup

Отредактируйте .env.prod и укажите:

  • BOT_TOKEN - токен от @BotFather
  • POSTGRES_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

Безопасность

Рекомендации

  1. Пароли

    • Используйте надежные пароли в .env.prod
    • Не коммитьте .env.prod в Git
  2. Порты

    • Закройте порт 5432 если БД не нужна извне
    • Используйте firewall для ограничения доступа
  3. Обновления

    • Регулярно обновляйте образы:
      docker-compose pull
      make docker-rebuild
      
  4. Логи

    • Ротация логов в production
    • Настройте logrotate для /home/trevor/new_lottery_bot/logs/
  5. Бэкапы

    • Автоматические ежедневные бэкапы
    • Храните бэкапы в безопасном месте

Production Checklist

  • Отредактирован .env.prod с реальными значениями
  • Установлены надежные пароли
  • Настроены автоматические бэкапы
  • Настроен мониторинг и алерты
  • Настроена ротация логов
  • Закрыты неиспользуемые порты
  • Протестирован процесс восстановления из бэкапа
  • Документированы учетные данные администраторов

Полезные ссылки