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
This commit is contained in:
217
Makefile
217
Makefile
@@ -149,4 +149,219 @@ reset: clean
|
||||
@echo "🔄 Полная переустановка..."
|
||||
rm -f *.db *.sqlite *.sqlite3
|
||||
rm -rf migrations/versions/*.py
|
||||
make setup
|
||||
make setup
|
||||
|
||||
# ============================================
|
||||
# 🐳 Docker команды для продакшн
|
||||
# ============================================
|
||||
|
||||
# Показать справку по Docker командам
|
||||
docker-help:
|
||||
@echo "🐳 Docker команды для продакшн-развертывания"
|
||||
@echo "=============================================="
|
||||
@echo ""
|
||||
@echo "Настройка:"
|
||||
@echo " make docker-setup - Первоначальная настройка (создать .env.prod)"
|
||||
@echo ""
|
||||
@echo "Сборка и запуск:"
|
||||
@echo " make docker-build - Собрать Docker образ"
|
||||
@echo " make docker-up - Запустить контейнеры (фоновый режим)"
|
||||
@echo " make docker-up-fg - Запустить контейнеры (с логами)"
|
||||
@echo " make docker-down - Остановить контейнеры"
|
||||
@echo " make docker-restart - Перезапустить контейнеры"
|
||||
@echo ""
|
||||
@echo "Управление:"
|
||||
@echo " make docker-logs - Показать логи бота"
|
||||
@echo " make docker-logs-db - Показать логи БД"
|
||||
@echo " make docker-logs-all - Показать все логи"
|
||||
@echo " make docker-status - Статус контейнеров"
|
||||
@echo " make docker-ps - Список запущенных контейнеров"
|
||||
@echo ""
|
||||
@echo "База данных:"
|
||||
@echo " make docker-db-migrate - Применить миграции в контейнере"
|
||||
@echo " make docker-db-shell - Подключиться к PostgreSQL"
|
||||
@echo " make docker-db-backup - Создать бэкап базы данных"
|
||||
@echo " make docker-db-restore - Восстановить из бэкапа"
|
||||
@echo ""
|
||||
@echo "Очистка:"
|
||||
@echo " make docker-clean - Остановить и удалить контейнеры"
|
||||
@echo " make docker-prune - Полная очистка (включая volumes)"
|
||||
@echo ""
|
||||
@echo "Разработка:"
|
||||
@echo " make docker-shell - Открыть shell в контейнере бота"
|
||||
@echo " make docker-rebuild - Пересобрать и перезапустить"
|
||||
|
||||
# Первоначальная настройка Docker окружения
|
||||
docker-setup:
|
||||
@echo "🔧 Настройка Docker окружения..."
|
||||
@if [ ! -f .env.prod ]; then \
|
||||
if [ -f .env.prod.example ]; then \
|
||||
echo "📄 Создание .env.prod из примера..."; \
|
||||
cp .env.prod.example .env.prod; \
|
||||
echo "⚠️ ВНИМАНИЕ: Отредактируйте .env.prod и укажите реальные значения!"; \
|
||||
echo " - BOT_TOKEN"; \
|
||||
echo " - POSTGRES_PASSWORD"; \
|
||||
echo " - DATABASE_URL"; \
|
||||
echo " - ADMIN_IDS"; \
|
||||
else \
|
||||
echo "❌ Файл .env.prod.example не найден!"; \
|
||||
exit 1; \
|
||||
fi \
|
||||
else \
|
||||
echo "✅ Файл .env.prod уже существует"; \
|
||||
fi
|
||||
@mkdir -p logs backups
|
||||
@echo "✅ Настройка завершена!"
|
||||
|
||||
# Сборка Docker образа
|
||||
docker-build:
|
||||
@echo "🔨 Сборка Docker образа..."
|
||||
docker-compose build --no-cache
|
||||
|
||||
# Запуск контейнеров в фоновом режиме
|
||||
docker-up:
|
||||
@echo "🚀 Запуск контейнеров..."
|
||||
@if [ ! -f .env.prod ]; then \
|
||||
echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \
|
||||
exit 1; \
|
||||
fi
|
||||
docker-compose --env-file .env.prod up -d
|
||||
@echo "✅ Контейнеры запущены!"
|
||||
@echo "📊 Проверьте статус: make docker-status"
|
||||
@echo "📋 Просмотр логов: make docker-logs"
|
||||
|
||||
# Запуск контейнеров с выводом логов
|
||||
docker-up-fg:
|
||||
@echo "🚀 Запуск контейнеров с логами..."
|
||||
@if [ ! -f .env.prod ]; then \
|
||||
echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \
|
||||
exit 1; \
|
||||
fi
|
||||
docker-compose --env-file .env.prod up
|
||||
|
||||
# Остановка контейнеров
|
||||
docker-down:
|
||||
@echo "🛑 Остановка контейнеров..."
|
||||
docker-compose down
|
||||
@echo "✅ Контейнеры остановлены!"
|
||||
|
||||
# Перезапуск контейнеров
|
||||
docker-restart:
|
||||
@echo "🔄 Перезапуск контейнеров..."
|
||||
docker-compose restart
|
||||
@echo "✅ Контейнеры перезапущены!"
|
||||
|
||||
# Просмотр логов бота
|
||||
docker-logs:
|
||||
@echo "📋 Логи бота..."
|
||||
docker-compose logs -f bot
|
||||
|
||||
# Просмотр логов базы данных
|
||||
docker-logs-db:
|
||||
@echo "📋 Логи базы данных..."
|
||||
docker-compose logs -f db
|
||||
|
||||
# Просмотр всех логов
|
||||
docker-logs-all:
|
||||
@echo "📋 Все логи..."
|
||||
docker-compose logs -f
|
||||
|
||||
# Статус контейнеров
|
||||
docker-status:
|
||||
@echo "📊 Статус контейнеров..."
|
||||
@docker-compose ps
|
||||
@echo ""
|
||||
@echo "💾 Использование volumes:"
|
||||
@docker volume ls | grep lottery || echo "Нет volumes"
|
||||
|
||||
# Список запущенных контейнеров
|
||||
docker-ps:
|
||||
@docker ps --filter "name=lottery"
|
||||
|
||||
# Применение миграций в контейнере
|
||||
docker-db-migrate:
|
||||
@echo "⬆️ Применение миграций в контейнере..."
|
||||
docker-compose exec bot alembic upgrade head
|
||||
@echo "✅ Миграции применены!"
|
||||
|
||||
# Подключение к PostgreSQL в контейнере
|
||||
docker-db-shell:
|
||||
@echo "🐘 Подключение к PostgreSQL..."
|
||||
@docker-compose exec db psql -U $${POSTGRES_USER:-lottery_user} -d $${POSTGRES_DB:-lottery_bot_db}
|
||||
|
||||
# Создание бэкапа базы данных
|
||||
docker-db-backup:
|
||||
@echo "💾 Создание бэкапа базы данных..."
|
||||
@mkdir -p backups
|
||||
@BACKUP_FILE=backups/backup_$$(date +%Y%m%d_%H%M%S).sql; \
|
||||
docker-compose exec -T db pg_dump -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db} > $$BACKUP_FILE && \
|
||||
echo "✅ Бэкап создан: $$BACKUP_FILE"
|
||||
|
||||
# Восстановление из бэкапа
|
||||
docker-db-restore:
|
||||
@echo "⚠️ Восстановление базы данных из бэкапа"
|
||||
@if [ -z "$(BACKUP)" ]; then \
|
||||
echo "❌ Укажите файл бэкапа: make docker-db-restore BACKUP=backups/backup_20231115_120000.sql"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo "Восстановление из: $(BACKUP)"
|
||||
@read -p "Это удалит текущие данные! Продолжить? [y/N] " confirm; \
|
||||
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
|
||||
cat $(BACKUP) | docker-compose exec -T db psql -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db}; \
|
||||
echo "✅ База данных восстановлена!"; \
|
||||
else \
|
||||
echo "❌ Отменено"; \
|
||||
fi
|
||||
|
||||
# Открыть shell в контейнере бота
|
||||
docker-shell:
|
||||
@echo "🐚 Открытие shell в контейнере бота..."
|
||||
docker-compose exec bot /bin/bash
|
||||
|
||||
# Остановка и удаление контейнеров
|
||||
docker-clean:
|
||||
@echo "🧹 Очистка контейнеров..."
|
||||
docker-compose down --remove-orphans
|
||||
@echo "✅ Контейнеры удалены!"
|
||||
|
||||
# Полная очистка (включая volumes)
|
||||
docker-prune:
|
||||
@echo "⚠️ ВНИМАНИЕ! Это удалит ВСЕ данные Docker (включая БД)!"
|
||||
@read -p "Продолжить? [y/N] " confirm; \
|
||||
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
|
||||
echo "🗑️ Полная очистка..."; \
|
||||
docker-compose down -v --remove-orphans; \
|
||||
docker system prune -f; \
|
||||
echo "✅ Очистка завершена!"; \
|
||||
else \
|
||||
echo "❌ Отменено"; \
|
||||
fi
|
||||
|
||||
# Пересборка и перезапуск
|
||||
docker-rebuild:
|
||||
@echo "🔄 Пересборка и перезапуск..."
|
||||
docker-compose down
|
||||
docker-compose build --no-cache
|
||||
docker-compose --env-file .env.prod up -d
|
||||
@echo "✅ Готово!"
|
||||
@make docker-logs
|
||||
|
||||
# Быстрое развертывание с нуля
|
||||
docker-deploy:
|
||||
@echo "🚀 Полное развертывание в продакшн..."
|
||||
@make docker-setup
|
||||
@echo ""
|
||||
@echo "⚠️ Перед продолжением убедитесь, что отредактировали .env.prod!"
|
||||
@read -p "Продолжить развертывание? [y/N] " confirm; \
|
||||
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
|
||||
make docker-build; \
|
||||
make docker-up; \
|
||||
sleep 5; \
|
||||
make docker-db-migrate; \
|
||||
echo ""; \
|
||||
echo "✅ Развертывание завершено!"; \
|
||||
echo "📊 Статус:"; \
|
||||
make docker-status; \
|
||||
else \
|
||||
echo "❌ Отменено"; \
|
||||
fi
|
||||
Reference in New Issue
Block a user