fix: автоопределение docker compose v1/v2 и проверка окружения

- Makefile автоматически находит docker compose или docker-compose
- Добавлена команда make docker-check для проверки окружения
- Создана документация DOCKER_INSTALL.md
- Обновлен DEPLOY_QUICKSTART.md с инструкцией по установке Docker
- Все docker команды теперь используют переменную DOCKER_COMPOSE

Исправляет ошибку: 'docker-compose: No such file or directory'
This commit is contained in:
2025-11-17 15:34:06 +09:00
parent 87b6b4480c
commit 0eabb1bc75
3 changed files with 228 additions and 20 deletions

View File

@@ -1,5 +1,8 @@
# Makefile для телеграм-бота розыгрышей
# Определяем команду $(DOCKER_COMPOSE) (v2) или docker-compose (v1)
DOCKER_COMPOSE := $(shell command -v $(DOCKER_COMPOSE) 2> /dev/null || command -v docker-compose 2> /dev/null)
.PHONY: help install setup setup-postgres init-db run test clean
# По умолчанию показываем справку
@@ -213,10 +216,27 @@ docker-setup:
@mkdir -p logs backups
@echo "✅ Настройка завершена!"
# Проверка Docker и Docker Compose
docker-check:
@echo "<22> Проверка Docker окружения..."
@command -v docker >/dev/null 2>&1 || { echo "❌ Docker не установлен! См. DOCKER_INSTALL.md"; exit 1; }
@echo "✅ Docker: $$(docker --version)"
@if [ -z "$(DOCKER_COMPOSE)" ]; then \
echo "❌ Docker Compose не найден!"; \
echo " Установите: sudo apt install docker-compose-plugin"; \
echo " Или см. DOCKER_INSTALL.md"; \
exit 1; \
fi
@echo "✅ Docker Compose: $$($(DOCKER_COMPOSE) version)"
@docker ps >/dev/null 2>&1 || { echo "❌ Docker daemon не запущен!"; echo " Запустите: sudo systemctl start docker"; exit 1; }
@echo "✅ Docker daemon работает"
@echo ""
@echo "🎉 Все проверки пройдены!"
# Сборка Docker образа
docker-build:
docker-build: docker-check
@echo "🔨 Сборка Docker образа..."
docker compose build --no-cache
$(DOCKER_COMPOSE) build --no-cache
# Запуск контейнеров в фоновом режиме
docker-up:
@@ -225,7 +245,7 @@ docker-up:
echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \
exit 1; \
fi
docker compose --env-file .env.prod up -d
$(DOCKER_COMPOSE) --env-file .env.prod up -d
@echo "✅ Контейнеры запущены!"
@echo "📊 Проверьте статус: make docker-status"
@echo "📋 Просмотр логов: make docker-logs"
@@ -237,39 +257,39 @@ docker-up-fg:
echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \
exit 1; \
fi
docker compose --env-file .env.prod up
$(DOCKER_COMPOSE) --env-file .env.prod up
# Остановка контейнеров
docker-down:
@echo "🛑 Остановка контейнеров..."
docker compose down
$(DOCKER_COMPOSE) down
@echo "✅ Контейнеры остановлены!"
# Перезапуск контейнеров
docker-restart:
@echo "🔄 Перезапуск контейнеров..."
docker compose restart
$(DOCKER_COMPOSE) restart
@echo "✅ Контейнеры перезапущены!"
# Просмотр логов бота
docker-logs:
@echo "📋 Логи бота..."
docker compose logs -f bot
$(DOCKER_COMPOSE) logs -f bot
# Просмотр логов базы данных
docker-logs-db:
@echo "📋 Логи базы данных..."
docker compose logs -f db
$(DOCKER_COMPOSE) logs -f db
# Просмотр всех логов
docker-logs-all:
@echo "📋 Все логи..."
docker compose logs -f
$(DOCKER_COMPOSE) logs -f
# Статус контейнеров
docker-status:
@echo "📊 Статус контейнеров..."
@docker compose ps
@$(DOCKER_COMPOSE) ps
@echo ""
@echo "💾 Использование volumes:"
@docker volume ls | grep lottery || echo "Нет volumes"
@@ -281,20 +301,20 @@ docker-ps:
# Применение миграций в контейнере
docker-db-migrate:
@echo "⬆️ Применение миграций в контейнере..."
docker compose exec bot alembic upgrade head
$(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_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 && \
$(DOCKER_COMPOSE) exec -T db pg_dump -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db} > $$BACKUP_FILE && \
echo "✅ Бэкап создан: $$BACKUP_FILE"
# Восстановление из бэкапа
@@ -307,7 +327,7 @@ docker-db-restore:
@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}; \
cat $(BACKUP) | $(DOCKER_COMPOSE) exec -T db psql -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db}; \
echo "✅ База данных восстановлена!"; \
else \
echo "❌ Отменено"; \
@@ -316,12 +336,12 @@ docker-db-restore:
# Открыть shell в контейнере бота
docker-shell:
@echo "🐚 Открытие shell в контейнере бота..."
docker compose exec bot /bin/bash
$(DOCKER_COMPOSE) exec bot /bin/bash
# Остановка и удаление контейнеров
docker-clean:
@echo "🧹 Очистка контейнеров..."
docker compose down --remove-orphans
$(DOCKER_COMPOSE) down --remove-orphans
@echo "✅ Контейнеры удалены!"
# Полная очистка (включая volumes)
@@ -330,7 +350,7 @@ docker-prune:
@read -p "Продолжить? [y/N] " confirm; \
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
echo "🗑️ Полная очистка..."; \
docker compose down -v --remove-orphans; \
$(DOCKER_COMPOSE) down -v --remove-orphans; \
docker system prune -f; \
echo "✅ Очистка завершена!"; \
else \
@@ -340,9 +360,9 @@ docker-prune:
# Пересборка и перезапуск
docker-rebuild:
@echo "🔄 Пересборка и перезапуск..."
docker compose down
docker compose build --no-cache
docker compose --env-file .env.prod up -d
$(DOCKER_COMPOSE) down
$(DOCKER_COMPOSE) build --no-cache
$(DOCKER_COMPOSE) --env-file .env.prod up -d
@echo "✅ Готово!"
@make docker-logs