🔧 Исправлена поддержка 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
|
||||
# ================================================
|
||||
|
||||
# Docker Compose command detection
|
||||
DOCKER_COMPOSE := $(shell which docker-compose 2>/dev/null || echo "docker compose")
|
||||
# Docker Compose command detection (v1 or v2)
|
||||
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
|
||||
|
||||
@@ -184,6 +189,12 @@ logs-frontend: ## Логи frontend
|
||||
shell: ## Django 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: ## Подключение к базе данных
|
||||
@$(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() {
|
||||
log "🔍 Проверка системных требований..."
|
||||
@@ -55,11 +58,18 @@ check_requirements() {
|
||||
error "Docker не установлен. Установите Docker и попробуйте снова."
|
||||
fi
|
||||
|
||||
# Проверяем Docker Compose
|
||||
if ! command -v docker-compose &> /dev/null; then
|
||||
# Проверяем Docker Compose (v1 или v2)
|
||||
DOCKER_COMPOSE_CMD=$(./scripts/detect-docker-compose.sh)
|
||||
if [[ -z "$DOCKER_COMPOSE_CMD" ]]; then
|
||||
error "Docker Compose не установлен. Установите Docker Compose и попробуйте снова."
|
||||
fi
|
||||
|
||||
if [[ "$DOCKER_COMPOSE_CMD" == "docker-compose" ]]; then
|
||||
log "✅ Найден Docker Compose v1"
|
||||
else
|
||||
log "✅ Найден Docker Compose v2"
|
||||
fi
|
||||
|
||||
# Проверяем nginx
|
||||
if ! command -v nginx &> /dev/null; then
|
||||
warning "nginx не установлен. Установка nginx..."
|
||||
@@ -438,20 +448,45 @@ EOF
|
||||
setup_database() {
|
||||
log "🗄️ Настройка и проверка безопасности базы данных..."
|
||||
|
||||
# Проверяем что контейнеры запущены
|
||||
if ! docker-compose ps | grep -q "Up"; then
|
||||
log "Запуск контейнеров для настройки БД..."
|
||||
docker-compose up -d
|
||||
sleep 15
|
||||
# Ждем запуска контейнеров
|
||||
log "⏳ Ожидание запуска контейнеров..."
|
||||
sleep 15
|
||||
|
||||
# Проверяем статус контейнеров
|
||||
if ! make status | grep -q "Up"; then
|
||||
warning "Контейнеры могут быть не готовы, ожидаем еще..."
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
# Применяем миграции
|
||||
log "🔄 Применение миграций базы данных..."
|
||||
docker-compose exec -T web python manage.py migrate
|
||||
if ! make migrate; then
|
||||
error "Ошибка применения миграций"
|
||||
fi
|
||||
|
||||
# Создаем суперпользователя (если не существует)
|
||||
log "👤 Создание суперпользователя..."
|
||||
docker-compose exec -T web python manage.py shell << 'EOF'
|
||||
# Создаем суперпользователя
|
||||
log "👤 Настройка суперпользователя..."
|
||||
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
|
||||
User = get_user_model()
|
||||
if not User.objects.filter(username='admin').exists():
|
||||
@@ -660,8 +695,14 @@ main() {
|
||||
setup_nginx
|
||||
|
||||
log "🏗️ Сборка и запуск контейнеров..."
|
||||
make build-prod
|
||||
make up-prod
|
||||
# Используем Makefile команды которые автоматически определяют Docker Compose
|
||||
if ! make build-prod; then
|
||||
error "Ошибка сборки контейнеров"
|
||||
fi
|
||||
|
||||
if ! make up-prod; then
|
||||
error "Ошибка запуска контейнеров"
|
||||
fi
|
||||
|
||||
setup_database
|
||||
setup_ssl
|
||||
|
||||
@@ -100,11 +100,22 @@ if command -v docker >/dev/null 2>&1; then
|
||||
fi
|
||||
|
||||
# Проверка 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
|
||||
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
|
||||
|
||||
# Проверка портов
|
||||
|
||||
Reference in New Issue
Block a user