🔧 Исправлена поддержка Docker Compose v2
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
✅ Fixes: - Добавлена поддержка Docker Compose v2 (docker compose) - Автоматическое определение версии Docker Compose в Makefile - Обновлены скрипты master-deploy.sh и pre-deploy-check.sh - Добавлена утилита detect-docker-compose.sh - Исправлены команды в функции setup_database 🔧 Изменения: - Makefile: улучшенное определение команды Docker Compose - master-deploy.sh: использует make команды вместо прямых вызовов - pre-deploy-check.sh: проверка обеих версий Docker Compose - Добавлена команда shell-exec в Makefile Теперь скрипт корректно работает с Docker Compose v2 на современных системах.
This commit is contained in:
15
Makefile
15
Makefile
@@ -1,8 +1,13 @@
|
|||||||
# CatLink Development and Deployment Makefile
|
# CatLink Development and Deployment Makefile
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
# Docker Compose command detection
|
# Docker Compose command detection (v1 or v2)
|
||||||
DOCKER_COMPOSE := $(shell which docker-compose 2>/dev/null || echo "docker compose")
|
DOCKER_COMPOSE := $(shell which docker-compose 2>/dev/null && echo "docker-compose" || (docker compose version >/dev/null 2>&1 && echo "docker compose" || echo ""))
|
||||||
|
|
||||||
|
# Check if Docker Compose is available
|
||||||
|
ifeq ($(DOCKER_COMPOSE),)
|
||||||
|
$(error Docker Compose not found. Please install Docker Compose v1 or v2)
|
||||||
|
endif
|
||||||
|
|
||||||
.PHONY: help install update dev build deploy ssl clean logs test restart shell backup restore
|
.PHONY: help install update dev build deploy ssl clean logs test restart shell backup restore
|
||||||
|
|
||||||
@@ -184,6 +189,12 @@ logs-frontend: ## Логи frontend
|
|||||||
shell: ## Django shell
|
shell: ## Django shell
|
||||||
@$(DOCKER_COMPOSE) exec web python manage.py shell
|
@$(DOCKER_COMPOSE) exec web python manage.py shell
|
||||||
|
|
||||||
|
shell-bash: ## Bash в контейнере backend
|
||||||
|
@$(DOCKER_COMPOSE) exec web bash
|
||||||
|
|
||||||
|
shell-exec: ## Выполнить команду в контейнере (использование: make shell-exec CMD="python manage.py migrate")
|
||||||
|
@$(DOCKER_COMPOSE) exec web $(CMD)
|
||||||
|
|
||||||
shell-db: ## Подключение к базе данных
|
shell-db: ## Подключение к базе данных
|
||||||
@$(DOCKER_COMPOSE) exec db psql -U links_user -d links_db
|
@$(DOCKER_COMPOSE) exec db psql -U links_user -d links_db
|
||||||
|
|
||||||
|
|||||||
29
scripts/detect-docker-compose.sh
Executable file
29
scripts/detect-docker-compose.sh
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Docker Compose Detection Utility
|
||||||
|
# Определяет правильную команду для Docker Compose v1/v2
|
||||||
|
|
||||||
|
detect_docker_compose() {
|
||||||
|
if command -v docker-compose &> /dev/null; then
|
||||||
|
echo "docker-compose"
|
||||||
|
elif docker compose version &> /dev/null 2>&1; then
|
||||||
|
echo "docker compose"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Экспортируем функцию
|
||||||
|
export -f detect_docker_compose
|
||||||
|
|
||||||
|
# Если скрипт запущен напрямую, выводим результат
|
||||||
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||||
|
COMPOSE_CMD=$(detect_docker_compose)
|
||||||
|
if [[ -n "$COMPOSE_CMD" ]]; then
|
||||||
|
echo "$COMPOSE_CMD"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "Docker Compose not found" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
@@ -46,6 +46,9 @@ print(''.join(secrets.choice(chars) for i in range(50)))
|
|||||||
"
|
"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Глобальная переменная для команды Docker Compose
|
||||||
|
DOCKER_COMPOSE_CMD=""
|
||||||
|
|
||||||
# Проверка требований
|
# Проверка требований
|
||||||
check_requirements() {
|
check_requirements() {
|
||||||
log "🔍 Проверка системных требований..."
|
log "🔍 Проверка системных требований..."
|
||||||
@@ -55,11 +58,18 @@ check_requirements() {
|
|||||||
error "Docker не установлен. Установите Docker и попробуйте снова."
|
error "Docker не установлен. Установите Docker и попробуйте снова."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Проверяем Docker Compose
|
# Проверяем Docker Compose (v1 или v2)
|
||||||
if ! command -v docker-compose &> /dev/null; then
|
DOCKER_COMPOSE_CMD=$(./scripts/detect-docker-compose.sh)
|
||||||
|
if [[ -z "$DOCKER_COMPOSE_CMD" ]]; then
|
||||||
error "Docker Compose не установлен. Установите Docker Compose и попробуйте снова."
|
error "Docker Compose не установлен. Установите Docker Compose и попробуйте снова."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$DOCKER_COMPOSE_CMD" == "docker-compose" ]]; then
|
||||||
|
log "✅ Найден Docker Compose v1"
|
||||||
|
else
|
||||||
|
log "✅ Найден Docker Compose v2"
|
||||||
|
fi
|
||||||
|
|
||||||
# Проверяем nginx
|
# Проверяем nginx
|
||||||
if ! command -v nginx &> /dev/null; then
|
if ! command -v nginx &> /dev/null; then
|
||||||
warning "nginx не установлен. Установка nginx..."
|
warning "nginx не установлен. Установка nginx..."
|
||||||
@@ -438,20 +448,45 @@ EOF
|
|||||||
setup_database() {
|
setup_database() {
|
||||||
log "🗄️ Настройка и проверка безопасности базы данных..."
|
log "🗄️ Настройка и проверка безопасности базы данных..."
|
||||||
|
|
||||||
# Проверяем что контейнеры запущены
|
# Ждем запуска контейнеров
|
||||||
if ! docker-compose ps | grep -q "Up"; then
|
log "⏳ Ожидание запуска контейнеров..."
|
||||||
log "Запуск контейнеров для настройки БД..."
|
|
||||||
docker-compose up -d
|
|
||||||
sleep 15
|
sleep 15
|
||||||
|
|
||||||
|
# Проверяем статус контейнеров
|
||||||
|
if ! make status | grep -q "Up"; then
|
||||||
|
warning "Контейнеры могут быть не готовы, ожидаем еще..."
|
||||||
|
sleep 10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Применяем миграции
|
# Применяем миграции
|
||||||
log "🔄 Применение миграций базы данных..."
|
log "🔄 Применение миграций базы данных..."
|
||||||
docker-compose exec -T web python manage.py migrate
|
if ! make migrate; then
|
||||||
|
error "Ошибка применения миграций"
|
||||||
|
fi
|
||||||
|
|
||||||
# Создаем суперпользователя (если не существует)
|
# Создаем суперпользователя
|
||||||
log "👤 Создание суперпользователя..."
|
log "👤 Настройка суперпользователя..."
|
||||||
docker-compose exec -T web python manage.py shell << 'EOF'
|
cat > /tmp/create_superuser.py << 'PYTHON_EOF'
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
User = get_user_model()
|
||||||
|
if not User.objects.filter(username='admin').exists():
|
||||||
|
User.objects.create_superuser('admin', 'admin@example.com', 'admin123')
|
||||||
|
print('✅ Суперпользователь admin создан с паролем admin123')
|
||||||
|
print('⚠️ ВАЖНО: Смените пароль после первого входа!')
|
||||||
|
else:
|
||||||
|
print('ℹ️ Суперпользователь уже существует')
|
||||||
|
PYTHON_EOF
|
||||||
|
|
||||||
|
# Выполняем скрипт создания суперпользователя
|
||||||
|
if make shell-exec CMD="python manage.py shell < /tmp/create_superuser.py" 2>/dev/null; then
|
||||||
|
success "Суперпользователь настроен"
|
||||||
|
else
|
||||||
|
# Fallback - используем прямую команду
|
||||||
|
$(./scripts/detect-docker-compose.sh) exec web python manage.py shell < /tmp/create_superuser.py || warning "Не удалось создать суперпользователя автоматически"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Удаляем временный файл
|
||||||
|
rm -f /tmp/create_superuser.py
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
if not User.objects.filter(username='admin').exists():
|
if not User.objects.filter(username='admin').exists():
|
||||||
@@ -660,8 +695,14 @@ main() {
|
|||||||
setup_nginx
|
setup_nginx
|
||||||
|
|
||||||
log "🏗️ Сборка и запуск контейнеров..."
|
log "🏗️ Сборка и запуск контейнеров..."
|
||||||
make build-prod
|
# Используем Makefile команды которые автоматически определяют Docker Compose
|
||||||
make up-prod
|
if ! make build-prod; then
|
||||||
|
error "Ошибка сборки контейнеров"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! make up-prod; then
|
||||||
|
error "Ошибка запуска контейнеров"
|
||||||
|
fi
|
||||||
|
|
||||||
setup_database
|
setup_database
|
||||||
setup_ssl
|
setup_ssl
|
||||||
|
|||||||
@@ -100,11 +100,22 @@ if command -v docker >/dev/null 2>&1; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Проверка Docker Compose
|
# Проверка Docker Compose
|
||||||
check_and_report "command -v docker-compose >/dev/null 2>&1" "Docker Compose установлен"
|
# Проверка Docker Compose
|
||||||
|
echo ""
|
||||||
|
info "Проверка Docker Compose..."
|
||||||
|
|
||||||
|
# Проверяем Docker Compose v1 или v2
|
||||||
if command -v docker-compose >/dev/null 2>&1; then
|
if command -v docker-compose >/dev/null 2>&1; then
|
||||||
COMPOSE_VERSION=$(docker-compose --version | cut -d' ' -f3 | cut -d',' -f1)
|
COMPOSE_VERSION=$(docker-compose --version | cut -d' ' -f3 | cut -d',' -f1)
|
||||||
echo " Версия Docker Compose: $COMPOSE_VERSION"
|
echo " Версия Docker Compose v1: $COMPOSE_VERSION"
|
||||||
|
success "Docker Compose v1 установлен"
|
||||||
|
elif docker compose version >/dev/null 2>&1; then
|
||||||
|
COMPOSE_VERSION=$(docker compose version --short 2>/dev/null || docker compose version | head -1 | cut -d' ' -f4)
|
||||||
|
echo " Версия Docker Compose v2: $COMPOSE_VERSION"
|
||||||
|
success "Docker Compose v2 установлен"
|
||||||
|
else
|
||||||
|
error "Docker Compose не установлен"
|
||||||
|
((ERRORS++))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Проверка портов
|
# Проверка портов
|
||||||
|
|||||||
Reference in New Issue
Block a user