+ Наведен порядок в файлах проекта + Наведен порядок в документации + Настроены скрипты установки, развертки и так далее, расширен MakeFile
285 lines
11 KiB
Makefile
285 lines
11 KiB
Makefile
# CatLink Development and Deployment Makefile
|
||
# ================================================
|
||
|
||
.PHONY: help install update dev build deploy ssl clean logs test restart shell backup restore
|
||
|
||
# Default target
|
||
help: ## Показать доступные команды
|
||
@echo "CatLink - Makefile Commands"
|
||
@echo "=========================="
|
||
@echo ""
|
||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
||
@echo ""
|
||
|
||
# === Development Commands ===
|
||
|
||
install: ## Установка и первый запуск
|
||
@echo "🚀 Установка CatLink..."
|
||
@./setup.sh
|
||
@echo "✅ Установка завершена!"
|
||
@echo "📱 Frontend: http://localhost:3000"
|
||
@echo "🔧 Backend API: http://localhost:8000"
|
||
@echo "📊 Admin: http://localhost:8000/admin"
|
||
|
||
dev: ## Запуск в режиме разработки
|
||
@echo "🔧 Запуск в режиме разработки..."
|
||
@docker-compose up
|
||
|
||
dev-bg: ## Запуск в фоне для разработки
|
||
@echo "🔧 Запуск в фоне..."
|
||
@docker-compose up -d
|
||
@echo "✅ Запущено в фоне"
|
||
@echo "📱 Frontend: http://localhost:3000"
|
||
@echo "🔧 Backend: http://localhost:8000"
|
||
|
||
up: ## Запуск с пересборкой (legacy)
|
||
@docker-compose up -d --build
|
||
|
||
down: ## Остановка всех сервисов
|
||
@echo "⏹️ Остановка сервисов..."
|
||
@docker-compose down
|
||
@echo "✅ Сервисы остановлены"
|
||
|
||
stop: ## Остановка всех сервисов (alias)
|
||
@$(MAKE) down
|
||
|
||
restart: ## Перезапуск сервисов
|
||
@echo "🔄 Перезапуск сервисов..."
|
||
@docker-compose down
|
||
@docker-compose up -d
|
||
@echo "✅ Сервисы перезапущены"
|
||
|
||
# === Build Commands ===
|
||
|
||
build: ## Сборка без кэша
|
||
@echo "🏗️ Сборка контейнеров..."
|
||
@docker-compose build --no-cache
|
||
@echo "✅ Сборка завершена"
|
||
|
||
build-prod: ## Сборка для продакшена
|
||
@echo "🏗️ Сборка для продакшена..."
|
||
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml build --no-cache
|
||
@echo "✅ Продакшен сборка готова"
|
||
|
||
update: ## Обновление зависимостей и пересборка
|
||
@echo "📦 Обновление зависимостей..."
|
||
@git pull
|
||
@docker-compose down
|
||
@docker-compose build --no-cache
|
||
@docker-compose up -d
|
||
@echo "✅ Обновление завершено"
|
||
|
||
# === Production Deployment ===
|
||
|
||
deploy: ## Развертывание в продакшен
|
||
@echo "🚀 Развертывание в продакшен..."
|
||
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml down
|
||
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml build --no-cache
|
||
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
||
@echo "✅ Продакшен развернут"
|
||
|
||
# === SSL and Security ===
|
||
|
||
ssl: ## Настройка SSL с Let's Encrypt
|
||
@echo "🔒 Настройка SSL..."
|
||
@if [ ! -f docker-compose.ssl.yml ]; then \
|
||
echo "⚠️ Файл docker-compose.ssl.yml не найден. Создание..."; \
|
||
$(MAKE) ssl-setup; \
|
||
fi
|
||
@docker-compose -f docker-compose.yml -f docker-compose.ssl.yml up -d
|
||
@echo "✅ SSL настроен"
|
||
|
||
ssl-setup: ## Создание конфигурации SSL
|
||
@echo "🔒 Создание SSL конфигурации..."
|
||
@./scripts/ssl_setup.sh
|
||
@echo "✅ SSL конфигурация создана"
|
||
|
||
ssl-cert: ## Получение SSL сертификата
|
||
@echo "🔐 Получение SSL сертификата..."
|
||
@read -p "Введите домен (например, catlinks.kr): " DOMAIN; \
|
||
read -p "Введите email: " EMAIL; \
|
||
docker-compose -f docker-compose.ssl.yml run --rm certbot certonly \
|
||
--webroot -w /var/www/certbot \
|
||
-d $$DOMAIN \
|
||
--email $$EMAIL \
|
||
--agree-tos \
|
||
--no-eff-email
|
||
@echo "✅ SSL сертификат получен"
|
||
|
||
# === Database Management ===
|
||
|
||
migrate: ## Выполнить миграции базы данных
|
||
@echo "🗄️ Выполнение миграций..."
|
||
@docker-compose exec web python manage.py migrate
|
||
@echo "✅ Миграции выполнены"
|
||
|
||
makemigrations: ## Создать новые миграции
|
||
@echo "🗄️ Создание миграций..."
|
||
@docker-compose exec web python manage.py makemigrations
|
||
@echo "✅ Миграции созданы"
|
||
|
||
superuser: ## Создать суперпользователя
|
||
@echo "👤 Создание суперпользователя..."
|
||
@docker-compose exec web python manage.py createsuperuser
|
||
@echo "✅ Суперпользователь создан"
|
||
|
||
# === Maintenance ===
|
||
|
||
logs: ## Просмотр логов
|
||
@docker-compose logs -f
|
||
|
||
logs-web: ## Логи backend
|
||
@docker-compose logs -f web
|
||
|
||
logs-frontend: ## Логи frontend
|
||
@docker-compose logs -f frontend
|
||
|
||
shell: ## Django shell
|
||
@docker-compose exec web python manage.py shell
|
||
|
||
shell-db: ## Подключение к базе данных
|
||
@docker-compose exec db psql -U links_user -d links_db
|
||
|
||
backup: ## Создать бэкап базы данных
|
||
@echo "💾 Создание бэкапа..."
|
||
@mkdir -p backups
|
||
@docker-compose exec db pg_dump -U links_user links_db > backups/backup_$(shell date +%Y%m%d_%H%M%S).sql
|
||
@echo "✅ Бэкап создан в папке backups/"
|
||
|
||
restore: ## Восстановить из бэкапа
|
||
@echo "📥 Восстановление из бэкапа..."
|
||
@ls -la backups/
|
||
@read -p "Введите имя файла бэкапа: " BACKUP_FILE; \
|
||
docker-compose exec -T db psql -U links_user -d links_db < backups/$$BACKUP_FILE
|
||
@echo "✅ База данных восстановлена"
|
||
|
||
# === Testing and Quality ===
|
||
|
||
test: ## Запуск тестов
|
||
@echo "🧪 Запуск тестов..."
|
||
@docker-compose exec web python manage.py test
|
||
@echo "✅ Тесты завершены"
|
||
|
||
test-legacy: ## Запуск тестов (legacy pytest)
|
||
@docker-compose exec web pytest --maxfail=1 --disable-warnings -q
|
||
|
||
lint: ## Проверка кода
|
||
@echo "🔍 Проверка кода..."
|
||
@docker-compose exec web flake8 . || true
|
||
@docker-compose exec frontend npm run lint || true
|
||
@echo "✅ Проверка завершена"
|
||
|
||
format: ## Форматирование кода
|
||
@echo "🎨 Форматирование кода..."
|
||
@docker-compose exec web black . || true
|
||
@docker-compose exec frontend npm run format || true
|
||
@echo "✅ Код отформатирован"
|
||
|
||
# === Helper scripts and automation ===
|
||
generate-env: ## Сгенерировать .env (интерактивно)
|
||
@echo "🧭 Генерация .env файла (использует scripts/generate_env.sh)"
|
||
@bash ./scripts/generate_env.sh
|
||
|
||
create-superuser-noninteractive: ## Создать/обновить суперпользователя из .env (неинтерактивно)
|
||
@echo "👤 Создание/обновление суперпользователя из .env"
|
||
@bash ./scripts/create_superuser.sh
|
||
|
||
rebuild-no-cache: ## Пересобрать и поднять контейнеры без кэша (scripts/rebuild_no_cache.sh)
|
||
@echo "♻️ Пересборка контейнеров без кэша"
|
||
@bash ./scripts/rebuild_no_cache.sh
|
||
|
||
migrate-full: ## makemigrations, migrate и collectstatic
|
||
@echo "⚙️ Полный набор операций миграции и сбора статики"
|
||
@bash ./scripts/migrate_and_collect.sh
|
||
|
||
ssl-host-setup: ## Локальная установка nginx + certbot и настройка прокси (HOST)
|
||
@echo "🔐 Настройка nginx/letsencrypt на хосте"
|
||
@echo "Использование: make ssl-host-setup DOMAIN=example.com EMAIL=you@example.com"
|
||
@if [ -z "${DOMAIN}" ]; then echo "ERROR: DOMAIN variable required"; exit 1; fi
|
||
@if [ -z "${EMAIL}" ]; then echo "ERROR: EMAIL variable required"; exit 1; fi
|
||
@sudo bash ./scripts/ssl_setup.sh ${DOMAIN} ${EMAIL}
|
||
|
||
# === Cleanup ===
|
||
|
||
clean: ## Очистка системы
|
||
@echo "🧹 Очистка..."
|
||
@docker-compose down -v
|
||
@docker system prune -f
|
||
@docker volume prune -f
|
||
@echo "✅ Очистка завершена"
|
||
|
||
clean-all: ## Полная очистка (ОСТОРОЖНО!)
|
||
@echo "⚠️ ВНИМАНИЕ: Это удалит ВСЕ данные!"
|
||
@read -p "Продолжить? (yes/no): " CONFIRM; \
|
||
if [ "$$CONFIRM" = "yes" ]; then \
|
||
docker-compose down -v; \
|
||
docker system prune -af; \
|
||
docker volume prune -f; \
|
||
sudo rm -rf storage/; \
|
||
echo "✅ Полная очистка завершена"; \
|
||
else \
|
||
echo "❌ Отменено"; \
|
||
fi
|
||
|
||
# === Status and Info ===
|
||
|
||
status: ## Статус сервисов
|
||
@echo "📊 Статус сервисов:"
|
||
@docker-compose ps
|
||
@echo ""
|
||
@echo "🌐 URL-адреса:"
|
||
@echo " Frontend: http://localhost:3000"
|
||
@echo " Backend: http://localhost:8000"
|
||
@echo " Admin: http://localhost:8000/admin"
|
||
@echo ""
|
||
|
||
health: ## Проверка здоровья сервисов
|
||
@echo "🏥 Проверка здоровья..."
|
||
@curl -s http://localhost:3000 > /dev/null && echo "✅ Frontend: OK" || echo "❌ Frontend: ERROR"
|
||
@curl -s http://localhost:8000/api/ > /dev/null && echo "✅ Backend: OK" || echo "❌ Backend: ERROR"
|
||
@docker-compose exec db pg_isready -U links_user && echo "✅ Database: OK" || echo "❌ Database: ERROR"
|
||
|
||
info: ## Информация о проекте
|
||
@echo "📋 CatLink - Информация о проекте"
|
||
@echo "================================="
|
||
@echo "🐱 Название: CatLink"
|
||
@echo "📱 Frontend: Next.js 15"
|
||
@echo "🔧 Backend: Django 5.2"
|
||
@echo "🗄️ База данных: PostgreSQL"
|
||
@echo "🐳 Контейнеризация: Docker"
|
||
@echo ""
|
||
@echo "📁 Структура:"
|
||
@echo " frontend/ - Next.js приложение"
|
||
@echo " backend/ - Django API"
|
||
@echo " storage/ - Загруженные файлы"
|
||
@echo ""
|
||
@echo "🛠️ Команды разработки:"
|
||
@echo " make install - Первая установка"
|
||
@echo " make dev - Режим разработки"
|
||
@echo " make deploy - Продакшен"
|
||
@echo ""
|
||
|
||
# === Advanced Operations ===
|
||
|
||
scale: ## Масштабирование сервисов
|
||
@echo "📈 Масштабирование..."
|
||
@read -p "Количество экземпляров web: " WEB_COUNT; \
|
||
read -p "Количество экземпляров frontend: " FRONTEND_COUNT; \
|
||
docker-compose up -d --scale web=$$WEB_COUNT --scale frontend=$$FRONTEND_COUNT
|
||
@echo "✅ Масштабирование применено"
|
||
|
||
monitor: ## Мониторинг ресурсов
|
||
@echo "📊 Мониторинг ресурсов..."
|
||
@docker stats
|
||
|
||
reset: ## Сброс к заводским настройкам
|
||
@echo "⚠️ ВНИМАНИЕ: Сброс к заводским настройкам!"
|
||
@read -p "Продолжить? (yes/no): " CONFIRM; \
|
||
if [ "$$CONFIRM" = "yes" ]; then \
|
||
$(MAKE) clean-all; \
|
||
$(MAKE) install; \
|
||
echo "✅ Сброс завершен"; \
|
||
else \
|
||
echo "❌ Отменено"; \
|
||
fi
|